2016-09-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix -Wformat warnings in WebLoaderStrategy
        https://bugs.webkit.org/show_bug.cgi?id=162553

        Unreviewed

        Two of the format arguments are swapped. Fix them.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):

2016-09-25  Chris Dumez  <cdumez@apple.com>

        Regression(r206356): Caused crashes for !NETWORK_SESSION code path
        https://bugs.webkit.org/show_bug.cgi?id=162541

        Reviewed by Alexey Proskuryakov.

        After r206356, if Download is downloading a Blob instead of doing a
        network load, then m_resourceHandle / m_downloadClient are used to do
        the download. This broke some assumptions on Mac because the
        NETWORK_SESSION code path assumed it was relying on m_download and the
        !NETWORK_SESSION code path assumed it was using m_nsURLDownload /
        m_delegate.

        This patch refactors the code so that:
        - The Download destructor now takes care of invalidating
          m_resourceHandle and m_downloadClient before calling
          platformInvalidate(). For the SOUP code path,
          platformInvalidate() no longer needs to do anything
          because SOUP uses m_resourceHandle / m_downloadClient
          only. For the Mac !NETWORK_SESSION code path, we keep
          invalidating m_nsURLDownload / m_delegate but we no
          longer assume that those are initialized (given that
          they are not when downloading a blob). Other
          platforms do nothing in platformInvalidate() at the
          moment.
        - Download::cancel() now takes care of cancelling the
          download if we're downloading a blob. Otherwise, we
          call the platform specific cancelNetworkLoad(). This
          is the same pattern that is used for start() /
          startNetworkLoad().

        * NetworkProcess/Downloads/BlobDownloadClient.cpp:
        (WebKit::BlobDownloadClient::didCancel):
        * NetworkProcess/Downloads/BlobDownloadClient.h:
        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::~Download):
        (WebKit::Download::cancel):
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::cancelNetworkLoad):
        (WebKit::Download::cancel): Deleted.
        * NetworkProcess/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::cancelNetworkLoad):
        (WebKit::Download::cancel): Deleted.
        * NetworkProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::cancelNetworkLoad):
        (WebKit::Download::platformInvalidate):
        (WebKit::Download::cancel): Deleted.
        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::cancelNetworkLoad):
        (WebKit::Download::platformInvalidate):
        (WebKit::Download::cancel): Deleted.

2016-09-24  Chris Dumez  <cdumez@apple.com>

        [WK2] Enable support for 'download' attribute on anchor elements
        https://bugs.webkit.org/show_bug.cgi?id=162535

        Reviewed by Darin Adler.

        Enable support for 'download' attribute on anchor elements for WebKit2
        now that:
        - It works with our NETWORK_SESSION code path (Bug 162531)
        - Supports Blob / Data URLs (Bug 156099)
        - Requires user interaction / ignores synthetic clicks (Bug 156099)

        * Shared/WebPreferencesDefinitions.h:

2016-09-24  Chris Dumez  <cdumez@apple.com>

        <a download> does not support Blob URLs
        https://bugs.webkit.org/show_bug.cgi?id=156099
        <rdar://problem/25535520>

        Reviewed by Darin Adler.

        Add support for downloading Blob URLs to WebKit2. This should work for
        all WebKit2 port. This also works in combination with the download
        attribute on anchor elements. Note that the download attribute is only
        enabled at runtime in the context of the layout tests for now. I'll
        enable the download attribute on WK2 once I have fixed Bug 162531.

        * CMakeLists.txt:
        * NetworkProcess/Downloads/BlobDownloadClient.cpp: Added.
        (WebKit::BlobDownloadClient::BlobDownloadClient):
        (WebKit::BlobDownloadClient::didReceiveResponse):
        (WebKit::BlobDownloadClient::didReceiveBuffer):
        (WebKit::BlobDownloadClient::didFinishLoading):
        (WebKit::BlobDownloadClient::didFail):
        * NetworkProcess/Downloads/BlobDownloadClient.h: Added.
        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        (WebKit::Download::start):
        (WebKit::Download::didStart):
        (WebKit::Download::didReceiveResponse):
        (WebKit::Download::decideDestinationWithSuggestedFilename):
        (WebKit::Download::~Download): Deleted.
        (WebKit::Download::didReceiveData): Deleted.
        (WebKit::Download::shouldDecodeSourceDataOfMIMEType): Deleted.
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::Download):
        (WebKit::Download::suggestedName):
        (WebKit::Download::request):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::startNetworkLoad):
        * NetworkProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::startNetworkLoad):
        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::startNetworkLoad):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:

2016-09-24  Chris Dumez  <cdumez@apple.com>

        [WK2] anchor.download attribute value is ignored by NETWORK_SESSION code path
        https://bugs.webkit.org/show_bug.cgi?id=162531

        Reviewed by Darin Adler.

        Pipe the suggested filename through in the NETWORK_SESSION code path so
        that it is used when deciding the destination path.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::setSuggestedFilename):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::suggestedFilename):
        (WebKit::NetworkDataTask::setSuggestedFilename):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):

2016-09-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls playhead does not animate smoothly while playing
        https://bugs.webkit.org/show_bug.cgi?id=162399
        <rdar://problem/28115680>

        Reviewed by Beth Dakin.

        See WebCore ChangeLog for more details.

        In the UI process, we update the WebPlaybackSessionManager's timing value when the rate or current time changes.
        Each AVValueTiming is generated from the current time, system anchor time, and playback rate. The behavior of
        the first two properties is unaffected. However, the rate used to update the timing value is the effective
        playback rate, which is equal to the playback rate unless we are (1) not playing, (2) interacting with the media
        controls in such a way that the media is essentially not playing, or (3) the current time precedes the playback
        start time, accounting for playback direction. In these cases, our effective playback rate is 0, which means
        that we do not animate the playhead.

        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.messages.in:
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.mm:
        (WebKit::WebPlaybackSessionModelContext::beginScrubbing):
        (WebKit::WebPlaybackSessionModelContext::endScrubbing):
        (WebKit::WebPlaybackSessionModelContext::setPlaybackStartedTime):
        (WebKit::WebPlaybackSessionModelContext::setCurrentTime):
        (WebKit::WebPlaybackSessionManagerProxy::setPlaybackStartedTime):
        * WebProcess/cocoa/WebPlaybackSessionManager.h:
        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionInterfaceContext::playbackStartedTimeChanged):
        (WebKit::WebPlaybackSessionManager::playbackStartedTimeChanged):

2016-09-23  Caitlin Potter  <caitp@igalia.com>

        [JSC] Implement parsing of Async Functions
        https://bugs.webkit.org/show_bug.cgi?id=161409

        Reviewed by Yusuke Suzuki.

        * Configurations/FeatureDefines.xcconfig:

2016-09-23  Jonathan Bedard  <jbedard@apple.com>

        Fix Mac CMake build after r206261
        https://bugs.webkit.org/show_bug.cgi?id=162493

        Reviewed by Alex Christensen.

        * CMakeLists.txt: Exclude WebTextChecker from Mac CMake builds.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.

2016-09-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] BadDamage X error in /webkit2/WebKitWebView/preferred-size
        https://bugs.webkit.org/show_bug.cgi?id=162489

        Reviewed by Michael Catanzaro.

        Do a XSync right after creating/destroying the XDamage used by the redirected window in X11.

        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::~AcceleratedBackingStoreX11):
        (WebKit::AcceleratedBackingStoreX11::update):

2016-09-23  Antoine Quint  <graouts@apple.com>

        Add a new runtime flag for work on modern media controls (off by default)
        https://bugs.webkit.org/show_bug.cgi?id=162420
        <rdar://problem/27989489>

        Reviewed by Eric Carlson.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-09-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r194387): Crash on github.com in IntlDateTimeFormat::resolvedOptions in C locale
        https://bugs.webkit.org/show_bug.cgi?id=162139

        Reviewed by Michael Catanzaro.

        Handle the case of "C" locale passed by the user using "en-US" as default to match what
        WTF::platformUserPreferredLanguages() does.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_preferred_languages): Remove the call to languageDidChange() because
        overrideUserPreferredLanguages() already calls it, so we were actually notifying the observers twice.

2016-09-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Improve performance when resizing a window with multiple web views in X11
        https://bugs.webkit.org/show_bug.cgi?id=162413

        Reviewed by Michael Catanzaro.

        Resizing a window with a single way view performs good enough, but when adding more tabs, the performance
        decreases a lot. This is because resize is a sync operation, and the UI process waits for the web process to
        have a new update for the new size, while still draws the previous frame. This is needed for the visible web
        view, to avoid flickering and artifacts while resizing, but for all other hidden web views, we don't really need
        to block the UI process. This doesn't happen in Wayland, because in Wayland we never block the UI process while
        waiting for web process update after a resize.

        * UIProcess/AcceleratedDrawingAreaProxy.cpp:
        (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState): Return early if the web
        view is not visible.
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp:
        (WebKit::AcceleratedBackingStoreX11::update): Only schedule a redraw on a damage event when the view is visible.
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
        (WebKit::AcceleratedSurfaceX11::AcceleratedSurfaceX11): Do a XSync right after creating the new pixmap.
        (WebKit::AcceleratedSurfaceX11::resize): Ditto.

2016-09-22  Daniel Bates  <dabates@apple.com>

        Remove more ENABLE(TEXT_AUTOSIZING) code
        https://bugs.webkit.org/show_bug.cgi?id=162456

        Reviewed by Simon Fraser.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_text_autosizing_enabled_set):
        (ewk_settings_text_autosizing_enabled_get):
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2016-09-22  Jonathan Bedard  <jbedard@apple.com>

        Automatic Text Replacement Testing in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=161919

        Reviewed by Ryosuke Niwa.

        Implemented test hooks for text replacement for WebKit2.
        Note that spell checking has not been implemented, so most tests which use text replacement still fail.

        * UIProcess/API/C/WKTextChecker.cpp: Added #ifdefs to include file for iOS and Mac.
        (WKTextCheckerSetTestingMode): Added.
        * UIProcess/API/C/WKTextChecker.h: Added #ifdefs to include file for iOS and Mac.
        * UIProcess/TextChecker.h: Added hooks to bypass writing to NSUserDefaults.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::toggleSmartInsertDelete):  New message to toggle TextChecker flag.
        (WebKit::WebPageProxy::toggleAutomaticQuoteSubstitution): Ditto.
        (WebKit::WebPageProxy::toggleAutomaticLinkDetection): Ditto.
        (WebKit::WebPageProxy::toggleAutomaticDashSubstitution): Ditto.
        (WebKit::WebPageProxy::toggleAutomaticTextReplacement): Ditto.
        * UIProcess/WebPageProxy.h: Added messages to toggle TextChecker flags.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * UIProcess/efl/TextCheckerEfl.cpp: Implemented new TextChecker hooks for non-Cocoa platforms.
        * UIProcess/gtk/TextCheckerGtk.cpp: Ditto.
        (WebKit::TextChecker::mutableState): Ditto.
        * UIProcess/ios/TextCheckerIOS.mm: Implemented new TextChecker hooks.
        (WebKit::TextChecker::mutableState): Allow modification of text checker without writing to NSUserDefaults.
        (WebKit::TextChecker::state): Call mutableState.
        (WebKit::TextChecker::accessSmartInsertDeleteEnabled): Dummy function.
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::refresh): Reload TextChecker configuration from NSUserDefaults.
        (WebKit::TextChecker::mutableState): Allow modification of text checker without writing to NSUserDefaults.
        (WebKit::TextChecker::state): Call mutableState().
        (WebKit::TextChecker::accessSmartInsertDeleteEnabled): Allow toggling of smartInsertDeleteEnabled without writing to NSUserDefaults.
        (WebKit::initializeState): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAutomaticLinkDetectionEnabled): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Removed WKBundleSetAutomaticLinkDetectionEnabled.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAutomaticLinkDetectionEnabled): Deleted.
        * WebKit2.xcodeproj/project.pbxproj: Added WKTextChecker to Mac and iOS.
        * WebProcess/InjectedBundle/InjectedBundle.h: Remove setAutomaticLinkDetectionEnabled.
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::toggleSmartInsertDelete): Send message to UI process to toggle TextChecker.
        (WebKit::WebEditorClient::toggleAutomaticQuoteSubstitution): Ditto.
        (WebKit::WebEditorClient::toggleAutomaticLinkDetection): Ditto.
        (WebKit::WebEditorClient::toggleAutomaticDashSubstitution): Ditto.
        (WebKit::WebEditorClient::toggleAutomaticTextReplacement): Ditto.

2016-09-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rename DataObjectGtk as SelectionData
        https://bugs.webkit.org/show_bug.cgi?id=162380

        Reviewed by Žan Doberšek.

        * PlatformGTK.cmake:
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (IPC::ArgumentCoder<SelectionData>::encode):
        (IPC::ArgumentCoder<SelectionData>::decode):
        * Shared/gtk/ArgumentCodersGtk.h:
        * Shared/gtk/WebSelectionData.cpp: Renamed from Source/WebKit2/Shared/gtk/PasteboardContent.cpp.
        (WebKit::WebSelectionData::WebSelectionData):
        (WebKit::WebSelectionData::encode):
        (WebKit::WebSelectionData::decode):
        * Shared/gtk/WebSelectionData.h: Renamed from Source/WebKit2/Shared/gtk/PasteboardContent.h.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::startDrag):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::startDrag):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in:
        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::DroppingContext::DroppingContext):
        (WebKit::DragAndDropHandler::startDrag):
        (WebKit::DragAndDropHandler::fillDragData):
        (WebKit::DragAndDropHandler::finishDrag):
        (WebKit::DragAndDropHandler::dropDataSelection):
        (WebKit::DragAndDropHandler::dragEntered):
        (WebKit::DragAndDropHandler::dragDataSelection):
        (WebKit::DragAndDropHandler::dragMotion):
        (WebKit::DragAndDropHandler::dragLeave):
        (WebKit::DragAndDropHandler::drop):
        * UIProcess/gtk/DragAndDropHandler.h:
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp:
        (WebKit::WebPasteboardProxy::writeToClipboard):
        (WebKit::WebPasteboardProxy::readFromClipboard):
        (WebKit::WebPasteboardProxy::setPrimarySelectionOwner): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::writeToClipboard):
        (WebKit::WebPlatformStrategies::readFromClipboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-09-21  Dan Bernstein  <mitz@apple.com>

        [macOS] Upon layout, _webView:renderingProgressDidChange: fires before the intrinsic content size is updated
        https://bugs.webkit.org/show_bug.cgi?id=162359
        <rdar://problem/27776454>

        Reviewed by Tim Horton.

        Test: added to TestWebKitAPI/Tests/WebKit2Cocoa/AutoLayoutIntegration.mm

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: Fixed a bug where
          m_pendingNewlyReachedLayoutMilestones was never initialized.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: Added
          m_pendingNewlyReachedLayoutMilestones member variable to this derived class as well.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers): If we have pending milestones, notify
          the WebPageProxy now, after any content size changes have been sent.
        (WebKit::TiledCoreAnimationDrawingArea::dispatchDidReachLayoutMilestone): New override that
          accumulates the milestones into m_pendingNewlyReachedLayoutMilestones and returns true,
          so that the caller won’t notify the WebPageProxy immediately.

2016-09-21  Anders Carlsson  <andersca@apple.com>

        support openPaymentSetup API on ApplePaySession object
        https://bugs.webkit.org/show_bug.cgi?id=162357
        rdar://problem/26776939

        Reviewed by Tim Horton.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::openPaymentSetup):
        Call through to platformOpenPaymentSetup, and in the completion handler, send back a OpenPaymentSetupReply message.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        Add new members.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        Add OpenPaymentSetup message.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformOpenPaymentSetup):
        Allocate a PKPassLibrary and call openPaymentSetupForMerchantIdentifier:domain:completion: on it.

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::generateOpenPaymentSetupReplyID):
        New helper function to generate a reply ID.

        (WebKit::WebPaymentCoordinator::openPaymentSetup):
        Add the completion handler to m_pendingOpenPaymentSetupCallbacks and send a OpenPaymentSetup message to the UI process.

        (WebKit::WebPaymentCoordinator::openPaymentSetupReply):
        Grab the callback given its ID and invoke it.

        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        Add new members.

        * WebProcess/ApplePay/WebPaymentCoordinator.messages.in:
        Add OpenPaymentSetupReply message.

2016-09-21  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed, build fix.

        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::paint): fix usage of deviceScaleFactor variable which was
        removed.

2016-09-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Clean up DataObjectGtk handling
        https://bugs.webkit.org/show_bug.cgi?id=162267

        Reviewed by Michael Catanzaro.

        In some cases the ownership of DataObjectGtk instances is not clear enough, and we have hacks to avoid memory
        leaks because of that.

        * Shared/gtk/ArgumentCodersGtk.cpp:
        (IPC::encodeImage): Use Image instead of GdkPixbuf.
        (IPC::decodeImage): Ditto.
        (IPC::ArgumentCoder<DataObjectGtk>::encode):
        (IPC::ArgumentCoder<DataObjectGtk>::decode):
        (IPC::encode): Deleted.
        (IPC::decode): Deleted.
        (IPC::ArgumentCoder<DragData>::encode): Deleted.
        (IPC::ArgumentCoder<DragData>::decode): Deleted.
        * Shared/gtk/ArgumentCodersGtk.h:
        * Shared/gtk/PasteboardContent.cpp:
        (WebKit::PasteboardContent::PasteboardContent): Add empty constructor that creates a new DataObjectGtk, a
        constructor that receives a const reference and another one that takes the ownership of the given DataObjectGtk.
        (WebKit::PasteboardContent::encode):
        (WebKit::PasteboardContent::decode):
        * Shared/gtk/PasteboardContent.h: Use Ref instead of RefPtr for the DataObjectGtk member.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::startDrag): Transfer the DataObjectGtk to the DragAndDropHandler, instead of using DragData.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragControllerAction): Instead of sending a DragData object to the web process,
        send the DataObjectGtk and DragData members needed as parameters.
        (WebKit::WebPageProxy::startDrag): Transfer the received DataObjectGtk to page client, instead of using
        DragData. Also notify the web process that drag started.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Update StartDrag message parameters.
        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::DragAndDropHandler): Remove unneeded initialization.
        (WebKit::DragAndDropHandler::startDrag): Take ownership of the given DataObjectGtk.
        * UIProcess/gtk/DragAndDropHandler.h:
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp:
        (WebKit::WebPasteboardProxy::writeToClipboard):
        (WebKit::WebPasteboardProxy::readFromClipboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::writeToClipboard):
        (WebKit::WebPlatformStrategies::readFromClipboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::convertCairoSurfaceToShareableBitmap):
        (WebKit::WebDragClient::startDrag): Do not create a DragData and pass the DataObjectGtk directly to the
        message. Also notify the WebPage that drag is about to start.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction): Remove explicit DataObjectGtk derefs and simply create a
        DragData using the DataObjectGtk pointer as platform data.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Update PerformDragControllerAction message parameters.

2016-09-20  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] ewk_context_menu_item_select test have been failed
        https://bugs.webkit.org/show_bug.cgi?id=162143

        Reviewed by Gyuyoung Kim.

        ewk_context_menu_item_select has been waited until test page loading is finished, but it is
        unnecessary to wait the loading is finished. It would be good to pass if *testFinished*
        flag is true.

        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp:
        (EWK2ContextMenuTest::checkBasicContextMenuItem):
        (EWK2ContextMenuTest::testContextMenu):
        (TEST_F):

2016-09-20  Keith Rollin  <krollin@apple.com>

        Add new logging for network resource loading
        https://bugs.webkit.org/show_bug.cgi?id=162237

        Reviewed by Antti Koivisto.

        Add new logging along the non-main path for resource loading. This
        logging should allow us to differentiate between lack-of-logging due
        execution along a path that doesn't have logging statements and
        lack-of-logging due to a hung process.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::setDefersLoading):
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource):
        (WebKit::WebLoaderStrategy::scheduleLoad):

2016-09-20  Anders Carlsson  <andersca@apple.com>

        Can't present a payment sheet if a sheet is already active in another window
        https://bugs.webkit.org/show_bug.cgi?id=162314
        rdar://problem/27643511

        Reviewed by Tim Horton.

        Instead of keeping track of whether a sheet is active or not, keep track of its underlying payment coordinator proxy,
        so we can hide it and send a cancel event to WebCore if another sheet is being presented.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::~WebPaymentCoordinatorProxy):
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI):
        (WebKit::WebPaymentCoordinatorProxy::didReachFinalState):

2016-09-20  Keith Rollin  <krollin@apple.com>

        Adjust current networking logging
        https://bugs.webkit.org/show_bug.cgi?id=162235

        Reviewed by Antti Koivisto.

        Update the "always on" network logging in order to better track the
        loading of a particular resource and to better bind together the
        resources downloaded for a particular page and frame. Do this by
        consistently logging pageID, frameID, and resourceID.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::startLocalLoad):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::create):
        (WebKit::WebResourceLoader::WebResourceLoader):
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/Network/WebResourceLoader.h:

2016-09-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a unit test covering <https://trac.webkit.org/changeset/205983>
        https://bugs.webkit.org/show_bug.cgi?id=162112

        Reviewed by Beth Dakin.

        Adds some a test support method as SPI on WKWebView to determine whether to request candidates. See
        Tools/ChangeLog for more details.

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

2016-09-19  Anders Carlsson  <andersca@apple.com>

        Suppress JavaScript prompts early on in certain cases
        https://bugs.webkit.org/show_bug.cgi?id=162243
        rdar://problem/27661602

        Reviewed by Geoffrey Garen.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::shouldSuppressJavaScriptDialogs):
        Add helper function.

        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        Call helper function and return early if we should supress dialogs.

2016-09-19  Keith Rollin  <krollin@apple.com>

        Reduce logging from WebResourceLoader::didReceiveData
        https://bugs.webkit.org/show_bug.cgi?id=162233

        Reviewed by Antti Koivisto.

        Only log once even if called multiple times for a single resource.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveData):
        * WebProcess/Network/WebResourceLoader.h:

2016-09-19  Daniel Bates  <dabates@apple.com>

        Remove ENABLE(TEXT_AUTOSIZING) automatic text size adjustment code
        https://bugs.webkit.org/show_bug.cgi?id=162167

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-09-19  Alex Christensen  <achristensen@webkit.org>

        Only override URLParser::enabled if NSUserDefaults object exists
        https://bugs.webkit.org/show_bug.cgi?id=162131

        Reviewed by Sam Weinig.

        * Shared/Cocoa/WebKit2InitializeCocoa.mm:
        (WebKit::platformInitializeWebKit2):
        * Shared/WebKit2Initialize.cpp:
        When I enable URLParser by default, I will want the default to only be overwritten if there is a
        NSUserDefaults key for URLParserEnabled.  Right now it is setting URLParser::enabled to false always,
        which isn't a problem because the default is also false.  When the default is true, that will overwrite the default.

2016-09-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Bring the inspected page's window forward when activating element search
        https://bugs.webkit.org/show_bug.cgi?id=162114
        <rdar://problem/28349357>

        Reviewed by Brian Burg.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::elementSelectionChanged):
        When element search is activated allow the platform to bring
        the window containing the inspected page to the foreground.

        (WebKit::WebInspectorProxy::platformBringInspectedPageToFront):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformBringInspectedPageToFront):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformBringInspectedPageToFront):
        Default empty implementation for ports.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformBringInspectedPageToFront):
        Bring the window containing the inspected page to the foreground.

2016-09-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Empty referer header after WebKit session state restoration trips Bad Behavior Wordpress plugin
        https://bugs.webkit.org/show_bug.cgi?id=159606

        Reviewed by Carlos Garcia Campos.

        Leave the referrer member of FrameState unset when restoring from session state, unless
        there is actually a nonempty referrer saved in the state. If we set it to an empty string,
        then an empty referrer gets sent to the server, which some servers do not accept. It
        triggers the Bad Behavior plugin on my WordPress blog, for instance. It also breaks vox.com.

        * UIProcess/API/gtk/WebKitWebViewSessionState.cpp:
        (decodeFrameState):

2016-09-18  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Remove unused methods from _WKInputDelegate
        https://bugs.webkit.org/show_bug.cgi?id=162098

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/_WKInputDelegate.h:

2016-09-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Stop using glReadPixels() to blit AC surfaces in the UIProcess under Wayland
        https://bugs.webkit.org/show_bug.cgi?id=161530

        Reviewed by Carlos Garcia Campos.

        Use gdk_cairo_draw_from_gl when all necessary conditions exist.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::create): take TextureMapper::PaintFlags as optional argument.
        (WebKit::ThreadedCompositor::ThreadedCompositor): ditto.
        (WebKit::ThreadedCompositor::renderLayerTree): relay paint flags to TextureMapper::beginPaint.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::paint): use the faster gdk_cairo_draw_from_gl when a new
        enough GTK+ is in use.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost): create compositor
        with PaintingMirrored flag if we have recent GTK+ and are running under Wayland.
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h: implement shouldPaintMirrored by always
        returning false.
        * WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.h: implement shouldPaintMirrored by always
        returning true.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::compositeLayersToContext): pass PaintingMirror flag to TextureMapper
        when under a recent enough GTK+ and Wayland.

2016-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move the rendering of auth dialog shadow to the auth dialog widget
        https://bugs.webkit.org/show_bug.cgi?id=162061

        Reviewed by Michael Catanzaro.

        Instead of rendering the shadow in the web view, we can let the auth dialog do it. This fixes the rendering of
        the shadow in Wayland when using gdk_cairo_draw_from_gl().

        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (webkitAuthenticationDialogDraw): Draw the shadow before rendering the child.
        (webkitAuthenticationDialogSizeAllocate): Center the child on the allocated space.
        (webkit_authentication_dialog_class_init): Add size_allocate implementation.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDraw): Do not draw the shadow when auth dialog is present.
        (webkitWebViewBaseSizeAllocate): Give the whole web view allocation to the auth dialog.

2016-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ThreadedCompositor] Scrolling artifacts on accelerated subframes
        https://bugs.webkit.org/show_bug.cgi?id=149060

        Reviewed by Michael Catanzaro.

        The problem is that we are scrolling the main frame even when scrolling is not delegated.

        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::scrollNonCompositedContents): Return early if main frame view doesn't
        delegate scrolling.

2016-09-16  Simon Fraser  <simon.fraser@apple.com>

        WKWebViewConfiguration's _incrementalRenderingSuppressionTimeout should be an NSTimeInterval
        https://bugs.webkit.org/show_bug.cgi?id=162092

        Reviewed by Anders Carlsson.
        
        The _incrementalRenderingSuppressionTimeout property should be a NSTimeInterval, not a CGFloat.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _incrementalRenderingSuppressionTimeout]):
        (-[WKWebViewConfiguration _setIncrementalRenderingSuppressionTimeout:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2016-09-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Surface created for glReadPixels path on Wayland is bigger than needed
        https://bugs.webkit.org/show_bug.cgi?id=162025

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::paint): the texture created by the Wayland
        compositor is already scaled, so scaling its size when creating the surface causes it
        to end up bigger than necessary.

2016-09-16  David Kilzer  <ddkilzer@apple.com>

        ASSERT accidentally commented out in r204916
        <https://webkit.org/b/162077>

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::terminateProcess): Comment in the ASSERT
        back in.

2016-09-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Inserting a space after inserting an accepted candidate scrolls the document and causes a flicker
        https://bugs.webkit.org/show_bug.cgi?id=162009
        <rdar://problem/28086237>

        Reviewed by Tim Horton.

        After inserting a text candidate, if the candidate ended with a soft space, the next space we insert should just
        replace the soft space. This currently works because we leave the text insertion out of the list of
        KeypressCommands sent to the web process and instead replace the soft space via WebPage::InsertTextAsync.
        However, this means when the web process handles this keydown event, the current editor will not handle it,
        since the list of key commands is empty despite the text and unmodified text being non-empty.

        To fix this, when sending keydown or keyup events where we replace a soft space, we set the key event's text to
        an empty string instead of a space. This allows us to return early in EventHandler::keyEvent and avoid the
        codepath that tries to insert text into the current editor and (in the case of inserting a ' ') scrolls the
        document if necessary. Since we've already handled text insertion via WebPage::InsertTextAsync, there is no need
        to also dispatch the keypress to the editor.

        Additionally, this patch addresses flickering in the candidates UI due to the fact that we're asynchronously
        replacing the last soft space. During this operation, we select the range of the soft space and then insert the
        new text. This causes a momentary range selection which the web process notifies the UI process about, prompting
        us to hide the candidates list. To address this, we suppress the EditorStateChanged message fired from the web
        process to the UI process while we're selecting the original range to replace.

        This patch adds 3 new WebKit API tests.

        * Shared/NativeWebKeyboardEvent.h:
        * Shared/mac/NativeWebKeyboardEventMac.mm:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/mac/WebEventFactory.h:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::textFromEvent):
        (WebKit::unmodifiedTextFromEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _handleAcceptedCandidate:]):
        (-[WKWebView _didHandleAcceptedCandidate]):
        (-[WKWebView _didUpdateCandidateListVisibility:]):
        (-[WKWebView _forceRequestCandidates]):
        (-[WKWebView _handleControlledElementIDResponse:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didHandleAcceptedCandidate]):
        (-[WKView _didUpdateCandidateListVisibility:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::forceRequestCandidatesForTesting):
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::didHandleAcceptedCandidate):
        (WebKit::WebViewImpl::insertText):
        (WebKit::WebViewImpl::performKeyEquivalent):
        (WebKit::WebViewImpl::keyUp):
        (WebKit::WebViewImpl::keyDown):
        (WebKit::WebViewImpl::flagsChanged):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::insertTextAsync):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertTextAsync):
        (WebKit::WebPage::didChangeSelection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-09-16  Anders Carlsson  <andersca@apple.com>

        Add support for enum class parameters in the message generator
        https://bugs.webkit.org/show_bug.cgi?id=162036

        Reviewed by Brady Eidson.

        Also, convert the WebPage::SetLayerHostingMode to take an actual enum class.

        * Scripts/webkit/messages.py:
        (function_parameter_type):
        Change this to take the parameter kind as well, and use the raw type for enums.

        (arguments_type):
        (message_to_struct_declaration):
        Pass the kind to function_parameter_type.

        (forward_declaration):
        (forward_declarations_for_namespace):
        Forward declare enums with "enum class".

        (headers_for_type):
        Add WebKit::LayerHostingMode as a special case.

        (generate_message_handler):
        Pass the kind to function_parameter_type.

        * Scripts/webkit/parser.py:
        (parse_parameters_string):
        Parse 'enum' as well.

        * Shared/LayerTreeContext.h:
        Add enum traits.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewDidEnterWindow):
        (WebKit::WebPageProxy::layerHostingModeDidChange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::setLayerHostingMode):
        * WebProcess/WebPage/WebPage.h:
        Change unsigned to LayerHostingMode.

        * WebProcess/WebPage/WebPage.messages.in:
        Change unsigned to LayerHostingMode.

2016-09-16  Commit Queue  <commit-queue@webkit.org>

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

        inadvertent GCC requirement bump (Requested by mcatanzaro on
        #webkit).

        Reverted changeset:

        "Add support for enum class parameters in the message
        generator"
        https://bugs.webkit.org/show_bug.cgi?id=162036
        http://trac.webkit.org/changeset/206000

2016-09-15  Brady Eidson  <beidson@apple.com>

        WKWebView.hasOnlySecureContent always returns "YES" after going back to a CachedPage (even if it has http resources).
        <rdar://problem/27681261> and https://bugs.webkit.org/show_bug.cgi?id=162043

        Reviewed by Brent Fulgham. 

        * Scripts/webkit/messages.py:
        (headers_for_type): Add a custom header, and alphabetize existing ones.

        * Shared/WebCoreArgumentCoders.h: Add EnumTraits for HasInsecureContent.

        * UIProcess/PageLoadState.h:
        (WebKit::PageLoadState::committedHasInsecureContent):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::hasInsecureContent):
        (WebKit::WebPageProxy::didCommitLoadForFrame): If the WebProcess included an existing "HasInsecureContent" value, use it.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad): 
        (WebKit::WebFrameLoaderClient::savePlatformDataToCachedFrame): Save the "HasInsecureContent" value to the CachedFrame in
          case we restore it in the future.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2016-09-15  Anders Carlsson  <andersca@apple.com>

        Actually assign the decoded enum value to the output value
        https://bugs.webkit.org/show_bug.cgi?id=162042

        Reviewed by Brady Eidson.

        * Platform/IPC/Decoder.h:

2016-09-15  Anders Carlsson  <andersca@apple.com>

        Add support for enum class parameters in the message generator
        https://bugs.webkit.org/show_bug.cgi?id=162036

        Reviewed by Brady Eidson.

        Also, convert the WebPage::SetLayerHostingMode to take an actual enum class.

        * Scripts/webkit/messages.py:
        (function_parameter_type):
        Change this to take the parameter kind as well, and use the raw type for enums.

        (arguments_type):
        (message_to_struct_declaration):
        Pass the kind to function_parameter_type.

        (forward_declaration):
        (forward_declarations_for_namespace):
        Forward declare enums with "enum class".

        (headers_for_type):
        Add WebKit::LayerHostingMode as a special case.

        (generate_message_handler):
        Pass the kind to function_parameter_type.

        * Scripts/webkit/parser.py:
        (parse_parameters_string):
        Parse 'enum' as well.

        * Shared/LayerTreeContext.h:
        Add enum traits.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewDidEnterWindow):
        (WebKit::WebPageProxy::layerHostingModeDidChange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::setLayerHostingMode):
        * WebProcess/WebPage/WebPage.h:
        Change unsigned to LayerHostingMode.

        * WebProcess/WebPage/WebPage.messages.in:
        Change unsigned to LayerHostingMode.

2016-09-14  Beth Dakin  <bdakin@apple.com>

        dictionaryPopupInfoForRange() can change selection temporarily; updates should not 
        be sent to the UIProcess.
        https://bugs.webkit.org/show_bug.cgi?id=162008
        -and corresponding-
        rdar://problem/28312297

        Reviewed by Tim Horton.

        This patch prevents the selection changes that occur while gathering 
        dictionaryPopupInfo from being propagated to the UIProcess.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):

2016-09-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Media controls behave strangely when changing media sources
        https://bugs.webkit.org/show_bug.cgi?id=161914
        <rdar://problem/28227805>

        Reviewed by Tim Horton.

        Allows a web page to have an active video for a media control manager even if no audio or video is currently
        being produced. This is because the media element may be in a state where it is changing its source and does not
        currently have a video or audio track.

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

2016-09-14  Beth Dakin  <bdakin@apple.com>

        Add needsPlainTextQuirk and send it to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=161996
        -and corresponding-
        rdar://problem/26013388

        Rubber-stamped by Simon Fraser.

        Quick clean-up.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::needsPlainTextQuirk):

2016-09-14  Beth Dakin  <bdakin@apple.com>

        Add needsPlainTextQuirk and send it to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=161996
        -and corresponding-
        rdar://problem/26013388

        Reviewed by Anders Carlsson.

        WebPageProxy should keep track of m_needsPlainTextQuirk.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setNeedsPlainTextQuirk):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::needsPlainTextQuirk):
        (WebKit::WebPageProxy::needsHiddenContentEditableQuirk): Deleted.
        * UIProcess/WebPageProxy.messages.in:

        If m_needsPlainTextQuirk is true, set it back to false on page transition.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didStartPageTransition):

        The sites that need this quirk.
        (WebKit::needsPlainTextQuirk):
        (WebKit::WebPage::didChangeSelection):
        * WebProcess/WebPage/WebPage.h:

2016-09-14  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Minor cleanup
        https://bugs.webkit.org/show_bug.cgi?id=161976

        Reviewed by Youenn Fablet and Dean Jackson.

        * UIProcess/UserMediaPermissionRequestProxy.cpp:

2016-09-14  Beth Dakin  <bdakin@apple.com>

        Add needsHiddenContentEditableQuirk and send it to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=161984
        -and corresponding-
        rdar://problem/26013388

        Reviewed by Anders Carlsson.

        Keep track of m_needsHiddenContentEditableQuirk in WebPageProxy.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setNeedsHiddenContentEditableQuirk):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::needsHiddenContentEditableQuirk):
        (WebKit::WebPageProxy::hasHadSelectionChangesFromUserInteraction): Deleted.
        * UIProcess/WebPageProxy.messages.in:

        If m_needsHiddenContentEditableQuirk is true, set it back to false on page 
        transition.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didStartPageTransition):

        Google Docs and iCloud Pages are the sites that need this quirk.
        (WebKit::needsHiddenContentEditableQuirk):
        (WebKit::WebPage::didChangeSelection):
        * WebProcess/WebPage/WebPage.h:

2016-09-14  Megan Gardner  <megan_gardner@apple.com>

        Long tap menu on an image link no longer includes "Save Image" button
        https://bugs.webkit.org/show_bug.cgi?id=161761
        <rdar://27202717>

        Reviewed by Beth Dakin.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant defaultActionsForImageSheet:]):
        Added share to image sheet as to not regress current functionality
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        Gather information for images as well as links, and they can be both

2016-09-14  Carlos Garnacho  <carlosg@gnome.org>

        [GTK][Wayland] Implement clipboard support
        https://bugs.webkit.org/show_bug.cgi?id=146574

        Reviewed by Carlos Garcia Campos.

        Add the necessary plumbing for the GTK+ backend to use the
        PlatformPasteboard in WebCore. All selection data is transmitted
        at once through the serialization of PasteboardContentGtk/DataObjectGtk.

        * PlatformGTK.cmake: Add PasteboardContentGtk.cpp and
        WebPasteboardProxyGtk.cpp
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (IPC::encode):
        (IPC::decode): Renamed from encodeDataObject/decodeDataObject
        and made public.
        (IPC::ArgumentCoder<DragData>::encode):
        (IPC::ArgumentCoder<DragData>::decode): Update DataObjectGtk
        encode/decode callers. Encode the extra canSmartReplace field.
        * Shared/gtk/ArgumentCodersGtk.h: Expose encode/decode methods for
        DataObjectGtk.
        * Shared/gtk/PasteboardContent.cpp: Added. Wraps a DataObjectGtk
        so it can be serialized on WebProcess/UIProcess messaging.
        (WebKit::PasteboardContent::PasteboardContent):
        (WebKit::PasteboardContent::encode):
        (WebKit::PasteboardContent::decode): Methods to encode/decode a
        PasteboardContent.
        * Shared/gtk/PasteboardContent.h: Added.
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::collapseSelection): Added plumbing to allow
        collapsing the global selection from the UI process side.
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebPasteboardProxy.messages.in: Added plumbing for the
        GTK+ pasteboard proxy functions.
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/gtk/WebPasteboardProxyGtk.cpp: Added.
        (WebKit::WebPasteboardProxy::writeToClipboard):
        (WebKit::WebPasteboardProxy::readFromClipboard): Implemented functions
        hooking into the PlatformPasteboard. Per-selection (ie.
        primary/clipboard) PlatformPasteboards are kept at this level, so those
        are independently set and dealt with.
        (WebKit::WebPasteboardProxy::setPrimarySelectionOwner):
        (WebKit::WebPasteboardProxy::didDestroyFrame): Implemented functions
        to manage the frame currently being currently interacted, so we can
        signal back when the global selection has been replaced.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::writeToClipboard):
        (WebKit::WebPlatformStrategies::readFromClipboard): Added methods to
        send the WebProcess->UIProcess messages.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection): Remove GClosure to
        get notifications about changes in global selection ownership. This
        is done through a WebPage message now, as the UI process manages the
        clipboard.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::collapseSelectionInFrame): Added methods to send
        the UIProcess->WebProcess notification that the global selection has
        been replaced.

2016-09-13  Tim Horton  <timothy_horton@apple.com>

        Provide a mechanism to specify the maximum size of WKThumbnailView snapshots
        https://bugs.webkit.org/show_bug.cgi?id=161896
        <rdar://problem/28229827>

        Reviewed by Simon Fraser.

        Some clients know that their thumbnail views will only be displayed up to
        a specific size that is significantly smaller than the WKView size. Allow
        them to avoid wasting lots of memory on unnecessarily large snapshots.

        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView requestSnapshot]):
        (-[_WKThumbnailView _requestSnapshotIfNeeded]):
        (-[_WKThumbnailView setMaximumSnapshotSize:]):
        Add a maximumSnapshotSize property which can be changed dynamically.

2016-09-13  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r196321): Amazon Videos are all black in Fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=161924
        rdar://problem/28208208

        Reviewed by Dan Bernstein.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (main):
        Set AppleMagnifiedMode to true.

2016-09-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Get rid of DataObjectGtk::forClipboard and cleanup pasteboard code
        https://bugs.webkit.org/show_bug.cgi?id=161907

        Reviewed by Michael Catanzaro.

        Update to DataObjectGtk and PasteboardHelper API changes.

        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::startDrag):
        (WebKit::DragAndDropHandler::fillDragData):
        (WebKit::DragAndDropHandler::dataObjectForDropData):
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::collapseSelection):
        (WebKit::WebEditorClient::updateGlobalSelection): Remove wrong X11 guards, since that code is not X11 specific.

2016-09-12  DAN SAUNDERS  <dasau@microsoft.com>

        AX: WKWebView for macOS does not allow configuration of tabsToLinks
        https://bugs.webkit.org/show_bug.cgi?id=161394

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences encodeWithCoder:]):
        (-[WKPreferences initWithCoder:]):
        (-[WKPreferences tabFocusesLinks]):
        (-[WKPreferences setTabFocusesLinks:]):

2016-09-12  Saam Barati  <sbarati@apple.com>

        Add WebKit support for an option in Safari's debug menu similar to "Get Bytecode Profile" but for the Sampling Profiler's data
        https://bugs.webkit.org/show_bug.cgi?id=161785

        Reviewed by Tim Horton.

        This patch follows in the steps of how we dump output for the
        internal JSC bytecode profiler tool, but now also for the internal
        JSC sampling profiler tool. This can be used when doing performance
        analysis work analyzing the JS execution of a page.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetSamplingProfilerOutput):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getSamplingProfilerOutput):
        (WebKit::WebPageProxy::invalidateStringCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getSamplingProfilerOutput):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-09-12  Keith Rollin  <krollin@apple.com>

        Enhance Network logging
        https://bugs.webkit.org/show_bug.cgi?id=161771

        Reviewed by Antti Koivisto.

        Modify current logging statements to follow a consistent pattern in
        order to enhance readability and parsing.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveResponse):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didReceiveResource):

2016-09-09  Tim Horton  <timothy_horton@apple.com>

        WKThumbnailView should expose a mode where it can be reparented without resnapshotting
        https://bugs.webkit.org/show_bug.cgi?id=161828
        <rdar://problem/28229756>

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView initWithFrame:fromWKView:]):
        (-[_WKThumbnailView _viewWasUnparented]):
        Add such a mode. Bail from snapshot teardown when unparented if it is on.

2016-09-08  Dean Jackson  <dino@apple.com>

        Expose Apple Pencil data to Touch events
        https://bugs.webkit.org/show_bug.cgi?id=161783
        <rdar://problem/28218898>

        Reviewed by Beth Dakin.

        * Platform/spi/ios/UIKitSPI.h: Expose the new SPI. Since this is only used
        on public builds, guard it against everything that is <= iOS 10.0.
        * Shared/WebEvent.h: New properties.
        (WebKit::WebPlatformTouchPoint::setAltitudeAngle):
        (WebKit::WebPlatformTouchPoint::altitudeAngle):
        (WebKit::WebPlatformTouchPoint::setAzimuthAngle):
        (WebKit::WebPlatformTouchPoint::azimuthAngle):
        (WebKit::WebPlatformTouchPoint::setTouchType):
        (WebKit::WebPlatformTouchPoint::touchType):
        (WebKit::WebPlatformTouchPoint::force): Deleted.
        * Shared/WebEventConversion.cpp:
        (WebKit::webPlatformTouchTypeToPlatform):
        (WebKit::WebKit2PlatformTouchPoint::WebKit2PlatformTouchPoint): More
        parameters sent to parent constructor.
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::convertTouchType):
        (WebKit::NativeWebTouchEvent::extractWebTouchPoint):
        * Shared/ios/WebPlatformTouchPointIOS.cpp:
        (WebKit::WebPlatformTouchPoint::encode):
        (WebKit::WebPlatformTouchPoint::decode):

2016-09-09  Tim Horton  <timothy_horton@apple.com>

        Text replacement candidates don't always overwrite the entire original string
        https://bugs.webkit.org/show_bug.cgi?id=161779
        <rdar://problem/28033492>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformEditorState):
        Make use of the shared implementation of contextRangeForCandidateRequest.

2016-09-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r205689.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.cpp:
        (webkit_dom_html_o_list_element_set_start):

2016-09-08  Dan Bernstein  <mitz@apple.com>

        Re-landing the fix for

        [Mac] .tbd files for the shims end up installed when building with GENERATE_TEXT_BASED_STUBS=YES
        https://bugs.webkit.org/show_bug.cgi?id=161722

        without reintroducing https://webkit.org/b/161782

        * Configurations/Shim.xcconfig: Don’t install the shims. The Copy Shims build phase in the
          WebKit target will copy them into place without bringing their .tbd files along. Keep the
          install path set, though, because it determines the dylibs’ install names.

2016-09-08  Commit Queue  <commit-queue@webkit.org>

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

        Introduced a crash at launch and broke all our Mac perf
        testing (Requested by rniwa on #webkit).

        Reverted changeset:

        "[Mac] .tbd files for the shims end up installed when building
        with GENERATE_TEXT_BASED_STUBS=YES"
        https://bugs.webkit.org/show_bug.cgi?id=161722
        http://trac.webkit.org/changeset/205576

2016-09-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Move the BitmapImage platform dependent code to a new file named NativeImage[CG|Cairo].cpp
        https://bugs.webkit.org/show_bug.cgi?id=158684

        Reviewed by Simon Fraser.

        * UIProcess/API/C/cg/WKIconDatabaseCG.cpp:
        (WKIconDatabaseTryGetCGImageForURL):
        (WKIconDatabaseTryCopyCGImageArrayForURL):
        It was the only place in the code which uses BitmapImage::getCGImageArray().
        Call BitmapImage::framesNativeImages() instead and form the returned
        Vector<NativeImagePtr> build the CFArrayRef.

        * UIProcess/WebIconDatabase.h:
        Include "NativeImage.h" instead of "NativeImagePtr.h".
        
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _presentationSnapshotForPreviewItemController:]):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::isAlmostSolidColor):
        Call BitmapImage::getCGImageRef() instead of calling BitmapImage::nativeImage().

2016-09-08  Zan Dobersek  <zdobersek@igalia.com>

        Move webkit2gtk.pc.in, webkit2gtk-web-extension.pc.in files under Source/WebKit2/gtk/
        https://bugs.webkit.org/show_bug.cgi?id=161703

        Reviewed by Carlos Garcia Campos.

        Move the pkg-config input files that are specific to the GTK+ port
        under the Source/WebKit2/gtk/ directory. Build rules are updated
        accordingly.

        * PlatformGTK.cmake:
        * gtk/webkit2gtk-web-extension.pc.in: Renamed from Source/WebKit2/webkit2gtk-web-extension.pc.in.
        * gtk/webkit2gtk.pc.in: Renamed from Source/WebKit2/webkit2gtk.pc.in.

2016-09-07  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Address some clang static analyzer warnings in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=161597

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (-[WKLayerHostView makeBackingLayer]):
        * UIProcess/mac/WKSharingServicePickerDelegate.mm:
        (-[WKSharingServicePickerDelegate sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange rangeByExpandingToWordBoundaryByCharacters:inDirection:]):
        Address leaks caught by the static analyzer.

2016-09-07  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Remove stale WebSoupRequestManager headers
        https://bugs.webkit.org/show_bug.cgi?id=161691

        Reviewed by Sergio Villar Senin.

        WebSoupRequestManager, WebSoupRequestManagerProxy and WebSoupRequestManagerClient
        classes were used to implement custom URI scheme support for Soup. This API and
        the implementations of these classes were removed in r174584, but curiously the
        headers went unnoticed. This patch removes them, as well as the
        WebSoupRequestManagerProxy forwarding declaration in WKAPICastSoup.h.

        * UIProcess/API/C/soup/WKAPICastSoup.h:
        * UIProcess/soup/WebSoupRequestManagerClient.h: Removed.
        * UIProcess/soup/WebSoupRequestManagerProxy.h: Removed.
        (WebKit::WebSoupRequestManagerProxy::registeredURISchemes): Deleted.
        * WebProcess/soup/WebSoupRequestManager.h: Removed.

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

        Enable the <meter> element on iOS
        https://bugs.webkit.org/show_bug.cgi?id=161714
        rdar://problem/8978410

        Reviewed by Tim Horton.

        Define ENABLE_METER_ELEMENT unconditionally now.

        * Configurations/FeatureDefines.xcconfig:

2016-09-07  Dan Bernstein  <mitz@apple.com>

        [Mac] .tbd files for the shims end up installed when building with GENERATE_TEXT_BASED_STUBS=YES
        https://bugs.webkit.org/show_bug.cgi?id=161722

        Reviewed by Anders Carlsson.

        * Configurations/Shim.xcconfig: Don’t install the shims. The Copy Shims build phase in the
          WebKit target will copy them into place without bringing their .tbd files along.

2016-09-07  Mark Lam  <mark.lam@apple.com>

        Add CatchScope and force all exception checks to be via ThrowScope or CatchScope.
        https://bugs.webkit.org/show_bug.cgi?id=161498

        Reviewed by Geoffrey Garen.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):
        (WebKit::NPJSObject::hasProperty):
        (WebKit::NPJSObject::getProperty):
        (WebKit::NPJSObject::setProperty):
        (WebKit::NPJSObject::removeProperty):
        (WebKit::NPJSObject::construct):
        (WebKit::NPJSObject::invoke):

2016-09-07  Konstantin Tokarev  <annulen@yandex.ru>

        [GTK] Make inspection of Inspector conditional on DEVELOPER_MODE
        https://bugs.webkit.org/show_bug.cgi?id=161702

        Reviewed by Michael Catanzaro.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2016-09-07  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Update availability attributes per the macOS Sierra and iOS 10 GM seeds
        https://bugs.webkit.org/show_bug.cgi?id=161704

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/_WKHitTestResult.h:
        * UIProcess/API/Cocoa/WKErrorPrivate.h:
        * UIProcess/API/Cocoa/WKFrameInfoPrivate.h:
        * UIProcess/API/Cocoa/WKMenuItemIdentifiersPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKOpenPanelParameters.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/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/API/Cocoa/WKUserScriptPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h:
        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKExperimentalFeature.h:
        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/API/Cocoa/_WKInputDelegate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentWorld.h:
        * UIProcess/API/Cocoa/_WKUserInitiatedAction.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataSize.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.h:

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

        [EFL] Switch to ENABLE_NETWORK_CACHE
        https://bugs.webkit.org/show_bug.cgi?id=152676

        Reviewed by Alex Christensen.

        Nowadays GTK+ always uses the network cache, and never the soup cache. Remove support for
        using the soup cache, and switch the EFL port to use network cache.

        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::add): Check return value of link to placate
        -Werror=unused-result on EFL builder
        * NetworkProcess/efl/NetworkProcessMainEfl.cpp:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::getCacheDiskFreeSize):
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        (WebKit::NetworkProcess::platformSetCacheModel):
        (WebKit::NetworkProcess::clearDiskCache):
        * PlatformEfl.cmake: Add files to build.
        * UIProcess/API/efl/APIWebsiteDataStoreEfl.cpp:
        (API::WebsiteDataStore::defaultNetworkCacheDirectory): Use a saner location.
        * UIProcess/API/gtk/APIWebsiteDataStoreGtk.cpp:
        (API::WebsiteDataStore::defaultNetworkCacheDirectory):
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        * config.h:

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

        [Streams API] Separate compile flag for ReadableStream and WritableStream
        https://bugs.webkit.org/show_bug.cgi?id=161044

        Reviewed by Alex Christensen.

        Moving from STREAMS_API to READABLE_STREAM_API and WRITABLE_STREAM_API compilation flags.

        * Configurations/FeatureDefines.xcconfig:

2016-09-07  Emanuele Aina  <emanuele.aina@collabora.com>

        [GTK] Clarify frame callbacks behaviour in Wayland compositor
        https://bugs.webkit.org/show_bug.cgi?id=161683

        Reviewed by Carlos Garcia Campos.

        The way we fire frame callbacks in the nested Wayland compositor can
        be puzzling to developers expecting Wayland semantics, but since we
        have our own mechanism to handle synchronization we don't care much
        about them. Add a comment to avoid surprised Wayland developers.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::Surface::commit):

2016-09-07  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r205369, just for fun.

        * PlatformMac.cmake: Added new files.

2016-09-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unused GObject DOM unstable API
        https://bugs.webkit.org/show_bug.cgi?id=161440

        Reviewed by Philippe Normand.

        Remove unstable GObject DOM API now that we no longer auto-generate the bindings.

        * PlatformGTK.cmake:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAnimatable.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAnimatable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAnimationEffect.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAnimationEffect.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAnimationEffectPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAnimationTimeline.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAnimationTimeline.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAnimationTimelinePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttr.cpp:
        (webkit_dom_attr_get_property):
        (webkit_dom_attr_class_init):
        (webkit_dom_attr_get_prefix): Deleted.
        (webkit_dom_attr_get_local_name): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAttrUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAudioTrack.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAudioTrack.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAudioTrackList.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAudioTrackList.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAudioTrackListPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMAudioTrackPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBarProp.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBarProp.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBarPropPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBatteryManager.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBatteryManager.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBatteryManagerPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBlob.cpp:
        (webkit_dom_blob_get_property):
        (webkit_dom_blob_class_init):
        (webkit_dom_blob_get_size):
        (webkit_dom_blob_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMBlobUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRule.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCSSRuleUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterData.cpp:
        (webkit_dom_character_data_get_property):
        (webkit_dom_character_data_class_init):
        (webkit_dom_character_data_get_length):
        (webkit_dom_character_data_set_property): Deleted.
        (webkit_dom_character_data_substring_data): Deleted.
        (webkit_dom_character_data_append_data): Deleted.
        (webkit_dom_character_data_insert_data): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCharacterDataUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMApplicationCache.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMApplicationCache.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMApplicationCachePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMCSSNamespace.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMCSSNamespace.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMCSSNamespacePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMMimeType.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMMimeType.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMMimeTypeArray.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMMimeTypeArray.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMMimeTypeArrayPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMMimeTypePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMNamedFlowCollection.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMNamedFlowCollection.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMNamedFlowCollectionPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMPlugin.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMPlugin.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMPluginArray.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMPluginArray.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMPluginArrayPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMPluginPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMStringList.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMStringList.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMStringListPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMStringMap.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMStringMap.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMStringMapPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindowSpeechSynthesis.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindowSpeechSynthesis.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDataCue.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDataCue.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDataCuePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDatabase.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDatabase.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDatabasePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentAnimation.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentAnimation.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentTimeline.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentTimeline.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentTimelinePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentType.cpp:
        (webkit_dom_document_type_get_name): Deleted.
        (webkit_dom_document_type_get_entities): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentTypeUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEvent.cpp:
        (webkit_dom_event_get_property):
        (webkit_dom_event_class_init):
        (webkit_dom_event_init): Deleted.
        (webkit_dom_event_stop_propagation): Deleted.
        (webkit_dom_event_get_bubbles): Deleted.
        (webkit_dom_event_get_cancelable): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMEventUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFile.cpp:
        (webkit_dom_file_get_property):
        (webkit_dom_file_class_init):
        (webkit_dom_file_get_name):
        (webkit_dom_file_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMFileUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMGamepad.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMGamepad.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMGamepadList.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMGamepadList.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMGeolocation.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMGeolocation.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMGeolocationPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.cpp:
        (webkit_dom_html_anchor_element_set_property):
        (webkit_dom_html_anchor_element_get_property):
        (webkit_dom_html_anchor_element_class_init):
        (webkit_dom_html_anchor_element_init): Deleted.
        (webkit_dom_html_anchor_element_get_charset): Deleted.
        (webkit_dom_html_anchor_element_set_charset): Deleted.
        (webkit_dom_html_anchor_element_get_coords): Deleted.
        (webkit_dom_html_anchor_element_set_coords): Deleted.
        (webkit_dom_html_anchor_element_get_target): Deleted.
        (webkit_dom_html_anchor_element_set_target): Deleted.
        (webkit_dom_html_anchor_element_get_type_attr): Deleted.
        (webkit_dom_html_anchor_element_set_type_attr): Deleted.
        (webkit_dom_html_anchor_element_set_href): Deleted.
        (webkit_dom_html_anchor_element_get_protocol): Deleted.
        (webkit_dom_html_anchor_element_set_protocol): Deleted.
        (webkit_dom_html_anchor_element_set_hash): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAnchorElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.cpp:
        (webkit_dom_html_area_element_set_property):
        (webkit_dom_html_area_element_get_property):
        (webkit_dom_html_area_element_class_init):
        (webkit_dom_html_area_element_init): Deleted.
        (webkit_dom_html_area_element_get_alt): Deleted.
        (webkit_dom_html_area_element_set_alt): Deleted.
        (webkit_dom_html_area_element_get_coords): Deleted.
        (webkit_dom_html_area_element_set_coords): Deleted.
        (webkit_dom_html_area_element_get_hostname): Deleted.
        (webkit_dom_html_area_element_set_hostname): Deleted.
        (webkit_dom_html_area_element_get_port): Deleted.
        (webkit_dom_html_area_element_set_port): Deleted.
        (webkit_dom_html_area_element_get_pathname): Deleted.
        (webkit_dom_html_area_element_get_hash): Deleted.
        (webkit_dom_html_area_element_set_hash): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAreaElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAudioElement.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAudioElement.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLAudioElementPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElement.cpp:
        (webkit_dom_html_button_element_set_property):
        (webkit_dom_html_button_element_get_property):
        (webkit_dom_html_button_element_class_init):
        (webkit_dom_html_button_element_get_will_validate):
        (webkit_dom_html_button_element_get_autofocus): Deleted.
        (webkit_dom_html_button_element_set_autofocus): Deleted.
        (webkit_dom_html_button_element_get_disabled): Deleted.
        (webkit_dom_html_button_element_set_disabled): Deleted.
        (webkit_dom_html_button_element_get_form): Deleted.
        (webkit_dom_html_button_element_get_button_type): Deleted.
        (webkit_dom_html_button_element_set_button_type): Deleted.
        (webkit_dom_html_button_element_get_name): Deleted.
        (webkit_dom_html_button_element_set_value): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLButtonElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDetailsElement.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDetailsElement.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLDetailsElementPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElement.cpp:
        (webkit_dom_html_field_set_element_get_property):
        (webkit_dom_html_field_set_element_class_init):
        (webkit_dom_html_field_set_element_get_form):
        (webkit_dom_html_field_set_element_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFieldSetElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElement.cpp:
        (webkit_dom_html_form_element_set_property):
        (webkit_dom_html_form_element_get_property):
        (webkit_dom_html_form_element_class_init):
        (webkit_dom_html_form_element_get_length):
        (webkit_dom_html_form_element_submit): Deleted.
        (webkit_dom_html_form_element_reset): Deleted.
        (webkit_dom_html_form_element_get_action): Deleted.
        (webkit_dom_html_form_element_set_action): Deleted.
        (webkit_dom_html_form_element_get_enctype): Deleted.
        (webkit_dom_html_form_element_set_encoding): Deleted.
        (webkit_dom_html_form_element_get_method): Deleted.
        (webkit_dom_html_form_element_set_method): Deleted.
        (webkit_dom_html_form_element_set_target): Deleted.
        (webkit_dom_html_form_element_get_elements): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLFormElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElement.cpp:
        (webkit_dom_html_html_element_set_property):
        (webkit_dom_html_html_element_get_property):
        (webkit_dom_html_html_element_class_init):
        (webkit_dom_html_html_element_set_version):
        (webkit_dom_html_html_element_get_version): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLHtmlElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElement.cpp:
        (webkit_dom_html_iframe_element_set_property):
        (webkit_dom_html_iframe_element_get_property):
        (webkit_dom_html_iframe_element_class_init):
        (webkit_dom_html_iframe_element_init): Deleted.
        (webkit_dom_html_iframe_element_set_src): Deleted.
        (webkit_dom_html_iframe_element_get_width): Deleted.
        (webkit_dom_html_iframe_element_set_width): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLIFrameElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElement.cpp:
        (webkit_dom_html_image_element_set_property):
        (webkit_dom_html_image_element_get_property):
        (webkit_dom_html_image_element_class_init):
        (webkit_dom_html_image_element_set_long_desc): Deleted.
        (webkit_dom_html_image_element_get_src): Deleted.
        (webkit_dom_html_image_element_set_src): Deleted.
        (webkit_dom_html_image_element_get_natural_height): Deleted.
        (webkit_dom_html_image_element_get_natural_width): Deleted.
        (webkit_dom_html_image_element_get_x): Deleted.
        (webkit_dom_html_image_element_get_y): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLImageElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        (webkit_dom_html_input_element_set_property):
        (webkit_dom_html_input_element_get_property):
        (webkit_dom_html_input_element_class_init):
        (webkit_dom_html_input_element_set_capture_type):
        (webkit_dom_html_input_element_init): Deleted.
        (webkit_dom_html_input_element_select): Deleted.
        (webkit_dom_html_input_element_get_accept): Deleted.
        (webkit_dom_html_input_element_set_accept): Deleted.
        (webkit_dom_html_input_element_get_alt): Deleted.
        (webkit_dom_html_input_element_set_alt): Deleted.
        (webkit_dom_html_input_element_get_default_checked): Deleted.
        (webkit_dom_html_input_element_set_default_checked): Deleted.
        (webkit_dom_html_input_element_get_checked): Deleted.
        (webkit_dom_html_input_element_set_checked): Deleted.
        (webkit_dom_html_input_element_get_disabled): Deleted.
        (webkit_dom_html_input_element_get_files): Deleted.
        (webkit_dom_html_input_element_set_files): Deleted.
        (webkit_dom_html_input_element_set_height): Deleted.
        (webkit_dom_html_input_element_get_indeterminate): Deleted.
        (webkit_dom_html_input_element_get_max_length): Deleted.
        (webkit_dom_html_input_element_set_max_length): Deleted.
        (webkit_dom_html_input_element_get_name): Deleted.
        (webkit_dom_html_input_element_set_name): Deleted.
        (webkit_dom_html_input_element_get_size): Deleted.
        (webkit_dom_html_input_element_set_size): Deleted.
        (webkit_dom_html_input_element_get_src): Deleted.
        (webkit_dom_html_input_element_set_input_type): Deleted.
        (webkit_dom_html_input_element_get_default_value): Deleted.
        (webkit_dom_html_input_element_set_default_value): Deleted.
        (webkit_dom_html_input_element_set_value): Deleted.
        (webkit_dom_html_input_element_get_width): Deleted.
        (webkit_dom_html_input_element_set_width): Deleted.
        (webkit_dom_html_input_element_get_will_validate): Deleted.
        (webkit_dom_html_input_element_get_align): Deleted.
        (webkit_dom_html_input_element_set_align): Deleted.
        (webkit_dom_html_input_element_get_use_map): Deleted.
        (webkit_dom_html_input_element_set_use_map): Deleted.
        (webkit_dom_html_input_element_get_capture_type): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLKeygenElement.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLKeygenElement.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLKeygenElementPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElement.cpp:
        (webkit_dom_html_label_element_get_property):
        (webkit_dom_html_label_element_class_init):
        (webkit_dom_html_label_element_init): Deleted.
        (webkit_dom_html_label_element_get_form): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLabelElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.cpp:
        (webkit_dom_html_link_element_set_property):
        (webkit_dom_html_link_element_get_property):
        (webkit_dom_html_link_element_class_init):
        (webkit_dom_html_link_element_get_disabled): Deleted.
        (webkit_dom_html_link_element_set_disabled): Deleted.
        (webkit_dom_html_link_element_get_charset): Deleted.
        (webkit_dom_html_link_element_set_charset): Deleted.
        (webkit_dom_html_link_element_get_href): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElement.cpp:
        (webkit_dom_html_marquee_element_class_init):
        (webkit_dom_html_marquee_element_stop):
        (webkit_dom_html_marquee_element_init): Deleted.
        (webkit_dom_html_marquee_element_start): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMarqueeElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMediaElement.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMediaElement.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLMediaElementPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElement.cpp:
        (webkit_dom_html_o_list_element_set_property):
        (webkit_dom_html_o_list_element_get_property):
        (webkit_dom_html_o_list_element_class_init):
        (webkit_dom_html_o_list_element_init): Deleted.
        (webkit_dom_html_o_list_element_get_compact): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOListElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElement.cpp:
        (webkit_dom_html_object_element_get_property):
        (webkit_dom_html_object_element_class_init):
        (webkit_dom_html_object_element_set_property): Deleted.
        (webkit_dom_html_object_element_get_form): Deleted.
        (webkit_dom_html_object_element_get_code): Deleted.
        (webkit_dom_html_object_element_set_code): Deleted.
        (webkit_dom_html_object_element_get_align): Deleted.
        (webkit_dom_html_object_element_set_align): Deleted.
        (webkit_dom_html_object_element_get_archive): Deleted.
        (webkit_dom_html_object_element_set_archive): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLObjectElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionsCollection.cpp:
        (webkit_dom_html_options_collection_get_selected_index): Deleted.
        (webkit_dom_html_options_collection_set_selected_index): Deleted.
        (webkit_dom_html_options_collection_get_length): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLOptionsCollectionUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLPrivate.cpp:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.cpp:
        (webkit_dom_html_script_element_set_property):
        (webkit_dom_html_script_element_get_property):
        (webkit_dom_html_script_element_class_init):
        (webkit_dom_html_script_element_set_type_attr):
        (webkit_dom_html_script_element_init): Deleted.
        (webkit_dom_html_script_element_get_html_for): Deleted.
        (webkit_dom_html_script_element_set_html_for): Deleted.
        (webkit_dom_html_script_element_get_event): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLScriptElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElement.cpp:
        (webkit_dom_html_select_element_set_property):
        (webkit_dom_html_select_element_get_property):
        (webkit_dom_html_select_element_class_init):
        (webkit_dom_html_select_element_get_will_validate):
        (webkit_dom_html_select_element_named_item): Deleted.
        (webkit_dom_html_select_element_get_autofocus): Deleted.
        (webkit_dom_html_select_element_set_autofocus): Deleted.
        (webkit_dom_html_select_element_get_disabled): Deleted.
        (webkit_dom_html_select_element_set_disabled): Deleted.
        (webkit_dom_html_select_element_get_form): Deleted.
        (webkit_dom_html_select_element_set_size): Deleted.
        (webkit_dom_html_select_element_get_select_type): Deleted.
        (webkit_dom_html_select_element_get_options): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLSelectElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElement.cpp:
        (webkit_dom_html_style_element_set_property):
        (webkit_dom_html_style_element_get_property):
        (webkit_dom_html_style_element_class_init):
        (webkit_dom_html_style_element_get_sheet):
        (webkit_dom_html_style_element_get_disabled): Deleted.
        (webkit_dom_html_style_element_set_disabled): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLStyleElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElement.cpp:
        (webkit_dom_html_table_element_set_property):
        (webkit_dom_html_table_element_get_property):
        (webkit_dom_html_table_element_class_init):
        (webkit_dom_html_table_element_insert_row): Deleted.
        (webkit_dom_html_table_element_set_summary): Deleted.
        (webkit_dom_html_table_element_get_width): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.cpp:
        (webkit_dom_html_text_area_element_set_property):
        (webkit_dom_html_text_area_element_get_property):
        (webkit_dom_html_text_area_element_class_init):
        (webkit_dom_html_text_area_element_init): Deleted.
        (webkit_dom_html_text_area_element_set_selection_range): Deleted.
        (webkit_dom_html_text_area_element_set_autofocus): Deleted.
        (webkit_dom_html_text_area_element_get_disabled): Deleted.
        (webkit_dom_html_text_area_element_get_form): Deleted.
        (webkit_dom_html_text_area_element_get_name): Deleted.
        (webkit_dom_html_text_area_element_get_rows): Deleted.
        (webkit_dom_html_text_area_element_set_rows): Deleted.
        (webkit_dom_html_text_area_element_get_cols): Deleted.
        (webkit_dom_html_text_area_element_set_cols): Deleted.
        (webkit_dom_html_text_area_element_get_area_type): Deleted.
        (webkit_dom_html_text_area_element_get_default_value): Deleted.
        (webkit_dom_html_text_area_element_get_value): Deleted.
        (webkit_dom_html_text_area_element_set_value): Deleted.
        (webkit_dom_html_text_area_element_get_will_validate): Deleted.
        (webkit_dom_html_text_area_element_get_selection_start): Deleted.
        (webkit_dom_html_text_area_element_set_selection_start): Deleted.
        (webkit_dom_html_text_area_element_get_selection_end): Deleted.
        (webkit_dom_html_text_area_element_set_selection_end): Deleted.
        (webkit_dom_html_text_area_element_is_edited): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElementUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLVideoElement.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLVideoElement.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLVideoElementPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHistory.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHistory.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHistoryPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyframeEffect.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyframeEffect.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMKeyframeEffectPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMLocation.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMLocation.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMLocationPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaController.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaController.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaControllerPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaDevices.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaDevices.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaDevicesPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaError.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaError.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaErrorPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaQueryList.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaQueryList.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaQueryListPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaTrackSupportedConstraints.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaTrackSupportedConstraints.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMediaTrackSupportedConstraintsPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMessagePort.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMessagePort.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMessagePortPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEvent.cpp:
        (webkit_dom_mouse_event_get_property):
        (webkit_dom_mouse_event_class_init):
        (webkit_dom_mouse_event_get_y): Deleted.
        (webkit_dom_mouse_event_get_from_element): Deleted.
        (webkit_dom_mouse_event_get_to_element): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMMouseEventUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNavigator.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNavigator.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNavigatorMediaDevices.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNavigatorMediaDevices.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNavigatorPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNode.cpp:
        (webkit_dom_node_get_property):
        (webkit_dom_node_class_init):
        (webkit_dom_node_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNodeUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformance.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformance.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformanceEntry.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformanceEntry.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformanceEntryPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformanceNavigation.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformanceNavigation.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformanceNavigationPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformancePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformanceTiming.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformanceTiming.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformanceTimingPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivate.cpp:
        (WebKit::wrap): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMScreen.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMScreen.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMScreenPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesis.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesis.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisEvent.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisEvent.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisEventPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisUtterance.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisUtterance.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisUtterancePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisVoice.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisVoice.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMSpeechSynthesisVoicePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStorage.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStorage.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStorageInfo.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStorageInfo.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStoragePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStorageQuota.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStorageQuota.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleMedia.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleMedia.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMStyleMediaPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrack.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrack.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackCue.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackCue.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackCueList.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackCueList.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackCueListPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackCuePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackList.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackList.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackListPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTextTrackPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTimeRanges.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTimeRanges.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTimeRangesPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTouch.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTouch.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTouchPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTrackEvent.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTrackEvent.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMTrackEventPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUIEvent.cpp:
        (webkit_dom_ui_event_get_property):
        (webkit_dom_ui_event_class_init):
        (webkit_dom_ui_event_get_page_y):
        (webkit_dom_ui_event_init): Deleted.
        (webkit_dom_ui_event_init_ui_event): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUIEventUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUserMessageHandler.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUserMessageHandler.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUserMessageHandlerPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUserMessageHandlersNamespace.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUserMessageHandlersNamespace.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUserMessageHandlersNamespacePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVTTCue.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVTTCue.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVTTCuePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMValidityState.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMValidityState.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMValidityStatePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVideoPlaybackQuality.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVideoPlaybackQuality.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVideoPlaybackQualityPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVideoTrack.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVideoTrack.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVideoTrackList.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVideoTrackList.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVideoTrackListPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMVideoTrackPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebAnimation.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebAnimation.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebAnimationPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebKitNamedFlow.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebKitNamedFlow.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebKitNamedFlowPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebKitNamespace.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebKitNamespace.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebKitNamespacePrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebKitPoint.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebKitPoint.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWebKitPointPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEvent.cpp:
        (webkit_dom_wheel_event_get_property):
        (webkit_dom_wheel_event_class_init):
        (webkit_dom_wheel_event_get_wheel_delta):
        (webkit_dom_wheel_event_init): Deleted.
        (webkit_dom_wheel_event_init_wheel_event): Deleted.
        (webkit_dom_wheel_event_get_wheel_delta_x): Deleted.
        (webkit_dom_wheel_event_get_wheel_delta_y): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMWheelEventUnstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/docs/webkitdomgtk-4.0-sections.txt:
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdomautocleanups-unstable.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdomdefines-unstable.h: Removed.

2016-09-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move some GObject DOM unstable API to stable
        https://bugs.webkit.org/show_bug.cgi?id=161681

        Reviewed by Žan Doberšek.

        Move unstable API currently used by applications to the stable API in preparation for removing all unused
        unstable API.

        * PlatformGTK.cmake:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCustom.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCustom.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMCustomUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMSelection.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMTokenList.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.cpp:
        (webkit_dom_dom_window_get_property):
        (webkit_dom_dom_window_class_init):
        (webkit_dom_dom_window_webkit_message_handlers_post_message):
        (webkit_dom_dom_window_set_property): Deleted.
        (webkit_dom_dom_window_get_computed_style): Deleted.
        (webkit_dom_dom_window_capture_events): Deleted.
        (webkit_dom_dom_window_get_frame_element): Deleted.
        (webkit_dom_dom_window_get_offscreen_buffering): Deleted.
        (webkit_dom_dom_window_get_outer_height): Deleted.
        (webkit_dom_dom_window_get_outer_width): Deleted.
        (webkit_dom_dom_window_get_inner_height): Deleted.
        (webkit_dom_dom_window_get_inner_width): Deleted.
        (webkit_dom_dom_window_get_screen_x): Deleted.
        (webkit_dom_dom_window_set_status): Deleted.
        (webkit_dom_dom_window_get_default_status): Deleted.
        (webkit_dom_dom_window_get_window): Deleted.
        (webkit_dom_dom_window_get_frames): Deleted.
        (webkit_dom_dom_window_get_parent): Deleted.
        (webkit_dom_dom_window_get_top): Deleted.
        (webkit_dom_dom_window_get_document): Deleted.
        (webkit_dom_dom_window_get_device_pixel_ratio): Deleted.
        (webkit_dom_dom_window_get_orientation): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindow.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMWindowUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.cpp:
        (webkit_dom_document_get_property):
        (webkit_dom_document_webkit_cancel_fullscreen):
        (webkit_dom_document_get_webkit_is_fullscreen):
        (webkit_dom_document_get_webkit_fullscreen_keyboard_input_allowed):
        (webkit_dom_document_get_webkit_current_fullscreen_element):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragment.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentFragmentUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp:
        (webkit_dom_element_webkit_request_fullscreen): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElementUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLElementUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        (webkit_dom_html_input_element_is_edited):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.cpp:
        (webkit_dom_html_link_element_set_sizes):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLLinkElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.cpp:
        (webkit_dom_html_text_area_element_is_edited):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRange.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMRangeUnstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUserMessageHandlersNamespace.cpp:
        (webkit_dom_user_message_handlers_namespace_get_handler):
        (webkit_dom_user_message_handlers_namespace_init): Deleted.
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMUserMessageHandlersNamespace.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/docs/webkitdomgtk-4.0-sections.txt:
        * WebProcess/InjectedBundle/API/gtk/DOM/docs/webkitdomgtk-docs.sgml:
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdomdefines-unstable.h:
        * WebProcess/InjectedBundle/API/gtk/DOM/webkitdomdefines.h:

2016-09-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Threaded Compositor] Several flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=161242

        Reviewed by Michael Catanzaro.

        Reset the viewport attributes on SimpleViewportController when viewport attributes change and fixed layout is
        not used. We were only updating the viewport attributes when fixed layout was used, but not resetting them again
        when it's no longer used. That caused that reference tests run after fast/fixed-layout/fixed-layout.html or
        compositing/fixed-with-fixed-layout.html in the same worker thread were incorrectly rendered.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::dispatchViewportPropertiesDidChange): Remove ifdefs and call
        WebPage::viewportPropertiesDidChange() unconditionally.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSize): Pass current page viewport arguments to sendViewportAttributesChanged().
        (WebKit::WebPage::sendViewportAttributesChanged): It now receives the viewport arguments.
        (WebKit::WebPage::viewportPropertiesDidChange): Move the iOS implementation from WebPageIOS.mm and for
        coordinated graphics call sendViewportAttributesChanged() when fixed layout is used or reset the viewport
        attributes when not used in case of threaded compositor.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::viewportPropertiesDidChange): Moved out of iOS ifdef.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportPropertiesDidChange): Deleted.

2016-09-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ build after r205524.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLInputElement.cpp:
        (webkit_dom_html_input_element_get_max_length):
        (webkit_dom_html_input_element_set_max_length):
        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTextAreaElement.cpp:
        (webkit_dom_html_text_area_element_get_max_length):
        (webkit_dom_html_text_area_element_set_max_length):

2016-09-06  Daniel Bates  <dabates@apple.com>

        [iOS] WebKit2 fails to build with iOS 10 beta SDK - "'UIWKTextInteractionAssistant' may not respond to 'selectAll:'"
        https://bugs.webkit.org/show_bug.cgi?id=161663

        Reviewed by Darin Adler.

        The UIResponderStandardEditActions extensions, including the selectAll: message, are now
        part of a formal protocol by the same name as of the iOS 10 beta SDK.

        * Platform/spi/ios/UIKitSPI.h:

2016-09-06  Ryosuke Niwa  <rniwa@webkit.org>

        Enable custom elements API in Safari Technology Preview
        https://bugs.webkit.org/show_bug.cgi?id=161518

        Reviewed by Chris Dumez.

        Re-enable custom elements API in Safari Technology Preview after r203296
        now that our implementation has caught up to the latest specification changes.

        * Shared/WebPreferencesDefinitions.h:

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

        Use TemporaryChange<> to maintain m_userIsInteracting
        https://bugs.webkit.org/show_bug.cgi?id=161497

        Reviewed by Tim Horton.

        Replace some error-prone manual set/clear of m_userIsInteracting with
        TemporaryChange<>.

        No behavior change.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::dispatchTouchEvent):

2016-09-06  Tim Horton  <timothy_horton@apple.com>

        Remove SwipeTransitionStyle; only Overlap has ever been used
        https://bugs.webkit.org/show_bug.cgi?id=161617

        Reviewed by Alex Christensen.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::handleSwipeGesture):
        Remove SwipeTransitionStyle::Push, and SwipeTransitionStyle itself entirely,
        because we've never used it and it is only supported by the Mac
        implementation of ViewGestureController.

2016-09-06  Daniel Bates  <dabates@apple.com>

        Remove EXTERN_C from WTF
        https://bugs.webkit.org/show_bug.cgi?id=161090

        Reviewed by Brent Fulgham.

        Guard external C declarations in WTF_EXTERN_C_BEGIN, WTF_EXTERN_C_END.

        * Platform/spi/ios/ManagedConfigurationSPI.h:

2016-09-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r205407.

        Not the correct way to implement this functionality

        Reverted changeset:

        "Consult with the FrameLoaderClient about whether or not
        content extensions should be enabled when loading this URL."
        https://bugs.webkit.org/show_bug.cgi?id=161441
        http://trac.webkit.org/changeset/205407

2016-09-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Wayland] evince-browser-plugin prevents viewing PDFs
        https://bugs.webkit.org/show_bug.cgi?id=158697

        Reviewed by Michael Catanzaro.

        Use a different cache file for plugins depending on the current platform display. Plugins can claim to work on
        X11 but not on Wayland, for example, if they need XEmebed to work. That's the case of the evince browser plugin.

        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::cacheFilenameForCurrentDisplay):
        (WebKit::PluginInfoCache::PluginInfoCache):

2016-09-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Update timer should have lower priority than tasks scheduled in compositing thread
        https://bugs.webkit.org/show_bug.cgi?id=161625

        Reviewed by Sergio Villar Senin.

        This way, if a resize is scheduled, for example, and there are pending updates, the resize will happen first,
        and then the updates will happen at the right size.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::CompositingRunLoop): Use G_PRIORITY_HIGH_IDLE as update timer priority. The actual
        priority doesn't really matter as long as it's lower than G_PRIORITY_DEFAULT, because there are only two
        possible sources in the compositing run loop, one for the tasks scheduled, and another one for the update timer.

2016-09-06  Emanuele Aina  <emanuele.aina@collabora.com>

        [GTK] glImageTargetTexture2D() is a GL function, rename accordingly
        https://bugs.webkit.org/show_bug.cgi?id=161622

        Reviewed by Carlos Garcia Campos.

        glImageTargetTexture2D() is a GL function, not EGL, using the 'egl'
        prefix is misleading.

        * UIProcess/gtk/WaylandCompositor.cpp:
        (WebKit::WaylandCompositor::Surface::prepareTextureForPainting):
        (WebKit::WaylandCompositor::initializeEGL):

2016-09-06  Emanuele Aina  <emanuele.aina@collabora.com>

        [GTK][EFL] Make *_PROCESS_CMD_PREFIX conditional on DEVELOPER_MODE
        https://bugs.webkit.org/show_bug.cgi?id=161621

        Reviewed by Carlos Garcia Campos.

        Instead of enabling support for the *_PROCESS_CMD_PREFIX set of
        environment valiables (eg. WEB_PROCESS_CMD_PREFIX) on debug builds
        only, enable it when DEVELOPER_MODE is enabled as it already guards
        similar features (eg. WEBKIT_EXEC_PATH).

        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2016-09-05  Zan Dobersek  <zdobersek@igalia.com>

        Fix ENABLE(GAMEPAD) build errors on non-Cocoa platforms
        https://bugs.webkit.org/show_bug.cgi?id=161596

        Reviewed by Darin Adler.

        This patch fixes build errors popping up when enabling Gamepad
        feature on non-Cocoa platforms.

        * CMakeLists.txt: Add the Source/WebCore/platform/gamepad/ directory to
        WebKit2_INCLUDE_DIRECTORIES. Add GamepadData.cpp, UIGamepad.cpp files to the build.
        * UIProcess/Gamepad/UIGamepadProvider.cpp: Don't include Cocoa-specific
        HIDGamepadProvider.h file. Update methods for the UIGamepadProvider class.
        (WebKit::UIGamepadProvider::platformWebPageProxyForGamepadInput):
        (WebKit::UIGamepadProvider::platformStartMonitoringGamepads): Deleted.
        (WebKit::UIGamepadProvider::platformStopMonitoringGamepads): Deleted.
        (WebKit::UIGamepadProvider::platformGamepads): Deleted.
        (WebKit::UIGamepadProvider::platformWebProcessProxyForGamepadInput): Deleted.

2016-09-05  Tim Horton  <timothy_horton@apple.com>

        Remove some dead code in ViewGestureControllerMac
        https://bugs.webkit.org/show_bug.cgi?id=161616

        Reviewed by Darin Adler.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        All other LEGACY_SWIPE_SHADOW_STYLE code has been removed, except for this.

2016-09-05  Darin Adler  <darin@apple.com>

        More bindings improvements, particularly things not needed for JavaScript bindings
        https://bugs.webkit.org/show_bug.cgi?id=161572

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMImplementation.cpp:
        (webkit_dom_dom_implementation_has_feature): Call SVGTests::hasFeatureForLegacyBindings
        instead of DOMImplementation::hasFeature. Also removed JSMainThreadNullState
        since this does not do anything that can invoke JavaScript.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDeprecated.cpp:
        (webkit_dom_document_get_default_charset): Call defaultCharsetForLegacyBindings.
        Also removed JSMainThreadNullState.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocumentType.cpp:
        (webkit_dom_document_type_get_entities): Changed to simply return nullptr; same behavior
        as before, but with no dependency on WebCore. Also removed JSMainThreadNullState.
        (webkit_dom_document_type_get_notations): Ditto.
        (webkit_dom_document_type_get_internal_subset): Ditto.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMNode.cpp:
        (webkit_dom_node_is_supported): Call SVGTests::hasFeatureForLegacyBindings
        instead of Node::isSupportedForBindings. Also removed JSMainThreadNullState.

2016-09-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, update stale variable name

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreateWebPage):

2016-08-31  Filip Pizlo  <fpizlo@apple.com>

        Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
        https://bugs.webkit.org/show_bug.cgi?id=160125

        Reviewed by Geoffrey Garen and Keith Miller.
        
        Just rewiring some #includes.

        * UIProcess/ViewGestureController.cpp:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:

2016-09-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed error message typo fix

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::removeUserContentWorlds):

2016-09-05  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Drop ".Development" suffix from XPC service bundle IDs, leave it only on the executable
        https://bugs.webkit.org/show_bug.cgi?id=161575

        Reviewed by Sam Weinig.

        Append the ".Development" suffix to the executable names, but not to the bundle names and
        bundle IDs.

        * Configurations/BaseTarget.xcconfig: No need for a preprocessor definition anymore.
        * Configurations/BaseXPCService.xcconfig: Set EXECUTABLE_SUFFIX.
        * Configurations/DatabaseService.xcconfig: No need to suffix the service name and bundle ID.
        * Configurations/NetworkService.xcconfig: Ditto.
        * Configurations/PluginService.32.xcconfig: Ditto.
        * Configurations/PluginService.64.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Ditto.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName): Service names are no longer suffixed.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.

2016-09-05  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] GL_PACK_ROW_LENGTH is not available in GLES2
        https://bugs.webkit.org/show_bug.cgi?id=161484

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
        (WebKit::AcceleratedBackingStoreWayland::paint): when under GLES2 we cannot rely on
        GL_PACK_ROW_LENGTH; use glReadPixel directly when stride matches width, read line
        by line manually otherwise. Colour conversion is also required to get the data out
        correctly.

2016-09-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] SetNativeSurfaceHandleForCompositing should not be compiled in for wayland build
        https://bugs.webkit.org/show_bug.cgi?id=161483

        Reviewed by Žan Doberšek.

        SetNativeSurfaceHandleForCompositing and DestroyNativeSurfaceHandleForCompositing messages should only be used
        for GTK+ port when compiled with OpenGL and X11 enabled and redirected XComposite window disabled. So, we should
        use USE(TEXTURE_MAPPER) && PLATFORM(GTK) && PLATFORM(X11) && !USE(REDIRECTED_XCOMPOSITE_WINDOW) consistently.
        This fixes the build when building the GTK+ port with Wayland enabled and X11 disabled.

        * UIProcess/AcceleratedDrawingAreaProxy.cpp:
        (WebKit::AcceleratedDrawingAreaProxy::didUpdateBackingStoreState):
        * UIProcess/AcceleratedDrawingAreaProxy.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::enterAcceleratedCompositingMode):
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2016-09-05  Zan Dobersek  <zdobersek@igalia.com>

        [GObject bindings] override handleEvent() method in GObjectEventListener
        https://bugs.webkit.org/show_bug.cgi?id=161593

        Reviewed by Carlos Garcia Campos.

        * WebProcess/InjectedBundle/API/gtk/DOM/GObjectEventListener.h: Override
        the handleMethod() which is inherited from the WebCore EventListener class.
        Suppresses the -Winconsistent-missing-override warning that Clang propagates.

2016-09-04  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unnecessary RetainPtr.

        Review comments on earlier change.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _defaultAnimationController]):

2016-09-04  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Wrapping XPC service execution in os_activity is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=161577

        Reviewed by Sam Weinig.

        Removed code that created an os_activity around the execution of the XPC service
        code, because this workaround is no longer needed.

        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseServiceEntryPoint.mm:
        (DatabaseServiceInitializer):
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (NetworkServiceInitializer):
        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (PluginServiceInitializer):
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):

2016-09-04  Commit Queue  <commit-queue@webkit.org>

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

        Many bots see inspector test failures, rolling out now and
        investigating later. (Requested by brrian on #webkit).

        Reverted changeset:

        "Web Inspector: unify Main.html and Test.html sources and
        generate different copies with the preprocessor"
        https://bugs.webkit.org/show_bug.cgi?id=161212
        http://trac.webkit.org/changeset/205415

2016-09-01  Brian Burg  <bburg@apple.com>

        Web Inspector: unify Main.html and Test.html sources and generate different copies with the preprocessor
        https://bugs.webkit.org/show_bug.cgi?id=161212
        <rdar://problem/28017961>

        Reviewed by Joseph Pecoraro.

        Rearrange CMake rules so that most Inspector UI work is done in WebInspectorUI.

        * PlatformGTK.cmake:
        - Move the list of Inspector resources into WebInspectorUI/CMakeLists.txt.
        - Move generation of InspectorGResourceBundle into WebInspectorUI.
        - Copy over InspectorGResourceBundle.c into WebKit2's Derived Sources before compiling.

2016-09-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor the heuristic for showing media controls to take all media sessions into account
        https://bugs.webkit.org/show_bug.cgi?id=161503
        <rdar://problem/28033783>

        Reviewed by Darin Adler.

        Adds an SPI testing hook for sending the element ID of the currently controlled video element from the web
        process to the UI process. See VideoControlsManager.mm in Tools/TestWebKitAPI/ for usage.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _requestControlledElementID]):
        (-[WKWebView _handleControlledElementIDResponse:]):
        (-[WKWebView _hasActiveVideoForControlsManager]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.messages.in:
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.mm:
        (WebKit::WebPlaybackSessionManagerProxy::handleControlledElementIDResponse):
        (WebKit::WebPlaybackSessionManagerProxy::requestControlledElementID):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestControlledElementID):
        (WebKit::WebPageProxy::handleControlledElementIDResponse):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::handleControlledElementIDResponse):
        * WebProcess/cocoa/WebPlaybackSessionManager.h:
        * WebProcess/cocoa/WebPlaybackSessionManager.messages.in:
        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionManager::handleControlledElementIDRequest):

2016-09-03  Darin Adler  <darin@apple.com>

        Streamline DOMImplementation, and move it to our new DOM exception system
        https://bugs.webkit.org/show_bug.cgi?id=161295

        Reviewed by Ryosuke Niwa.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::isDisplayingMarkupDocument): Use isXMLMIMEType in its
        new location in MIMETypeRegistry rather than in DOMImplementation.
        (WebKit::WebFrameProxy::isDisplayingPDFDocument): Removed unneeded redundant
        check for empty string, already done by MIMETypeRegistry.

2016-09-03  Brian Weinstein  <bweinstein@apple.com>

        Implement WebFrameLoaderClient::shouldUseContentExtensionsForURL and consult the InjectedBundlePageLoaderClient.
        https://bugs.webkit.org/show_bug.cgi?id=161441

        Reviewed by Darin Adler.

        WebFrameLoaderClient::shouldUseContentExtensionsForURL only consults the injected bundle, because we don't want to
        defer the loading of every main resource to consult with the UI Process about whether or not we should use content
        extensions for the load.

        * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h: Bump the latest version to WKBundlePageLoaderClientV9 and
        add WKBundlePageShouldUseContentExtensionsForURLCallback.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::shouldUseContentExtensionsForURL): Ask the client if we should use content
        extensions for this URL.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldUseContentExtensionsForURL): Only consult with the injected bundle about whether
        or not we should use content extensions for this URL.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDOMImplementation.cpp:
        (webkit_dom_dom_implementation_create_document_type): Updated to work with ExceptionOr.
        (webkit_dom_dom_implementation_create_document): Updated to work with ExceptionOr.
        (webkit_dom_dom_implementation_create_css_style_sheet): Updated since this function
        can no longer raise an exception.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMDocument.cpp:
        (webkit_dom_document_set_xml_standalone): Updated since this function can no longer
        raise an exception.

2016-09-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move WebKit2 WebInspector files to #pragma once
        https://bugs.webkit.org/show_bug.cgi?id=161550

        Reviewed by Darin Adler.

        * UIProcess/InspectorServer/WebInspectorServer.h:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/gtk/WebInspectorClientGtk.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.h:
        * WebProcess/WebPage/WebInspectorUI.h:

2016-09-02  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] -Wmissing-field-initializers on WaylandCompositor.cpp:295
        https://bugs.webkit.org/show_bug.cgi?id=161524

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/WaylandCompositor.cpp:

2016-09-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Move the viewport controller off the compositing thread
        https://bugs.webkit.org/show_bug.cgi?id=161532

        Reviewed by Michael Catanzaro.

        While working on bug #161242 I've realized that having the view port controller in the compositing thread makes
        everything more complex. The viewport controller receives changes about things like contents size, viewport
        size, etc. and uses that information to compute the visible contents rect and page scale factor. Then it
        notifies back to main thread about the computed visible contents rect and page scale. Those computations are not
        heave at all, so they could be done in the main thread and we would avoid communications between the main and
        compositing thread in both directions. The main thread needs the visible contents rect to notify the compositing
        coordinator and the page cale to scale the page in case of pixed layout. But the compositing thread only needs
        to know the effective scale and scroll position. So, instead of going to the compositing thread after every
        change that might update the visible contents rect and page scale factor, we could do those calculations in the
        main thread and only notify the compositing thread about the actual changes in the scroll position and effective scale.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::createTilesIfNeeded): Return early if backingStore is nullptr, which can
        happen if the layer shouldn't have a backing store and was removed by the previous call to prepareContentBackingStore().
        (WebKit::CoordinatedGraphicsScene::updateTilesIfNeeded): Ditto.
        * Shared/CoordinatedGraphics/SimpleViewportController.cpp:
        (WebKit::SimpleViewportController::SimpleViewportController): Remove the client since we no longer need to
        notify about changes.
        (WebKit::SimpleViewportController::didChangeViewportSize): Remove call to syncVisibleContents().
        (WebKit::SimpleViewportController::didChangeContentsSize): Ditto.
        (WebKit::SimpleViewportController::didChangeViewportAttributes): Ditto.
        (WebKit::SimpleViewportController::didScroll): Removed unused scrollBy methods and renamed scrollTo as
        didiScroll for consistency. Save the position without calling boundContentsPosition, because that's already
        donde when the position is used to compute the contents visible rectangle.
        (WebKit::SimpleViewportController::visibleContentsRect): No need to notify about the changes.
        (WebKit::SimpleViewportController::visibleContentsSize): Deleted.
        * Shared/CoordinatedGraphics/SimpleViewportController.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::create): Pass a reference to the client instead of a pointer. It's no longer
        possible to have a valid pointer when the object has been destroyed, so we can better use a reference now.
        (WebKit::ThreadedCompositor::ThreadedCompositor): Ditto.
        (WebKit::ThreadedCompositor::~ThreadedCompositor): Remove assert.
        (WebKit::ThreadedCompositor::invalidate): No need to invalidate the client.
        (WebKit::ThreadedCompositor::setScaleFactor): Set the effective scale factor that should be used for rendering.
        (WebKit::ThreadedCompositor::setScrollPosition): Set the current scroll position and effective scale factor.
        (WebKit::ThreadedCompositor::setViewportSize): Set the viewport size and effective scale factor.
        (WebKit::ThreadedCompositor::renderNextFrame): Update m_client use that is no longer a pointer.
        (WebKit::ThreadedCompositor::commitScrollOffset): Ditto.
        (WebKit::ThreadedCompositor::renderLayerTree): Call glViewport after a resize and use m_viewportSize,
        m_scrollPosition and m_scaleFactor members.
        (WebKit::ThreadedCompositor::didChangeVisibleRect): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost): Pass the compositor client as a
        reference to ThreadedCompositor constructor.
        (WebKit::ThreadedCoordinatedLayerTreeHost::scrollNonCompositedContents): Update the viewport and call didChangeViewport().
        (WebKit::ThreadedCoordinatedLayerTreeHost::contentsSizeChanged): Ditto.
        (WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged): Pass the effective scale factor to
        the compositor.
        (WebKit::ThreadedCoordinatedLayerTreeHost::sizeDidChange): Update the viewport, the compositor and call didChangeViewport().
        (WebKit::ThreadedCoordinatedLayerTreeHost::didChangeViewportProperties): Update the viewport and call didChangeViewport().
        (WebKit::ThreadedCoordinatedLayerTreeHost::didChangeViewport): Notify the compositing coordinator about the new
        visible contents rectangle, and update the threaded compositor if needed.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2016-09-02  Beth Dakin  <bdakin@apple.com>

        Need to updateEditorState if an element change edit-ability without changing 
        selection
        https://bugs.webkit.org/show_bug.cgi?id=161546
        -and corresponding-
        rdar://problem/27806012

        Reviewed by Ryosuke Niwa.

        Every time WebPage::editorState() is called, we now save whether the last state 
        was contentEditable. That way in updateEditorStateAfterLayoutIfNeeded() we can 
        assess whether or not edit-ability has changed. 

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient:: updateEditorStateAfterLayoutIfEditabilityChanged):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        (WebKit::WebPage:: updateEditorStateAfterLayoutIfEditabilityChanged):
        (WebKit::WebPage::didStartPageTransition):
        * WebProcess/WebPage/WebPage.h:

2016-09-02  Jonathan Bedard  <jbedard@apple.com>

        WebKitTestRunner needs layoutTestController.setDashboardCompatibilityMode
        https://bugs.webkit.org/show_bug.cgi?id=42547

        Reviewed by Darin Adler.

        Added access to setUseDashBoardCompatibilityMode for WebKit2.
        Note: this bug mistakenly called this function setDashboardCompatibilityMode, it is actually setUseDashboardCompatibilityMode.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetUseDashboardCompatibilityMode): Added dashboard compatiblity mode setter.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Ditto.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setUseDashboardCompatibilityMode): Ditto.
        * WebProcess/InjectedBundle/InjectedBundle.h: Ditto.

2016-09-02  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] RetainPtr misuse, AnimationController leaks
        https://bugs.webkit.org/show_bug.cgi?id=161552

        Reviewed by Tim Horton.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _defaultAnimationController]):

2016-09-02  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] RetainPtr misuse, DDActionContext leaks
        https://bugs.webkit.org/show_bug.cgi?id=161551

        Reviewed by Tim Horton.

        * Platform/mac/MenuUtilities.mm:
        (WebKit::menuItemForTelephoneNumber):
        (WebKit::menuForTelephoneNumber):

2016-09-02  Joseph Pecoraro  <pecoraro@apple.com>

        Fix Mac CMake build, missing _WKRemoteWebInspectorViewController.mm

        Unreviewed build fix.

        * PlatformMac.cmake:

2016-09-02  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; partial roll out of r205365 to remove unintentional change in WKWebView.mm.

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

2016-09-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: If inspector process crashes, re-inspecting the page does not work
        https://bugs.webkit.org/show_bug.cgi?id=161502
        <rdar://problem/28120368>

        Reviewed by Brian Burg.

        This is an issue on Mac because WebInspectorProxyMac's platformDidClose
        doesn't immediately get rid of the WKWebView for the inspector. This is
        intended so that a quick close and reopen of Web Inspector is faster,
        however in the case where the WebPage under the WKWebView crashed, we
        actually should clear things instead of using the timer path. Provide
        a stronger platform close handler when the inspector page crashed.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::closeForCrash):
        (WebKit::webProcessDidCrash):
        (WebKit::WebInspectorProxy::platformDidCloseForCrash):
        Go through a stronger path when the web process crashes.
        Some platforms may want to handle this differently then the user
        closing a web inspector window.
        
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformDidCloseForCrash):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformDidCloseForCrash):
        These platforms do not need to do anything special.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::closeTimerFired):
        Loosen this code. There is no need for it to be so strict.

        (WebKit::WebInspectorProxy::platformDidCloseForCrash):
        If the inspector page crashed, close our handles immediately.

2016-09-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide a way to open an inspector frontend for a remote target
        https://bugs.webkit.org/show_bug.cgi?id=161515
        <rdar://problem/13182127>

        Reviewed by Brian Burg.

        Provide an interface to open a Web Inspector window/webView for a
        remote debuggable. Unlike the local Web Inspector, the remote
        debuggable may be either a JSContext or WebPage, and may only
        support an older version of the protocol. The Inspector frontend
        already supports these configurations.

        This adds new RemoteWebInspector/Proxy classes that mirror the
        WebInspector/Proxy classes for local inspection, but have
        slightly different behavior as the inspected target is not
        directly available (and may not be a web page).

        The remote and local classes share a lot of inspector
        frontend implementation:

          - share most of the inspector frontend host implementation
          - share much of the frontend webview/window handling
          - use an inspector process for the frontend page

        But remains separate in some ways:

          - inspected target is unavailable
          - docking is never available
          - a few inspector frontend host methods are duplicated
          - some of the webview/window handling is duplicated

        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.h: Added.
        * UIProcess/API/Cocoa/_WKRemoteWebInspectorViewController.mm: Added.
        (-[_WKRemoteWebInspectorViewController init]):
        (-[_WKRemoteWebInspectorViewController window]):
        (-[_WKRemoteWebInspectorViewController webView]):
        (-[_WKRemoteWebInspectorViewController loadForDebuggableType:backendCommandsURL:]):
        (-[_WKRemoteWebInspectorViewController close]):
        (-[_WKRemoteWebInspectorViewController show]):
        (-[_WKRemoteWebInspectorViewController sendMessageToFrontend:]):
        (-[_WKRemoteWebInspectorViewController sendMessageToBackend:]):
        (-[_WKRemoteWebInspectorViewController closeFromFrontend]):
        The interface that may be used to open an inspector window for
        a remote debuggable. There are only a few delegates to handle
        sending messages to the backend and knowing if the frontend
        closed itself (InspectorFrontendHost.closeWindow() or crashed).

        * UIProcess/WebInspectorUtilities.h:
        * UIProcess/WebInspectorUtilities.cpp: Added.
        (WebKit::pageLevelMap):
        (WebKit::inspectorLevelForPage):
        (WebKit::inspectorPageGroupIdentifierForPage):
        (WebKit::trackInspectorPage):
        (WebKit::untrackInspectorPage):
        (WebKit::inspectorProcessPool):
        (WebKit::isInspectorProcessPool):
        (WebKit::isInspectorPage):
        Extract utilities for determining if a page contains an inspector frontend.
        Previously this was part of WebInspectorProxy and subclasses but can
        now be used by multiple classes.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectionLevel):
        (WebKit::WebInspectorProxy::invalidate):
        (WebKit::WebInspectorProxy::isMainOrTestInspectorPage):
        (WebKit::decidePolicyForNavigationAction):
        (WebKit::WebInspectorProxy::eagerlyCreateInspectorPage):
        (WebKit::WebInspectorProxy::didClose):
        (WebKit::pageLevelMap): Deleted.
        (WebKit::WebInspectorProxy::inspectorPageGroupIdentifier): Deleted.
        (WebKit::WebInspectorProxy::inspectorProcessPool): Deleted.
        (WebKit::WebInspectorProxy::isInspectorProcessPool): Deleted.
        (WebKit::WebInspectorProxy::isInspectorPage): Deleted.
        (WebKit::isMainOrTestInspectorPage): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Extract methods to utilities and use them.

        Also address an issue where WebInspectorProxy was untracking
        the wrong page. It should have been untracking the inspector
        page but was untracking the inspected page.

        * UIProcess/RemoteWebInspectorProxy.cpp: Added.
        (WebKit::RemoteWebInspectorProxy::RemoteWebInspectorProxy):
        (WebKit::RemoteWebInspectorProxy::~RemoteWebInspectorProxy):
        (WebKit::RemoteWebInspectorProxy::invalidate):
        (WebKit::RemoteWebInspectorProxy::load):
        (WebKit::RemoteWebInspectorProxy::closeFromBackend):
        (WebKit::RemoteWebInspectorProxy::closeFromCrash):
        (WebKit::RemoteWebInspectorProxy::show):
        (WebKit::RemoteWebInspectorProxy::sendMessageToFrontend):
        (WebKit::RemoteWebInspectorProxy::frontendDidClose):
        (WebKit::RemoteWebInspectorProxy::bringToFront):
        (WebKit::RemoteWebInspectorProxy::save):
        (WebKit::RemoteWebInspectorProxy::append):
        (WebKit::RemoteWebInspectorProxy::startWindowDrag):
        (WebKit::RemoteWebInspectorProxy::openInNewTab):
        (WebKit::RemoteWebInspectorProxy::sendMessageToBackend):
        (WebKit::RemoteWebInspectorProxy::createFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorProxy::closeFrontendPageAndWindow):
        This class behaves like WebInspectorProxy but without having a
        reference to the inspected target. It communicates with
        RemoteInspectorUI in an Inspector process to send and receive
        frontend messages. What can't be easily shared is duplicated.

        * UIProcess/mac/RemoteWebInspectorProxyMac.mm: Added.
        (-[WKRemoteWebInspectorProxyObjCAdapter initWithRemoteWebInspectorProxy:]):
        (-[WKRemoteWebInspectorProxyObjCAdapter webViewWebContentProcessDidTerminate:]):
        (-[WKRemoteWebInspectorProxyObjCAdapter webView:decidePolicyForNavigationAction:decisionHandler:]):
        (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorProxy::platformCloseFrontendPageAndWindow):
        (WebKit::RemoteWebInspectorProxy::platformBringToFront):
        (WebKit::RemoteWebInspectorProxy::platformSave):
        (WebKit::RemoteWebInspectorProxy::platformAppend):
        (WebKit::RemoteWebInspectorProxy::platformStartWindowDrag):
        (WebKit::RemoteWebInspectorProxy::platformOpenInNewTab):
        Platform implementation for the bits that are platform specific.
        What can't be easily shared is duplicated. Ideally we will
        eventually share this with WebInspectorProxyMac.

        * UIProcess/mac/WKWebInspectorWKWebView.h:
        * UIProcess/mac/WKWebInspectorWKWebView.mm: Added.
        (WebKit::getWindowFrame):
        (WebKit::setWindowFrame):
        (WebKit::exceededDatabaseQuota):
        (WebKit::runOpenPanel):
        (-[WKWebInspectorWKWebView initWithFrame:configuration:]):
        (-[WKWebInspectorWKWebView tag]):
        Extract Mac platform code for the inspector webview from WebInspectorProxyMac.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::closeTimerFired):
        (WebKit::WebInspectorProxy::createInspectorWindow):
        (WebKit::WebInspectorProxy::createFrontendConfiguration):
        (WebKit::WebInspectorProxy::createFrontendWindow):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (-[WKWebInspectorWKWebView tag]): Deleted.
        (WebKit::getWindowFrame): Deleted.
        (WebKit::setWindowFrame): Deleted.
        (WebKit::exceededDatabaseQuota): Deleted.
        (WebKit::runOpenPanel): Deleted.
        Extact Mac platform code to be shared for construction of a
        WKWebViewConfiguration, WKWebView, and NSWindow for an inspector webview.
        
        * WebProcess/WebPage/RemoteWebInspectorUI.cpp: Added.
        (WebKit::RemoteWebInspectorUI::create):
        (WebKit::RemoteWebInspectorUI::RemoteWebInspectorUI):
        (WebKit::RemoteWebInspectorUI::initialize):
        (WebKit::RemoteWebInspectorUI::didSave):
        (WebKit::RemoteWebInspectorUI::didAppend):
        (WebKit::RemoteWebInspectorUI::sendMessageToFrontend):
        (WebKit::RemoteWebInspectorUI::sendMessageToBackend):
        (WebKit::RemoteWebInspectorUI::windowObjectCleared):
        (WebKit::RemoteWebInspectorUI::frontendLoaded):
        (WebKit::RemoteWebInspectorUI::startWindowDrag):
        (WebKit::RemoteWebInspectorUI::moveWindowBy):
        (WebKit::RemoteWebInspectorUI::bringToFront):
        (WebKit::RemoteWebInspectorUI::closeWindow):
        (WebKit::RemoteWebInspectorUI::openInNewTab):
        (WebKit::RemoteWebInspectorUI::save):
        (WebKit::RemoteWebInspectorUI::append):
        (WebKit::RemoteWebInspectorUI::inspectedURLChanged):
        * WebProcess/WebPage/RemoteWebInspectorUI.h: Added.
        * WebProcess/WebPage/RemoteWebInspectorUI.messages.in: Added.
        * UIProcess/RemoteWebInspectorProxy.messages.in: Added.
        * UIProcess/RemoteWebInspectorProxy.mm: Added.
        Inspector frontend client that knows to talk
        with a RemoteWebInspectorProxy instead of a WebInspectorProxy.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/mac/WebInspectorUIMac.mm:
        (WebKit::webInspectorUILocalizedStringsURL):
        (WebKit::WebInspectorUI::localizedStringsURL):
        (WebKit::RemoteWebInspectorUI::localizedStringsURL):
        Simplify localized string URL lookup.

        * DerivedSources.make:
        * WebKit2.xcodeproj/project.pbxproj:
        New files.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::remoteInspectorUI):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::isInspectorPage):
        An InspectorProcess WebPage may have either a WebInspectorUI or a RemoteWebInspectorUI.

2016-07-08  Jer Noble  <jer.noble@apple.com>

        Refactor WebPlaybackSessionModelMediaElement to be client based.
        https://bugs.webkit.org/show_bug.cgi?id=159580

        Reviewed by Eric Carlson.

        Adopt the changes made in the WebPlaybackSessionModel,Interface and WebVideoFullscreenModel,Interface
        in the WebPlaybackSessionManager,Proxy classes.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Deleted.
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.mm:
        (WebKit::WebPlaybackSessionModelContext::addClient):
        (WebKit::WebPlaybackSessionModelContext::removeClient):
        (WebKit::WebPlaybackSessionModelContext::setDuration):
        (WebKit::WebPlaybackSessionModelContext::setCurrentTime):
        (WebKit::WebPlaybackSessionModelContext::setBufferedTime):
        (WebKit::WebPlaybackSessionModelContext::setRate):
        (WebKit::WebPlaybackSessionModelContext::setSeekableRanges):
        (WebKit::WebPlaybackSessionModelContext::setCanPlayFastReverse):
        (WebKit::WebPlaybackSessionModelContext::setAudioMediaSelectionOptions):
        (WebKit::WebPlaybackSessionModelContext::setLegibleMediaSelectionOptions):
        (WebKit::WebPlaybackSessionModelContext::setExternalPlayback):
        (WebKit::WebPlaybackSessionModelContext::setWirelessVideoPlaybackDisabled):
        (WebKit::WebPlaybackSessionManagerProxy::createModelAndInterface):
        (WebKit::WebPlaybackSessionManagerProxy::removeClientForContext):
        (WebKit::WebPlaybackSessionManagerProxy::setCurrentTime):
        (WebKit::WebPlaybackSessionManagerProxy::setBufferedTime):
        (WebKit::WebPlaybackSessionManagerProxy::setSeekableRangesVector):
        (WebKit::WebPlaybackSessionManagerProxy::setCanPlayFastReverse):
        (WebKit::WebPlaybackSessionManagerProxy::setAudioMediaSelectionOptions):
        (WebKit::WebPlaybackSessionManagerProxy::setLegibleMediaSelectionOptions):
        (WebKit::WebPlaybackSessionManagerProxy::setExternalPlaybackProperties):
        (WebKit::WebPlaybackSessionManagerProxy::setWirelessVideoPlaybackDisabled):
        (WebKit::WebPlaybackSessionManagerProxy::setDuration):
        (WebKit::WebPlaybackSessionManagerProxy::setRate):
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenModelContext::addClient):
        (WebKit::WebVideoFullscreenModelContext::removeClient):
        (WebKit::WebVideoFullscreenManagerProxy::setHasVideo):
        (WebKit::WebVideoFullscreenManagerProxy::setVideoDimensions):
        * WebProcess/cocoa/WebPlaybackSessionManager.h:
        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionInterfaceContext::durationChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::currentTimeChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::bufferedTimeChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::rateChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::seekableRangesChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::canPlayFastReverseChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::audioMediaSelectionOptionsChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::legibleMediaSelectionOptionsChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::externalPlaybackChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::wirelessVideoPlaybackDisabledChanged):
        (WebKit::WebPlaybackSessionManager::~WebPlaybackSessionManager):
        (WebKit::WebPlaybackSessionManager::createModelAndInterface):
        (WebKit::WebPlaybackSessionManager::removeContext):
        (WebKit::WebPlaybackSessionManager::durationChanged):
        (WebKit::WebPlaybackSessionManager::currentTimeChanged):
        (WebKit::WebPlaybackSessionManager::bufferedTimeChanged):
        (WebKit::WebPlaybackSessionManager::rateChanged):
        (WebKit::WebPlaybackSessionManager::seekableRangesChanged):
        (WebKit::WebPlaybackSessionManager::canPlayFastReverseChanged):
        (WebKit::WebPlaybackSessionManager::audioMediaSelectionOptionsChanged):
        (WebKit::WebPlaybackSessionManager::legibleMediaSelectionOptionsChanged):
        (WebKit::WebPlaybackSessionManager::externalPlaybackChanged):
        (WebKit::WebPlaybackSessionManager::wirelessVideoPlaybackDisabledChanged):
        (WebKit::WebPlaybackSessionInterfaceContext::setDuration): Deleted.
        (WebKit::WebPlaybackSessionInterfaceContext::setCurrentTime): Deleted.
        (WebKit::WebPlaybackSessionInterfaceContext::setBufferedTime): Deleted.
        (WebKit::WebPlaybackSessionInterfaceContext::setRate): Deleted.
        (WebKit::WebPlaybackSessionInterfaceContext::setSeekableRanges): Deleted.
        (WebKit::WebPlaybackSessionInterfaceContext::setCanPlayFastReverse): Deleted.
        (WebKit::WebPlaybackSessionInterfaceContext::setAudioMediaSelectionOptions): Deleted.
        (WebKit::WebPlaybackSessionInterfaceContext::setLegibleMediaSelectionOptions): Deleted.
        (WebKit::WebPlaybackSessionInterfaceContext::setExternalPlayback): Deleted.
        (WebKit::WebPlaybackSessionInterfaceContext::setWirelessVideoPlaybackDisabled): Deleted.
        (WebKit::WebPlaybackSessionManager::setDuration): Deleted.
        (WebKit::WebPlaybackSessionManager::setCurrentTime): Deleted.
        (WebKit::WebPlaybackSessionManager::setBufferedTime): Deleted.
        (WebKit::WebPlaybackSessionManager::setRate): Deleted.
        (WebKit::WebPlaybackSessionManager::setSeekableRanges): Deleted.
        (WebKit::WebPlaybackSessionManager::setCanPlayFastReverse): Deleted.
        (WebKit::WebPlaybackSessionManager::setAudioMediaSelectionOptions): Deleted.
        (WebKit::WebPlaybackSessionManager::setLegibleMediaSelectionOptions): Deleted.
        (WebKit::WebPlaybackSessionManager::setExternalPlayback): Deleted.
        (WebKit::WebPlaybackSessionManager::setWirelessVideoPlaybackDisabled): Deleted.
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        (WebKit::WebVideoFullscreenInterfaceContext::create):
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenInterfaceContext::WebVideoFullscreenInterfaceContext):
        (WebKit::WebVideoFullscreenInterfaceContext::hasVideoChanged):
        (WebKit::WebVideoFullscreenInterfaceContext::videoDimensionsChanged):
        (WebKit::WebVideoFullscreenManager::~WebVideoFullscreenManager):
        (WebKit::WebVideoFullscreenManager::createModelAndInterface):
        (WebKit::WebVideoFullscreenManager::removeContext):
        (WebKit::WebVideoFullscreenManager::hasVideoChanged):
        (WebKit::WebVideoFullscreenManager::videoDimensionsChanged):
        (WebKit::WebVideoFullscreenInterfaceContext::resetMediaState): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setDuration): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setCurrentTime): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setBufferedTime): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setRate): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setVideoDimensions): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setSeekableRanges): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setCanPlayFastReverse): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setAudioMediaSelectionOptions): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setLegibleMediaSelectionOptions): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setExternalPlayback): Deleted.
        (WebKit::WebVideoFullscreenInterfaceContext::setWirelessVideoPlaybackDisabled): Deleted.
        (WebKit::WebVideoFullscreenManager::setVideoDimensions): Deleted.

2016-09-02  Zan Dobersek  <zdobersek@igalia.com>

        Fix GObject bindings build breakage when compiling with ENABLE_USER_TIMING disabled.

        Rubber-stamped by Carlos Garcia Campos.

        Add additional ENABLE(USER_TIMING) build guards to WebKitDOMPerformance bindings,
        avoiding build errors when building with that feature disabled. Previously this
        wasn't a problem because the four amended binding functions weren't generated
        when the feature was disabled due to the similar use of guards in the Performance.idl
        file.

        * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMPerformance.cpp:
        (webkit_dom_performance_webkit_mark):
        (webkit_dom_performance_webkit_clear_marks):
        (webkit_dom_performance_webkit_measure):
        (webkit_dom_performance_webkit_clear_measures):

2016-09-02  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK+ build fix when compiling with Clang.

        * WebProcess/WebPage/gtk/AcceleratedSurface.cpp: Include WebPage.h.

2016-09-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix after r205327

        * UIProcess/API/gtk/WebKitUIClient.cpp:

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

        Build fix.

        * Configurations/FeatureDefines.xcconfig:

2016-09-01  Anders Carlsson  <andersca@apple.com>

        Use WTF::Function for completion handlers in API::UIClient
        https://bugs.webkit.org/show_bug.cgi?id=161516

        Reviewed by Tim Horton.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::runJavaScriptAlert):
        (API::UIClient::runJavaScriptConfirm):
        (API::UIClient::runJavaScriptPrompt):
        (API::UIClient::runBeforeUnloadConfirmPanel):
        (API::UIClient::exceededDatabaseQuota):
        (API::UIClient::reachedApplicationCacheOriginQuota):
        * UIProcess/API/C/WKPage.cpp:
        (WebKit::RunBeforeUnloadConfirmPanelResultListener::create):
        (WebKit::RunBeforeUnloadConfirmPanelResultListener::RunBeforeUnloadConfirmPanelResultListener):
        (WebKit::RunJavaScriptAlertResultListener::create):
        (WebKit::RunJavaScriptAlertResultListener::RunJavaScriptAlertResultListener):
        (WebKit::RunJavaScriptConfirmResultListener::create):
        (WebKit::RunJavaScriptConfirmResultListener::RunJavaScriptConfirmResultListener):
        (WebKit::RunJavaScriptPromptResultListener::create):
        (WebKit::RunJavaScriptPromptResultListener::RunJavaScriptPromptResultListener):
        (WKPageSetPageUIClient):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert):
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm):
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt):
        (WebKit::UIDelegate::UIClient::exceededDatabaseQuota):
        (WebKit::UIDelegate::UIClient::reachedApplicationCacheOriginQuota):

2016-09-01  JF Bastien  <jfbastien@apple.com>

        Fix cmake build, missing SecItemShim.messages.in
        https://bugs.webkit.org/show_bug.cgi?id=161496

        Reviewed by Alex Christensen.

        * PlatformMac.cmake:

2016-09-01  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Web Inspector: Remove stale inspector process termination code
        https://bugs.webkit.org/show_bug.cgi?id=161465
        <rdar://problem/28106584>

        Reviewed by Brian Burg.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::didRelaunchInspectorPageProcess): Deleted.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter didRelaunchProcess]): Deleted.
        (-[WKWebInspectorWKWebView _didRelaunchProcess]): Deleted.
        This code doesn't appear to be run when the WebContent process inside
        of an Inspector process crashes. The general WebInspectorProxy has its
        own handling of when the page inside an inspector process crashes, so
        this Mac specific path appears to be unused and stale.

2016-09-01  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        [GTK] Fix configuration without wayland support
        https://bugs.webkit.org/show_bug.cgi?id=161475

        WebKit2WaylandClientProtocol.c is a derived source that is created
        conditionally on ENABLE_WAYLAND_TARGET.  It was being included
        in the sources list unconditionally, so configure failed whenever
        wayland support was unavailable.

        Reviewed by Žan Doberšek.

        * PlatformGTK.cmake: Include WebKit2WaylandClientProtocol.c in source list conditional on ENABLE_WAYLAND_TARGET

2016-08-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GObject DOM bindings to WebKit2 layer and stop auto generating them
        https://bugs.webkit.org/show_bug.cgi?id=161438

        Reviewed by Michael Catanzaro.

        Move all GObject bindings code to WebProcess/InjectedBundle/API/gtk/DOM.

        * PlatformGTK.cmake:
        * WebProcess/InjectedBundle/API/gtk/DOM:

2016-08-31  Keith Rollin  <krollin@apple.com>

        WebKit should set a subsystem for os_log so it's easier to filter for WebKit log messages
        https://bugs.webkit.org/show_bug.cgi?id=160969
        <rdar://problem/26068734>

        Reviewed by Simon Fraser.

        - Specify a channel when using RELEASE_LOG macros.
        - Add some new channels so that we have something to pass to the
          RELEASE_LOG macros (ProcessSuspension, IPC, Layers).
        - Enable subsystem- and channel-related data and functions when using
          RELEASE_LOG macros.
        - Use the DECLARE_LOG_CHANNEL, DEFINE_LOG_CHANNEL, and
          LOG_CHANNEL_ADDRESS macros that are now defined in WTF.

        * NetworkProcess/Downloads/Download.cpp:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::cancelPrepareToSuspend):
        (WebKit::NetworkProcess::processDidResume):
        * NetworkProcess/NetworkResourceLoader.cpp:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForSyncReply):
        * Platform/LogInitialization.h:
        * Platform/Logging.cpp:
        (WebKit::initializeLogChannelsIfNecessary):
        * Platform/Logging.h:
        * Platform/foundation/LoggingFoundation.mm:
        * Platform/unix/LoggingUnix.cpp:
        * Shared/ChildProcess.cpp:
        (WebKit::didCloseOnConnectionWorkQueue):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::releaseNetworkActivityToken):
        (WebKit::NavigationState::didChangeIsLoading):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertionNow):
        (WebKit::ProcessThrottler::updateAssertion):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_hiddenPageThrottlingTimer):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::WebProcessProxy::didSetAssertionState):
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
        (WebKit::ProcessAssertion::ProcessAssertion):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::layerVolatilityTimerFired):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::processWillSuspendImminently):
        (WebKit::WebProcess::prepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::markAllLayersVolatile):
        (WebKit::WebProcess::processDidResume):

2016-08-31  Yoav Weiss  <yoav@yoav.ws>

        Add event support for link preload.
        https://bugs.webkit.org/show_bug.cgi?id=158466

        Reviewed by Alex Christensen.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime): Removed LinkPreload.

2016-08-31  Alex Christensen  <achristensen@webkit.org>

        Add runtime flag for using URLParser
        https://bugs.webkit.org/show_bug.cgi?id=161363

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * Shared/Cocoa/WebKit2InitializeCocoa.mm: Added.
        (WebKit::platformInitializeWebKit2):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):
        * Shared/WebKit2Initialize.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/efl/WebKit2InitializeEFL.cpp: Added.
        (WebKit::platformInitializeWebKit2):
        * Shared/gtk/WebKit2InitializeGTK.cpp: Added.
        (WebKit::platformInitializeWebKit2):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::createNewWebProcess):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2016-08-30  Anders Carlsson  <andersca@apple.com>

        Use Connection::sendWithReply for the SecItem shim messages
        https://bugs.webkit.org/show_bug.cgi?id=161419

        Reviewed by Tim Horton.

        * DerivedSources.make:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeConnection):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::workQueue):
        (WebKit::sendSecItemRequest):
        (WebKit::webSecItemCopyMatching):
        (WebKit::webSecItemAdd):
        (WebKit::webSecItemUpdate):
        (WebKit::webSecItemDelete):
        (WebKit::initializeSecItemShim):
        (WebKit::responseMap): Deleted.
        (WebKit::SecItemShim::singleton): Deleted.
        (WebKit::SecItemShim::SecItemShim): Deleted.
        (WebKit::generateSecItemRequestID): Deleted.
        (WebKit::SecItemShim::secItemResponse): Deleted.
        (WebKit::SecItemShim::initialize): Deleted.
        (WebKit::SecItemShim::initializeConnection): Deleted.
        * Shared/mac/SecItemShim.h:
        * Shared/mac/SecItemShim.messages.in: Removed.
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::didReceiveMessage):
        (WebKit::SecItemShimProxy::secItemRequest):
        * UIProcess/mac/SecItemShimProxy.h:
        * UIProcess/mac/SecItemShimProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeProcess):

2016-08-31  Andreas Kling  <akling@apple.com>

        DOM event handling should pass Event around by reference.
        <https://webkit.org/b/161398>

        Reviewed by Chris Dumez.

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

2016-08-31  Brady Eidson  <beidson@apple.com>

        WK2 Gamepad provider on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=161412

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

        * Platform/spi/ios/UIKitSPI.h:

        * UIProcess/Gamepad/UIGamepadProvider.cpp:

        * UIProcess/Gamepad/ios/UIGamepadProviderIOS.mm: Copied from Source/WebKit2/UIProcess/Gamepad/mac/UIGamepadProviderMac.mm.
        (WebKit::UIGamepadProvider::platformWebPageProxyForGamepadInput):

        * UIProcess/Gamepad/mac/UIGamepadProviderMac.mm:

        * WebKit2.xcodeproj/project.pbxproj:

2016-08-30  Anders Carlsson  <andersca@apple.com>

        Try to fix the 32-bit build.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/WebProcessProxy.h:

2016-08-30  Anders Carlsson  <andersca@apple.com>

        Switch more messages over to Connection::sendWithReply
        https://bugs.webkit.org/show_bug.cgi?id=161415

        Reviewed by Tim Horton.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::processWillShutDown):
        (WebKit::WebProcessProxy::canTerminateChildProcess):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::generateCallbackID): Deleted.
        (WebKit::WebProcessProxy::didDeleteWebsiteData): Deleted.
        (WebKit::WebProcessProxy::didDeleteWebsiteDataForOrigins): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::deleteWebsiteData):
        (WebKit::WebProcess::deleteWebsiteDataForOrigins):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2016-08-30  Anders Carlsson  <andersca@apple.com>

        Add Connection::sendWithReply
        https://bugs.webkit.org/show_bug.cgi?id=161399

        Reviewed by Tim Horton.

        Connection::sendWithReply makes it easy to send a message and process its reply asynchronously on a given WorkQueue or RunLoop.
        The reply handler is guaranteed to be called. If the reply is successfully received, it will consist of an std::tuple with the arguments,
        otherwise it will be called with Nullopt.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::invalidate):
        Go through all reply handlers and dispatch them with a null Decoder.

        (IPC::Connection::sendMessageWithReply):
        Add the reply handler to the m_replyHandlers hash map, and send the message.

        (IPC::Connection::processIncomingSyncReply):
        Check if the incoming reply has an entry in m_replyHandlers. If it does, dispatch its handler using the given dispatcher.

        (IPC::Connection::connectionDidClose):
        Go through all reply handlers and dispatch them with a null Decoder.

        * Platform/IPC/Connection.h:
        (IPC::Connection::sendWithReply):
        Encode the message (we use the sync message ID infrastructure for this), then call sendMessageWithReply with a reply handler that
        decodes the reply and calls the real reply handler.

        * Platform/IPC/HandleMessage.h:
        Forward declare Connection.

        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        Forward declare WebsiteData.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::processWillShutDown):
        Remove m_pendingFetchWebsiteDataCallbacks.

        (WebKit::WebProcessProxy::fetchWebsiteData):
        Use Connection::sendWithReply.

        (WebKit::WebProcessProxy::didFetchWebsiteData): Deleted.

        * UIProcess/WebProcessProxy.h:
        Remove members.

        * UIProcess/WebProcessProxy.messages.in:
        Remove DidFetchWebsiteData.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::fetchWebsiteData):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Update the FetchWebsiteData message to have a reply parameter.

2016-08-30  Brady Eidson  <beidson@apple.com>

        Fix runtime error caused by missing export after https://bugs.webkit.org/show_bug.cgi?id=160846

        Rubberstamped by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm:

2016-08-30  Brady Eidson  <beidson@apple.com>

        GameController.framework backend for gamepad API.
        https://bugs.webkit.org/show_bug.cgi?id=161086

        Reviewed by Alex Christensen.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _forceGameControllerFramework]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

        * UIProcess/Gamepad/UIGamepadProvider.h:

        * UIProcess/Gamepad/cocoa/UIGamepadProviderCocoa.mm: Renamed from Source/WebKit2/UIProcess/Gamepad/mac/UIGamepadProviderHID.cpp.
        (WebKit::UIGamepadProvider::setUsesGameControllerFramework):
        (WebKit::UIGamepadProvider::platformSetDefaultGamepadProvider):
        (WebKit::UIGamepadProvider::platformStopMonitoringInput):
        (WebKit::UIGamepadProvider::platformStartMonitoringInput):

        * WebKit2.xcodeproj/project.pbxproj:

2016-08-30  Mark Lam  <mark.lam@apple.com>

        Introduce the ThrowScope and force every throw site to instantiate a ThrowScope.
        https://bugs.webkit.org/show_bug.cgi?id=161171

        Reviewed by Filip Pizlo and Geoffrey Garen.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::callMethod):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::deleteProperty):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):
        (WebKit::JSNPObject::throwInvalidAccessError):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState):

2016-08-29  Anders Carlsson  <andersca@apple.com>

        Stop using m_client to indicate whether an IPC::Connection is valid
        https://bugs.webkit.org/show_bug.cgi?id=161362

        Reviewed by Andreas Kling.

        Instead, add an std::atomic<bool> so we can reliably check the state from other threads.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::invalidate):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::dispatchSyncMessage):
        (IPC::Connection::dispatchDidReceiveInvalidMessage):
        (IPC::Connection::dispatchMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::client):
        (IPC::Connection::isValid):
        (IPC::Connection::waitForAndDispatchImmediately):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::startUpdating):
        (WebKit::WebGeolocationManagerProxy::stopUpdating):
        (WebKit::WebGeolocationManagerProxy::setEnableHighAccuracy):

2016-08-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r194846): [GTK] UI process crash visiting sites protected with HTTP auth when using GTK+ < 3.14
        https://bugs.webkit.org/show_bug.cgi?id=161385

        Reviewed by Antonio Gomes.

        Since r194846, we are chaining up webkitWebViewBaseMotionNotifyEvent, but before GTK+ 3.14
        GtkWidget::motion_notify_event was nullptr, so it can't be used unconditionally.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseMotionNotifyEvent):

2016-08-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r205150.

        * UIProcess/API/gtk/WebKitUserContentManager.cpp:

2016-08-29  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        Unreviewed EFL/GTK build fix since r205150

        * CMakeLists.txt: Add Shared/FrameInfoData.cpp.

2016-08-29  Anders Carlsson  <andersca@apple.com>

        Get rid of ChildProcessProxy::fromConnection
        https://bugs.webkit.org/show_bug.cgi?id=161357

        Reviewed by Tim Horton.

        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::fromConnection): Deleted.
        * UIProcess/ChildProcessProxy.h:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::fromConnection): Deleted.

2016-08-29  Anders Carlsson  <andersca@apple.com>

        Remove the last uses of WebProcessProxy::fromConnection
        https://bugs.webkit.org/show_bug.cgi?id=161355

        Reviewed by Tim Horton.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::webProcessProxyFromConnection):
        (WebKit::WebProcessPool::handleMessage):
        (WebKit::WebProcessPool::handleSynchronousMessage):
        (WebKit::WebProcessPool::startedUsingGamepads):
        (WebKit::WebProcessPool::stoppedUsingGamepads):

2016-08-29  Anders Carlsson  <andersca@apple.com>

        Get rid of another use of WebProcessProxy::fromConnection
        https://bugs.webkit.org/show_bug.cgi?id=161331

        Reviewed by Dan Bernstein.

        WebUserContentControllerProxy::didPostMessage uses WebProcessProxy::fromConnection to be able to find a WebFrameProxy from
        a given frame ID. Since the WebFrameProxy is only used to construct an API::FrameInfo object from, introduce a FrameInfoData object
        and fill it in on the web process side and send it over to the UI process where an API::FrameInfo object can be created.

        * Shared/FrameInfoData.cpp: Added.
        (WebKit::FrameInfoData::encode):
        (WebKit::FrameInfoData::decode):
        * Shared/FrameInfoData.h: Added.
        * UIProcess/API/APIFrameInfo.cpp:
        (API::FrameInfo::create):
        (API::FrameInfo::FrameInfo):
        * UIProcess/API/APIFrameInfo.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        * UIProcess/UserContent/WebScriptMessageHandler.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::didPostMessage):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/UserContent/WebUserContentController.cpp:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::info):
        * WebProcess/WebPage/WebFrame.h:

2016-08-29  Anders Carlsson  <andersca@apple.com>

        Stop using WebProcessProxy::fromConnection in WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=161322

        Reviewed by Dan Bernstein.

        The WebPageProxy already knows its WebProcessProxy - no need to look it up from the connection.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMessage):
        (WebKit::WebPageProxy::handleSynchronousMessage):

2016-08-29  Anders Carlsson  <andersca@apple.com>

        Move some structs into Connection.cpp
        https://bugs.webkit.org/show_bug.cgi?id=161320

        Reviewed by Darin Adler.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::PendingSyncReply::PendingSyncReply):
        * Platform/IPC/Connection.h:
        (IPC::Connection::PendingSyncReply::PendingSyncReply): Deleted.

2016-08-26  Anders Carlsson  <andersca@apple.com>

        Remove sync message sending from secondary threads
        https://bugs.webkit.org/show_bug.cgi?id=161277

        Reviewed by Sam Weinig.

        This codepath hasn't been used for some time, and removing it will make it easier to make IPC::Connection backed by libxpc.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::processIncomingSyncReply):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::sendSyncMessageFromSecondaryThread): Deleted.
        * Platform/IPC/Connection.h:

2016-08-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Accelerated compositing does not work in Wayland
        https://bugs.webkit.org/show_bug.cgi?id=115803

        Reviewed by Michael Catanzaro.

        This is the initial implementation of accelerated compositing support in Wayland for the GTK+ port. It's based
        on previous patches written by Iago Toral, Žan Doberšek, Emanuele Aina and Emilio Pozuelo Monfort.

        The existing WebKitGTK+ Wayland interface previously added for this to WebCore has been moved to the WebKit2
        layer, since it's actually specific to WebKit2, and it's now actually used. The UI process runs a nested Wayland
        compositor that web processes connect to. Web processes create a Wayland surface in the nested compositor for
        the web page, and using the WebKitGTK+ Wayland protocol interface they tell the nested compositor the web page
        associated to the surface. A Wayland window is created for that surface that is then used as the native window
        handle for compositing. To communicate with the nested compositor and to ensure all GL operations happen in the
        nested compositor display, the web process creates a Wayland display that connects to the nested compositor,
        uses the WebKitGTK+ Wayland interface and it's set as the global shared display for compositing.

        The nested Wayland compositor creates a new display with a unique name that is sent to the web processes at
        start up. It implements the Wayland surface interface to handle the Wayland buffers created for every surface
        and scheduling redraws on the web pages when updates are available. It uses the WebKitGTK+ Wayland interface to
        associate the surfaces to a particular web page. A texture is created for every surface and updated with the
        Wayland buffer contents using an EGLImageKHR and eglImageTargetTexture2d API.

        To abstract the platform differences and avoid ifdefs as much as possible, new abstract classes have been added
        to represent the surfaces used in accelerated compositing. AcceleratedSurface is used by the web process and
        represents the surface where contents are rendered into. The X11 implementation is the redirected XComposite
        window, and the Wayland implementation is equivalent to the previous Wayland surface added to WebCore but never
        used. In the UI process the web view creates an abstract AcceleratedBackingStore that is used to render the
        AcceleratedSurface into the web view using cairo. The X11 implementation creates the cairo surface for the
        redirected XComposite window pixmap and uses XDamage extension to schedule redraws. The Wayland implementation
        asks the nested Wayland compositor for the texture associated to the web view page.

        Accelerated compositing is now always enabled by default in both X11 and Wayland, unless it's explicitly
        disabled by the user using the WEBKIT_DISABLE_COMPOSITING_MODE environment variable, or if any extension or
        feature required by X11 or Wayland implementations are not available.

        * PlatformGTK.cmake:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::glContext): Pass the shared display for compositing to GLContext::createContextForWindow()
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Encode wayland compositor display name.
        (WebKit::WebProcessCreationParameters::decode): Decode wayland compositor display name.
        * Shared/WebProcessCreationParameters.h: Add wayland compositor display name initial parameter.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDispose):
        (webkitWebViewBaseDraw):
        (webkitWebViewBaseCreateWebPage):
        (webkitWebViewBaseEnterAcceleratedCompositingMode):
        (webkitWebViewBaseUpdateAcceleratedCompositingMode):
        (webkitWebViewBaseExitAcceleratedCompositingMode):
        (webkitWebViewBasePageClosed):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess): Initialize the wayland compositor display name initial parameter.
        * UIProcess/gtk/AcceleratedBackingStore.cpp: Added.
        (WebKit::AcceleratedBackingStore::create):
        (WebKit::AcceleratedBackingStore::AcceleratedBackingStore):
        (WebKit::AcceleratedBackingStore::~AcceleratedBackingStore):
        (WebKit::AcceleratedBackingStore::paint):
        * UIProcess/gtk/AcceleratedBackingStore.h: Added.
        (WebKit::AcceleratedBackingStore::update):
        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp: Added.
        (WebKit::AcceleratedBackingStoreWayland::create):
        (WebKit::AcceleratedBackingStoreWayland::AcceleratedBackingStoreWayland):
        (WebKit::AcceleratedBackingStoreWayland::~AcceleratedBackingStoreWayland):
        (WebKit::AcceleratedBackingStoreWayland::paint):
        * UIProcess/gtk/AcceleratedBackingStoreWayland.h: Added.
        * UIProcess/gtk/AcceleratedBackingStoreX11.cpp: Added.
        (WebKit::XDamageNotifier::singleton):
        (WebKit::XDamageNotifier::add):
        (WebKit::XDamageNotifier::remove):
        (WebKit::XDamageNotifier::filterXDamageEvent):
        (WebKit::XDamageNotifier::notify):
        (WebKit::AcceleratedBackingStoreX11::create):
        (WebKit::AcceleratedBackingStoreX11::AcceleratedBackingStoreX11):
        (WebKit::AcceleratedBackingStoreX11::~AcceleratedBackingStoreX11):
        (WebKit::AcceleratedBackingStoreX11::update):
        (WebKit::AcceleratedBackingStoreX11::paint):
        * UIProcess/gtk/AcceleratedBackingStoreX11.h: Added.
        * UIProcess/gtk/WaylandCompositor.cpp: Added.
        (WebKit::WaylandCompositor::singleton):
        (WebKit::WaylandCompositor::Buffer::getOrCreate):
        (WebKit::WaylandCompositor::Buffer::Buffer):
        (WebKit::WaylandCompositor::Buffer::~Buffer):
        (WebKit::WaylandCompositor::Buffer::destroyListenerCallback):
        (WebKit::WaylandCompositor::Buffer::use):
        (WebKit::WaylandCompositor::Buffer::unuse):
        (WebKit::WaylandCompositor::Buffer::createImage):
        (WebKit::WaylandCompositor::Buffer::size):
        (WebKit::WaylandCompositor::Surface::Surface):
        (WebKit::WaylandCompositor::Surface::~Surface):
        (WebKit::WaylandCompositor::Surface::makePendingBufferCurrent):
        (WebKit::WaylandCompositor::Surface::attachBuffer):
        (WebKit::WaylandCompositor::Surface::requestFrame):
        (WebKit::WaylandCompositor::Surface::prepareTextureForPainting):
        (WebKit::WaylandCompositor::Surface::commit):
        (WebKit::WaylandCompositor::initializeEGL):
        (WebKit::createWaylandLoopSource):
        (WebKit::WaylandCompositor::WaylandCompositor):
        (WebKit::WaylandCompositor::getTexture):
        (WebKit::WaylandCompositor::bindSurfaceToWebPage):
        (WebKit::WaylandCompositor::registerWebPage):
        (WebKit::WaylandCompositor::unregisterWebPage):
        * UIProcess/gtk/WaylandCompositor.h: Added.
        (WebKit::WaylandCompositor::Buffer::createWeakPtr):
        (WebKit::WaylandCompositor::Surface::setWebPage):
        (WebKit::WaylandCompositor::isRunning):
        (WebKit::WaylandCompositor::displayName):
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):
        * UIProcess/gtk/XDamageNotifier.cpp: Removed.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost):
        (WebKit::ThreadedCoordinatedLayerTreeHost::invalidate):
        (WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::ThreadedCoordinatedLayerTreeHost::sizeDidChange):
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/gtk/AcceleratedSurface.cpp: Added.
        (WebKit::AcceleratedSurface::create):
        (WebKit::AcceleratedSurface::AcceleratedSurface):
        (WebKit::AcceleratedSurface::~AcceleratedSurface):
        (WebKit::AcceleratedSurface::resize):
        * WebProcess/WebPage/gtk/AcceleratedSurface.h: Added.
        (WebKit::AcceleratedSurface::window):
        (WebKit::AcceleratedSurface::surfaceID):
        * WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.cpp: Added.
        (WebKit::waylandCompositorDisplay):
        (WebKit::AcceleratedSurfaceWayland::create):
        (WebKit::AcceleratedSurfaceWayland::AcceleratedSurfaceWayland):
        (WebKit::AcceleratedSurfaceWayland::~AcceleratedSurfaceWayland):
        (WebKit::AcceleratedSurfaceWayland::resize):
        * WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.h: Added.
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/gtk/RedirectedXCompositeWindow.cpp.
        (WebKit::AcceleratedSurfaceX11::create):
        (WebKit::AcceleratedSurfaceX11::AcceleratedSurfaceX11):
        (WebKit::AcceleratedSurfaceX11::~AcceleratedSurfaceX11):
        (WebKit::AcceleratedSurfaceX11::resize):
        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h: Renamed from Source/WebKit2/WebProcess/WebPage/gtk/RedirectedXCompositeWindow.h.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk):
        (WebKit::LayerTreeHostGtk::makeContextCurrent):
        (WebKit::LayerTreeHostGtk::invalidate):
        (WebKit::LayerTreeHostGtk::sizeDidChange):
        (WebKit::LayerTreeHostGtk::deviceOrPageScaleFactorChanged):
        (WebKit::LayerTreeHostGtk::RenderFrameScheduler::RenderFrameScheduler): Deleted.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Initialize the wayland compositor display name.
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::waylandCompositorDisplayName): Return the wayland compositor display name.

2016-08-27  Jonathan Bedard  <jbedard@apple.com>

        WTR needs an implementation of setAutomaticLinkDetectionEnabled
        https://bugs.webkit.org/show_bug.cgi?id=87162

        Reviewed by Darin Adler

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAutomaticLinkDetectionEnabled): Added WKBundleSetAutomaticLinkDetectionEnabled definition.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Added WKBundleSetAutomaticLinkDetectionEnabled declaration.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAutomaticLinkDetectionEnabled): Added setAutomaticLinkDetectionEnabled definition.
        * WebProcess/InjectedBundle/InjectedBundle.h: Added setAutomaticLinkDetectionEnabled declaration.
        * WebProcess/WebProcess.h: Declared setTextCheckerState public.

2016-08-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Threaded Compositor] Several flaky tests
        https://bugs.webkit.org/show_bug.cgi?id=161242

        Reviewed by Michael Catanzaro.

        We still have a lot of flaky tests since we switched to the threaded compositor. The UI process might
        take the screenshot too early, before everything is actually painted. I can't reproduce the problem, so this is
        actually a speculative fix or workaround. Our implementation of DrawingArea::dispatchAfterEnsuringDrawing() is
        quite simple, we just dispatch the callback in the next run loop iteration, which doesn't really ensures any
        drawing at all. So, we can wait for draw events before dispatching the given callback. Since we don't really
        know if draw events were already processed before dispatchAfterEnsuringDrawing() is called, or if there will be
        more than one damage event in a short time, this patch waits up to 1 second for draw events, and if a draw
        happens it stops if there isn't another draw event in the next 100ms. This should ensure a drawing if it was
        really needed.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::DrawingMonitor):
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::~DrawingMonitor):
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::webViewDrawCallback):
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::start):
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::stop):
        (WebKit::DrawingAreaProxyImpl::DrawingMonitor::didDraw):
        (WebKit::DrawingAreaProxyImpl::dispatchAfterEnsuringDrawing):
        * UIProcess/DrawingAreaProxyImpl.h:

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

        Remove support for ENABLE_LEGACY_WEB_AUDIO
        https://bugs.webkit.org/show_bug.cgi?id=161262

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:
        Remove ENABLE_LEGACY_WEB_AUDIO.

2016-08-26  Anders Carlsson  <andersca@apple.com>

        Get rid of NetworkResourceLoader::sendAbortingOnFailure
        https://bugs.webkit.org/show_bug.cgi?id=161267

        Reviewed by Dan Bernstein.

        NetworkResourceLoader::sendAbortingOnFailure sends an IPC message, and if IPC::Connection::send returns false,
        it will abort the network resource load.

        IPC::Connection::send will only return false if the connection is invalid, and when it becomes invalidated the
        connection client member function "didClose" is invoked. For the network process, this will call abort on all outstanding
        network loads.

        Auditing all the sendAbortingOnFailure call sites, shows that none of them can be called with an invalid connection,
        so replace sendAbortingOnFailure with send.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        This is a NetworkLoadClient function which won't be called if the load has been aborted.

        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        Ditto.

        (WebKit::NetworkResourceLoader::didFinishLoading):
        Ditto. Also, update a call to sendBufferMaybeAborting to sendBuffer.

        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        This is another NetworkLoadClient function.

        (WebKit::NetworkResourceLoader::bufferingTimerFired):
        The buffering timer is stopped when abort() is called.

        (WebKit::NetworkResourceLoader::sendBuffer):
        Rename this from sendBufferMaybeAborting. It has three call sites:
        - didReceiveBuffer and didFinishLoading are both NetworkLoadClient functions.
        - didRetrieveCacheEntry is called from didFinishLoading (a NetworkLoadClient function) and from
          the completion function of retrieveCacheEntry, which has an early return for when the loader has been aborted.

        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        This is called from the retrieveCacheEntry completion function, which has an early return for when the loader has been aborted.

        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
        Ditto.

        (WebKit::NetworkResourceLoader::sendAbortingOnFailure): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:

2016-08-26  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Infinite recursion calling -charValue on a WKNSNumber
        https://bugs.webkit.org/show_bug.cgi?id=161258

        Reviewed by Anders Carlsson.

        * Shared/Cocoa/WKNSNumber.mm:
        (-[WKNSNumber charValue]): Override this…
        (-[WKNSNumber boolValue]): …not this.

2016-08-26  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][GTK] REGRESSION(204877): Fix the clean build
        https://bugs.webkit.org/show_bug.cgi?id=161240

        Reviewed by Carlos Garcia Campos.

        * Scripts/generate-forwarding-headers.pl: Added back multiple include-path support. (removed by r183389)

2016-08-26  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        Unreviewed EFL build fix since r204996.

        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        (WebKit::WebPageProxy::setThemePath):
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::cancelComposition):

2016-08-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r204986 and r204996.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::willSendSyncMessage):
        (IPC::Connection::didReceiveSyncReply):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::drawPagesForPrinting):

2016-08-25  Anders Carlsson  <andersca@apple.com>

        Replace all IPC message send flags with OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=161211

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure):
        * NetworkProcess/NetworkResourceLoader.h:
        * Platform/IPC/Connection.cpp:
        (IPC::WaitForMessageState::WaitForMessageState):
        (IPC::Connection::sendMessage):
        (IPC::Connection::sendSyncReply):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::send):
        (IPC::Connection::sendSync):
        (IPC::Connection::waitForAndDispatchImmediately):
        * Platform/IPC/MessageSender.cpp:
        (IPC::MessageSender::sendMessage):
        * Platform/IPC/MessageSender.h:
        (IPC::MessageSender::send):
        (IPC::MessageSender::sendSync):
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):
        (IPC::Connection::willSendSyncMessage):
        (IPC::Connection::didReceiveSyncReply):
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::setComplexTextInputState):
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * UIProcess/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::send):
        (WebKit::ChildProcessProxy::sendSync):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::getDatabaseProcessConnection):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getPluginProcessConnection):
        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::unapply):
        (WebKit::WebEditCommandProxy::reapply):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::printingSendOptions):
        (WebKit::WebPageProxy::preferencesDidChange):
        (WebKit::WebPageProxy::sendMessage):
        (WebKit::WebPageProxy::beginPrinting):
        (WebKit::WebPageProxy::endPrinting):
        (WebKit::WebPageProxy::computePagesForPrinting):
        (WebKit::WebPageProxy::drawRectToImage):
        (WebKit::WebPageProxy::drawPagesToPDF):
        (WebKit::WebPageProxy::drawPagesForPrinting):
        (WebKit::WebPageProxy::setMinimumLayoutSize): Deleted.
        (WebKit::WebPageProxy::setAutoSizingShouldExpandToViewHeight): Deleted.
        (WebKit::WebPageProxy::handleAlternativeTextUIResult): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateViewState):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateViewState):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::geometryDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::print):
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createWithCoreMainFrame):
        (WebKit::WebFrame::createSubframe):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendPostLayoutEditorStateIfNeeded):
        (WebKit::WebPage::postSynchronousMessageForTesting):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::flush):

2016-08-25  Anders Carlsson  <andersca@apple.com>

        Remove some more MessageRecorder gunk
        https://bugs.webkit.org/show_bug.cgi?id=161209

        Reviewed by Tim Horton.

        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.h:
        * Platform/IPC/Connection.h:
        * Platform/IPC/ProcessType.h: Removed.
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.h:
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebProcess.h:

2016-08-25  Johan K. Jensen  <johan_jensen@apple.com>

        Don't store networkLoadTiming in the disk cache
        https://bugs.webkit.org/show_bug.cgi?id=161161

        Reviewed by Antti Koivisto.

        * NetworkProcess/cache/NetworkCacheStorage.h: Updated version to 10.
        * NetworkProcess/cache/NetworkCacheDecoder.h:
        * NetworkProcess/cache/NetworkCacheEncoder.h:
        * Platform/IPC/Decoder.h:
        * Platform/IPC/Encoder.h:
        Added isIPCDecoder/isIPCEncoder static members.

2016-08-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Threaded Compositor] Several flaky tests due to differences in scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=160450

        Reviewed by Michael Catanzaro.

        The issue is that ThreadedCompositor::didChangeVisibleRect() dispatches the setVisibleContentsRect() call that
        ends up in CompositingCoordinator. Since we're compositing the scrollbars as well, this visible contents rect
        needs to encompass the complete width of the view, but that's not happening.
        In case of non-overlay scrollbars, the scrollbars are clipped from this rect, but that doesn't prevent the
        scrollbar overlay layers to be flushed and rendered. What does happen is that during tile creation in the
        backing store the tiles that would normally intersect the visible rect of the view (if it were spanning over the
        whole actual visible area) are sorted by distance to the visible rect.
        The top of the two tiles used for the scrollbar is closer to the visible rect, so that gets created and filled
        in first. The second tile is stored as pending for creation, and does get rendered at the point of the next
        layer flush.

        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::setVisibleContentsRect): Update the visible rect taking into account
        the non-overlay scrollbars before passing it to the compositor.

2016-08-24  JF Bastien  <jfbastien@apple.com>

        cmake build broken by MessageRecorder removal
        https://bugs.webkit.org/show_bug.cgi?id=161175

        Reviewed by Dean Jackson.

        * PlatformMac.cmake:

2016-08-24  Jonathan Bedard  <jbedard@apple.com>

        FocusController multiple dereferenced NULL pointers
        https://bugs.webkit.org/show_bug.cgi?id=160808

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setInitialFocus): Should use nullptr, not 0 to initialize NULL pointer.

2016-08-23  Anders Carlsson  <andersca@apple.com>

        Add enum traits and use them in the IPC::Decoder
        https://bugs.webkit.org/show_bug.cgi?id=161103

        Reviewed by Sam Weinig.

        * Platform/IPC/Decoder.h:
        * Platform/IPC/Encoder.h:
        Add new encode/decode functions.

        * Shared/mac/ArgumentCodersMac.mm:
        Change NSType to be a strongly typed enum. Use encode/decode
        instead of encodeEnum/decodeEnum since the latter don't have the
        enum check.

2016-08-24  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out r204901, r204897, r204866, r204856, r204854.

        * UIProcess/ViewGestureController.cpp:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:

2016-08-24  Anders Carlsson  <andersca@apple.com>

        In some cases, an IPC::Connection won't know when the other end has gone away
        https://bugs.webkit.org/show_bug.cgi?id=161153
        rdar://problem/27896368

        Reviewed by Dan Bernstein.

        When being asked to invalidate a connection that isn't yet connected, make sure to release
        our send and receive rights so that the other end will get a failure when trying to connect.

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

2016-08-24  Dan Bernstein  <mitz@apple.com>

        Add a convenience function for creating a WKFrameHandleRef from a WKFrameRef without going through WKFrameInfoRef
        https://bugs.webkit.org/show_bug.cgi?id=161152

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCreateFrameHandle): Added. Creates a handle with the frame’s frameID.
        * UIProcess/API/C/WKFrame.h:

2016-08-24  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Can’t "po" WKObject instances
        https://bugs.webkit.org/show_bug.cgi?id=161151

        Reviewed by Anders Carlsson.

        * Shared/Cocoa/WKObject.mm:
        (-[WKObject debugDescription]): Implement and forward to the target or print a generic
          description.

2016-08-24  Brady Eidson  <beidson@apple.com>

        Get timestamps and ids working in WK2 gamepads (and test them!)
        https://bugs.webkit.org/show_bug.cgi?id=161112

        Reviewed by Alex Christensen.

        * Shared/Gamepad/GamepadData.cpp:
        (WebKit::GamepadData::GamepadData):
        (WebKit::GamepadData::encode):
        (WebKit::GamepadData::decode):
        * Shared/Gamepad/GamepadData.h:
        (WebKit::GamepadData::id):
        (WebKit::GamepadData::index): Deleted.
        
        * UIProcess/Gamepad/UIGamepad.cpp:
        (WebKit::UIGamepad::UIGamepad):
        (WebKit::UIGamepad::condensedGamepadData):
        (WebKit::UIGamepad::fullGamepadData): Include the ID for initial WebGamepad creation.
        (WebKit::UIGamepad::gamepadData): Deleted.
        * UIProcess/Gamepad/UIGamepad.h:
        
        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::snapshotGamepads):
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::gamepadConnected):
        (WebKit::WebProcessPool::setInitialConnectedGamepads):
        
        * WebProcess/Gamepad/WebGamepad.cpp:
        (WebKit::WebGamepad::WebGamepad):
        (WebKit::WebGamepad::updateValues):

2016-08-24  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Fix test_ewk2_view
        https://bugs.webkit.org/show_bug.cgi?id=161131

        Reviewed by Gyuyoung Kim.

        ewk_view_title_changed: null is treated as the string "null" after r203487.

        ewk_view_page_contents_get: aligned encoding labels after r204605.

        * UIProcess/API/efl/tests/resources/resultMHTML.mht:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2016-08-23  Simon Fraser  <simon.fraser@apple.com>

        Add some logging for WKSelectionDrawingInfo
        https://bugs.webkit.org/show_bug.cgi?id=161055

        Reviewed by Tim Horton.

        Add a Selection logging channel for WK2, and dump WKSelectionDrawingInfo when it changes.

        * Platform/Logging.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (WebKit::operator<<):
        (-[WKContentView _updateChangedSelection:]):

2016-08-23  Ryosuke Niwa  <rniwa@webkit.org>

        Another CMake build fix attempt after r204852.

        * CMakeLists.txt:

2016-08-22  Filip Pizlo  <fpizlo@apple.com>

        Butterflies should be allocated in Auxiliary MarkedSpace instead of CopiedSpace and we should rewrite as much of the GC as needed to make this not a regression
        https://bugs.webkit.org/show_bug.cgi?id=160125

        Reviewed by Geoffrey Garen.
        
        Just rewiring some #includes.

        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:

2016-08-23  Brady Eidson  <beidson@apple.com>

        WK2 Gamepad layout test support.
        https://bugs.webkit.org/show_bug.cgi?id=134671

        Reviewed by Alex Christensen.
        
        - Teach the UIGamepadProvider to use the default shared provider.
        - Especially if its the MockGamepadProvider, don't overwrite it.

        * Shared/Gamepad/GamepadData.cpp:
        (WebKit::GamepadData::GamepadData):
        (WebKit::GamepadData::encode):
        (WebKit::GamepadData::decode):
        (WebKit::GamepadData::loggingString):
        (WebKit::GamepadData::isNull): Deleted.
        * Shared/Gamepad/GamepadData.h:
        (WebKit::GamepadData::GamepadData):
        (WebKit::GamepadData::isNull):
        (WebKit::GamepadData::index):
        (WebKit::GamepadData::axisValues):
        (WebKit::GamepadData::buttonValues):

        * UIProcess/Gamepad/UIGamepad.h:

        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::UIGamepadProvider):
        (WebKit::UIGamepadProvider::~UIGamepadProvider):
        (WebKit::UIGamepadProvider::platformGamepadInputActivity):
        (WebKit::UIGamepadProvider::startMonitoringGamepads):
        (WebKit::UIGamepadProvider::stopMonitoringGamepads):
        (WebKit::UIGamepadProvider::platformSetDefaultGamepadProvider):
        * UIProcess/Gamepad/UIGamepadProvider.h:

        * UIProcess/Gamepad/mac/UIGamepadProviderHID.cpp:
        (WebKit::UIGamepadProvider::platformSetDefaultGamepadProvider):
        (WebKit::UIGamepadProvider::platformStopMonitoringInput):
        (WebKit::UIGamepadProvider::platformStartMonitoringInput):
        (WebKit::UIGamepadProvider::platformStartMonitoringGamepads): Deleted.
        (WebKit::UIGamepadProvider::platformStopMonitoringGamepads): Deleted.
        (WebKit::UIGamepadProvider::platformGamepads): Deleted.

        * UIProcess/WebPageProxy.h:

        * WebProcess/Gamepad/WebGamepad.cpp:
        (WebKit::WebGamepad::WebGamepad):
        (WebKit::WebGamepad::updateValues):
        * WebProcess/Gamepad/WebGamepad.h:

        * WebProcess/Gamepad/WebGamepadProvider.cpp:
        (WebKit::WebGamepadProvider::gamepadConnected):
        * WebProcess/Gamepad/WebGamepadProvider.h:

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.h:

2016-08-23  Dave Hyatt  <hyatt@apple.com>

        Add pref for enabling new CSS parsing and move parser files into subdirectory.
        https://bugs.webkit.org/show_bug.cgi?id=161095

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetNewCSSParserEnabled):
        (WKPreferencesGetNewCSSParserEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-08-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r204243.

        Caused some layout test failures

        Reverted changeset:

        "Write API test to cover crash fix in r204135"
        https://bugs.webkit.org/show_bug.cgi?id=160587
        http://trac.webkit.org/changeset/204243

2016-08-23  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] URTBF after r204743.

        * Shared/WebBatteryStatus.cpp: Remove Arguments.h.

2016-08-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use Messages::XXX...::Reply explicitly
        https://bugs.webkit.org/show_bug.cgi?id=161075

        Reviewed by Carlos Garcia Campos.

        std::tuple's constructor is annotated as `explicit`.
        So we cannot use the implicit conversion here.
        This causes the build failure in EFL and GTK.

        Looking through code, the other places use ::Reply explicitly.
        So in this patch, we follow that.

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
        * WebProcess/InjectedBundle/InjectedBundlePageFullScreenClient.cpp:
        (WebKit::InjectedBundlePageFullScreenClient::supportsFullScreen):

2016-08-22  Anders Carlsson  <andersca@apple.com>

        Remove Arguments.h
        https://bugs.webkit.org/show_bug.cgi?id=161060

        Reviewed by Tim Horton.

        * Platform/IPC/Arguments.h: Removed.
        (IPC::Arguments::Arguments): Deleted.
        (IPC::Arguments::encode): Deleted.
        (IPC::Arguments::decode): Deleted.
        * Platform/IPC/Connection.h:
        * Platform/IPC/HandleMessage.h:
        * Shared/AssistedNodeInformation.cpp:
        * Shared/Cocoa/DataDetectionResult.mm:
        * Shared/EditorState.cpp:
        * Shared/WebContextMenuItemData.cpp:
        * Shared/WebMouseEvent.cpp:
        * Shared/WebPlatformTouchPoint.cpp:
        * Shared/WebPopupItem.cpp:
        * Shared/WebTouchEvent.cpp:
        * Shared/WebWheelEvent.cpp:
        * Shared/ios/InteractionInformationAtPosition.mm:
        * Shared/ios/WebPlatformTouchPointIOS.cpp:
        * Shared/ios/WebTouchEventIOS.cpp:
        * Shared/mac/WebGestureEvent.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/WebPage/WebPage.cpp:

2016-08-22  Anders Carlsson  <andersca@apple.com>

        Move tuple coding to ArgumentCoders.h
        https://bugs.webkit.org/show_bug.cgi?id=161059

        Reviewed by Tim Horton.

        * Platform/IPC/ArgumentCoders.h:
        (IPC::TupleCoder::encode):
        (IPC::TupleCoder::decode):
        * Platform/IPC/Arguments.h:
        (IPC::TupleCoder::encode): Deleted.
        (IPC::TupleCoder::decode): Deleted.
        * Scripts/webkit/messages.py:
        (forward_declarations_and_headers):

2016-08-22  Anders Carlsson  <andersca@apple.com>

        Simplify the generated message structs
        https://bugs.webkit.org/show_bug.cgi?id=161057

        Reviewed by Geoffrey Garen.

        Use a class template to transform the Reply and Argument tuple types for encoding/decoding
        instead of generating them for each message.

        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessage):
        (IPC::handleMessageDelayed):
        * Scripts/webkit/messages.py:
        (reply_type):
        (message_to_struct_declaration):
        (decode_type): Deleted.

2016-08-19  Anders Carlsson  <andersca@apple.com>

        Remove MessageRecorder
        https://bugs.webkit.org/show_bug.cgi?id=161022

        Reviewed by Tim Horton.

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<uuid_t>::encode): Deleted.
        (IPC::ArgumentCoder<uuid_t>::decode): Deleted.
        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendMessage):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::dispatchSyncMessage): Deleted.
        (IPC::Connection::dispatchMessage): Deleted.
        * Platform/IPC/Connection.h:
        * Platform/IPC/Encoder.cpp:
        (IPC::Encoder::encodeHeader): Deleted.
        * Platform/IPC/MessageRecorder.cpp: Removed.
        (IPC::MessageRecorder::isEnabled): Deleted.
        (IPC::MessageRecorder::recordOutgoingMessage): Deleted.
        (IPC::MessageRecorder::recordIncomingMessage): Deleted.
        (IPC::MessageRecorder::MessageProcessingToken::MessageProcessingToken): Deleted.
        (IPC::MessageRecorder::MessageProcessingToken::~MessageProcessingToken): Deleted.
        * Platform/IPC/MessageRecorder.h: Removed.
        (IPC::MessageRecorder::MessageRecorder): Deleted.
        * Platform/IPC/MessageRecorderProbes.d: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2016-08-22  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build after r204717.

        * PlatformMac.cmake:

2016-08-22  Simon Fraser  <simon.fraser@apple.com>

        <select> menu on iPad causes shifting of hit-testing areas
        https://bugs.webkit.org/show_bug.cgi?id=150079

        Reviewed by Tim Horton.

        -isAssistingNode (aka the poorly named isEditable) is input into WebPageProxy::computeCustomFixedPositionRect(),
        so when it changes we have to update visible rects. We were doing this on focus, but failing
        to do it on blur.

        Added the ability to test by:
        1. Making it possible to initiate an animated scroll in the UI process
        2. Adding callbacks for starting and ending interaction with a form control. Sadly
        the "ending interaction" for <select> popovers on iPad isn't late enough, since we
        have no way currently to know when the dimming view behind the popover animates out,
        so for now the test keeps trying to tap a button.

        Test: fast/forms/ios/ipad/unfocus-inside-fixed-hittest.html

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToPoint:atScale:animated:]):
        (-[WKWebView _scrollToRect:origin:minimumScrollDistance:]):
        (-[WKWebView _scrollByContentOffset:]):
        (-[WKWebView _zoomToFocusRect:selectionRect:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):
        (-[WKWebView didStartFormControlInteraction]):
        (-[WKWebView didEndFormControlInteraction]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setIsEditable:]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
        (-[WKContentView _stopAssistingNode]):

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

        [iOS] <a ping> and <area ping> tests time out
        https://bugs.webkit.org/show_bug.cgi?id=156857

        Reviewed by Simon Fraser.

        Support single tapping on an HTML area element in WebKit2 just as we do in Legacy WebKit.

        WebKit2 commits to clicking a "clickable" DOM node on a single tap only if it has a
        renderer. An HTML area element represents a hyperlink in an image map and does not have
        a renderer.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary): Compute the tap highlight with respect
        to the renderer for the image map associated with the tapped HTML area element (if it has one).
        (WebKit::WebPage::commitPotentialTap): Allow committing a potential tap on an HTML area element.

2016-08-22  Darin Adler  <darin@apple.com>

        Move Objective-C DOM bindings from WebCore to legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=160654

        Reviewed by Alex Christensen.

        * WebProcess/WebCoreSupport/WebEditorClient.h: Updated to use RefPtr.
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::documentFragmentFromDelegate): Ditto.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: Removed unneeded includes
        of Objective-C DOM headers that are now part of legacy WebKit, not WebCore.
        But this file doesn't need to depend on those headers at all.

2016-08-22  Chris Dumez  <cdumez@apple.com>

        [iOS] Wait a few seconds before release network activity assertion after a load
        https://bugs.webkit.org/show_bug.cgi?id=160975
        <rdar://problem/27910964>

        Reviewed by Darin Adler.

        Some apps do several loads one after the other in a non-visible view.
        This causes us to release the background assertion every time a load
        completes and then take one again less than a second after. Every
        time we release the assertion, we send a PrepareToSuspend IPC to the
        WebContent process, which does all the clean up to get ready to
        suspend, only to get a CancelPrepareReadyToSuspend later on because
        the next load has started. To work around this problem, we now wait
        a few seconds before releasing the background activity after a load.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationState):
        (WebKit::NavigationState::releaseNetworkActivityToken):
        (WebKit::NavigationState::didChangeIsLoading):

2016-08-22  Youenn Fablet  <youenn@apple.com>

        [Fetch API] Activate fetch api runtime flag by default
        https://bugs.webkit.org/show_bug.cgi?id=160452

        Reviewed by Alex Christensen.

        * Shared/WebPreferencesDefinitions.h:

2016-08-22  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        [SOUP] Change MessageDecoder with Decoder
        https://bugs.webkit.org/show_bug.cgi?id=161040

        Reviewed by Darin Adler.

        Clean up MessageDecoder in files of Soup.

        * Scripts/webkit/MessageReceiverSuperclass-expected.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        * WebProcess/soup/WebSoupRequestManager.h:

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

        Use Document& instead of Document* when getting cookies
        https://bugs.webkit.org/show_bug.cgi?id=161011

        Reviewed by Darin Adler.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::getCookiesForFrame):
        (WebKit::WebAutomationSessionProxy::deleteCookie):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::cookiesForURL):
        (WebKit::PluginView::setCookiesForURL):
        (WebKit::PluginView::getAuthenticationInfo):

2016-08-20  Gyuyoung Kim  <gyuyoung.kim@navercorp.com>

        Unreviewed EFL build fix since r204668

        r204668 changed MessageDecoder with Decoder though, MessageDecoder remained
        in EFL specific files.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * UIProcess/WebVibrationProxy.h:
        * WebProcess/Battery/WebBatteryManager.h:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::didReceiveCoordinatedLayerTreeHostMessage):
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.h:

2016-08-20  Dan Bernstein  <mitz@apple.com>

        [Mac] Web Content service with a restricted entitlement may load arbitrary dylibs
        https://bugs.webkit.org/show_bug.cgi?id=156668
        <rdar://problem/25429784>

        Reviewed by Sam Weinig.

        * Configurations/WebContentService.xcconfig: Enable library validation when the Web Content
          service is given the XPC domain extension entitlement.

2016-08-20  Javier Fernandez  <jfernandez@igalia.com>

        [GTK] Unreviewed GTK build fix since r204665 and 204668
        https://bugs.webkit.org/show_bug.cgi?id=161020

        * CMakeLists.txt:
        * Platform/IPC/MessageRecorder.cpp:
        (IPC::MessageRecorder::recordOutgoingMessage):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage):
        (IPC::Connection::sendOutgoingMessage):
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::encode):
        (WebKit::SharedMemory::Handle::decode):
        * PlatformGTK.cmake:
        * Scripts/webkit/LegacyMessageReceiver-expected.cpp:
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::DelayedReply):
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::DelayedReply):
        (WebKit::WebPage::didReceiveWebPageMessage):
        (WebKit::WebPage::didReceiveSyncWebPageMessage):
        * Scripts/webkit/LegacyMessages-expected.h:
        * Scripts/webkit/MessageReceiver-expected.cpp:
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::DelayedReply):
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::DelayedReply):
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):
        * Scripts/webkit/Messages-expected.h:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<WebCore::FilterOperations>::encode):
        (IPC::ArgumentCoder<WebCore::FilterOperations>::decode):
        (IPC::ArgumentCoder<TransformOperations>::encode):
        (IPC::ArgumentCoder<TransformOperations>::decode):
        (IPC::encodeTimingFunction):
        (IPC::decodeTimingFunction):
        (IPC::ArgumentCoder<TextureMapperAnimation>::encode):
        (IPC::ArgumentCoder<TextureMapperAnimation>::decode):
        (IPC::ArgumentCoder<TextureMapperAnimations>::encode):
        (IPC::ArgumentCoder<TextureMapperAnimations>::decode):
        (IPC::ArgumentCoder<WebCore::GraphicsSurfaceToken>::encode):
        (IPC::ArgumentCoder<WebCore::GraphicsSurfaceToken>::decode):
        (IPC::ArgumentCoder<SurfaceUpdateInfo>::encode):
        (IPC::ArgumentCoder<SurfaceUpdateInfo>::decode):
        (IPC::ArgumentCoder<CoordinatedGraphicsLayerState>::encode):
        (IPC::ArgumentCoder<CoordinatedGraphicsLayerState>::decode):
        (IPC::ArgumentCoder<TileUpdateInfo>::encode):
        (IPC::ArgumentCoder<TileUpdateInfo>::decode):
        (IPC::ArgumentCoder<TileCreationInfo>::encode):
        (IPC::ArgumentCoder<TileCreationInfo>::decode):
        (IPC::encodeCoordinatedSurface):
        (IPC::decodeCoordinatedSurface):
        (IPC::ArgumentCoder<CoordinatedGraphicsState>::encode):
        (IPC::ArgumentCoder<CoordinatedGraphicsState>::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::Handle::encode):
        (WebKit::WebCoordinatedSurface::Handle::decode):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
        * Shared/WebBatteryStatus.cpp:
        (WebKit::WebBatteryStatus::Data::encode):
        (WebKit::WebBatteryStatus::Data::decode):
        * Shared/WebBatteryStatus.h:
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (IPC::encodeImage):
        (IPC::decodeImage):
        (IPC::encodeDataObject):
        (IPC::decodeDataObject):
        (IPC::ArgumentCoder<DragData>::encode):
        (IPC::ArgumentCoder<DragData>::decode):
        (IPC::encodeGKeyFile):
        (IPC::decodeGKeyFile):
        (IPC::encode):
        (IPC::decode):
        * Shared/gtk/ArgumentCodersGtk.h:
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):
        (IPC::ArgumentCoder<CertificateInfo>::encode):
        (IPC::ArgumentCoder<CertificateInfo>::decode):
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceError>::decodePlatformData):
        (IPC::ArgumentCoder<ProtectionSpace>::encodePlatformData):
        (IPC::ArgumentCoder<ProtectionSpace>::decodePlatformData):
        (IPC::ArgumentCoder<Credential>::encodePlatformData):
        (IPC::ArgumentCoder<Credential>::decodePlatformData):
        * UIProcess/LegacySessionStateCodingNone.cpp:
        (WebKit::encodeLegacySessionState):
        (WebKit::decodeLegacySessionState):
        * UIProcess/WebBatteryManagerProxy.h:

2016-08-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix attempt after r204665 and r204668.

        * PlatformGTK.cmake:

2016-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix attempt after r204665 and r204668.

        * CMakeLists.txt:

2016-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        GTK+ / EFL build fix attempt after r204665.

        * CMakeLists.txt:

2016-08-19  Anders Carlsson  <andersca@apple.com>

        Merge MessageDecoder and ArgumentDecoder into Decoder
        https://bugs.webkit.org/show_bug.cgi?id=161019

        Reviewed by Tim Horton.

        * DatabaseProcess/DatabaseProcess.cpp:
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * NetworkProcess/CustomProtocols/CustomProtocolManager.h:
        * NetworkProcess/Downloads/DownloadID.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * NetworkProcess/NetworkResourceLoader.h:
        * Platform/IPC/ArgumentCoder.h:
        * Platform/IPC/ArgumentCoders.cpp:
        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/ArgumentDecoder.cpp:
        * Platform/IPC/ArgumentDecoder.h:
        * Platform/IPC/Arguments.h:
        * Platform/IPC/Attachment.cpp:
        * Platform/IPC/Attachment.h:
        * Platform/IPC/Connection.cpp:
        * Platform/IPC/Connection.h:
        * Platform/IPC/DataReference.cpp:
        * Platform/IPC/DataReference.h:
        * Platform/IPC/Decoder.cpp: Renamed from Source/WebKit2/Platform/IPC/ArgumentDecoder.cpp.
        * Platform/IPC/Decoder.h: Renamed from Source/WebKit2/Platform/IPC/ArgumentDecoder.h.
        * Platform/IPC/HandleMessage.h:
        * Platform/IPC/MessageDecoder.cpp: Removed.
        * Platform/IPC/MessageDecoder.h: Removed.
        * Platform/IPC/MessageReceiver.h:
        * Platform/IPC/MessageReceiverMap.cpp:
        * Platform/IPC/MessageReceiverMap.h:
        * Platform/IPC/MessageRecorder.cpp:
        * Platform/IPC/MessageRecorder.h:
        * Platform/IPC/StringReference.cpp:
        * Platform/IPC/StringReference.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        * Platform/IPC/mac/MachPort.h:
        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginCreationParameters.cpp:
        * PluginProcess/PluginCreationParameters.h:
        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp:
        * PluginProcess/WebProcessConnection.h:
        * Scripts/webkit/messages.py:
        * Shared/API/APIData.cpp:
        * Shared/API/APIData.h:
        * Shared/API/APIError.cpp:
        * Shared/API/APIError.h:
        * Shared/API/APIFrameHandle.cpp:
        * Shared/API/APIFrameHandle.h:
        * Shared/API/APIGeometry.cpp:
        * Shared/API/APIGeometry.h:
        * Shared/API/APINumber.h:
        * Shared/API/APIPageGroupHandle.cpp:
        * Shared/API/APIPageGroupHandle.h:
        * Shared/API/APIPageHandle.cpp:
        * Shared/API/APIPageHandle.h:
        * Shared/API/APIURL.h:
        * Shared/API/APIURLRequest.cpp:
        * Shared/API/APIURLRequest.h:
        * Shared/API/APIURLResponse.cpp:
        * Shared/API/APIURLResponse.h:
        * Shared/API/Cocoa/RemoteObjectInvocation.h:
        * Shared/API/Cocoa/RemoteObjectInvocation.mm:
        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * Shared/AssistedNodeInformation.cpp:
        * Shared/AssistedNodeInformation.h:
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/ChildProcess.h:
        * Shared/Cocoa/DataDetectionResult.h:
        * Shared/Cocoa/DataDetectionResult.mm:
        * Shared/Cocoa/LoadParametersCocoa.mm:
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        * Shared/ContextMenuContextData.cpp:
        * Shared/ContextMenuContextData.h:
        * Shared/Databases/DatabaseProcessCreationParameters.cpp:
        * Shared/Databases/DatabaseProcessCreationParameters.h:
        * Shared/Databases/IndexedDB/WebIDBResult.cpp:
        * Shared/Databases/IndexedDB/WebIDBResult.h:
        * Shared/EditorState.cpp:
        * Shared/EditorState.h:
        * Shared/FontInfo.cpp:
        * Shared/FontInfo.h:
        * Shared/Gamepad/GamepadData.cpp:
        * Shared/Gamepad/GamepadData.h:
        * Shared/LayerTreeContext.cpp:
        * Shared/LayerTreeContext.h:
        * Shared/LoadParameters.cpp:
        * Shared/LoadParameters.h:
        * Shared/NavigationActionData.cpp:
        * Shared/NavigationActionData.h:
        * Shared/PlatformPopupMenuData.cpp:
        * Shared/PlatformPopupMenuData.h:
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPIdentifierData.h:
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/Plugins/NPRemoteObjectMap.h:
        * Shared/Plugins/NPVariantData.cpp:
        * Shared/Plugins/NPVariantData.h:
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/PrintInfo.cpp:
        * Shared/PrintInfo.h:
        * Shared/SandboxExtension.h:
        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.h:
        * Shared/SessionState.cpp:
        * Shared/SessionState.h:
        * Shared/ShareableBitmap.cpp:
        * Shared/ShareableBitmap.h:
        * Shared/ShareableResource.cpp:
        * Shared/ShareableResource.h:
        * Shared/StatisticsData.cpp:
        * Shared/StatisticsData.h:
        * Shared/UpdateInfo.cpp:
        * Shared/UpdateInfo.h:
        * Shared/UserData.cpp:
        * Shared/UserData.h:
        * Shared/VisibleContentRectUpdateInfo.cpp:
        * Shared/VisibleContentRectUpdateInfo.h:
        * Shared/WebBackForwardListItem.h:
        * Shared/WebCompiledContentExtensionData.cpp:
        * Shared/WebCompiledContentExtensionData.h:
        * Shared/WebConnection.h:
        * Shared/WebContextMenuItemData.cpp:
        * Shared/WebContextMenuItemData.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebEvent.cpp:
        * Shared/WebEvent.h:
        * Shared/WebGeolocationPosition.cpp:
        * Shared/WebGeolocationPosition.h:
        * Shared/WebHitTestResultData.cpp:
        * Shared/WebHitTestResultData.h:
        * Shared/WebKeyboardEvent.cpp:
        * Shared/WebMouseEvent.cpp:
        * Shared/WebNavigationDataStore.h:
        * Shared/WebPageCreationParameters.cpp:
        * Shared/WebPageCreationParameters.h:
        * Shared/WebPageGroupData.cpp:
        * Shared/WebPageGroupData.h:
        * Shared/WebPlatformTouchPoint.cpp:
        * Shared/WebPopupItem.cpp:
        * Shared/WebPopupItem.h:
        * Shared/WebPreferencesStore.cpp:
        * Shared/WebPreferencesStore.h:
        * Shared/WebProcessCreationParameters.cpp:
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebTouchEvent.cpp:
        * Shared/WebUserContentControllerDataTypes.cpp:
        * Shared/WebUserContentControllerDataTypes.h:
        * Shared/WebWheelEvent.cpp:
        * Shared/WebsiteData/WebsiteData.cpp:
        * Shared/WebsiteData/WebsiteData.h:
        * Shared/cf/ArgumentCodersCF.cpp:
        * Shared/cf/ArgumentCodersCF.h:
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        * Shared/ios/QuickLookDocumentData.cpp:
        * Shared/ios/QuickLookDocumentData.h:
        * Shared/ios/WebPlatformTouchPointIOS.cpp:
        * Shared/ios/WebTouchEventIOS.cpp:
        * Shared/mac/ArgumentCodersMac.h:
        * Shared/mac/ArgumentCodersMac.mm:
        * Shared/mac/AttributedString.h:
        * Shared/mac/AttributedString.mm:
        * Shared/mac/ColorSpaceData.h:
        * Shared/mac/ColorSpaceData.mm:
        * Shared/mac/ObjCObjectGraph.h:
        * Shared/mac/ObjCObjectGraph.mm:
        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        * Shared/mac/SandboxExtensionMac.mm:
        * Shared/mac/SecItemRequestData.cpp:
        * Shared/mac/SecItemRequestData.h:
        * Shared/mac/SecItemResponseData.cpp:
        * Shared/mac/SecItemResponseData.h:
        * Shared/mac/SecItemShim.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        * Shared/mac/WebGestureEvent.cpp:
        * Shared/mac/WebGestureEvent.h:
        * Shared/mac/WebHitTestResultData.mm:
        * UIProcess/API/APIHitTestResult.h:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/ChildProcessProxy.cpp:
        * UIProcess/ChildProcessProxy.h:
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/VisitedLinkStore.h:
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebGeolocationManagerProxy.h:
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebResourceLoadStatisticsStore.h:
        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/SecItemShimProxy.h:
        * UIProcess/mac/ViewGestureController.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/Geolocation/WebGeolocationManager.h:
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Notifications/WebNotificationManager.h:
        * WebProcess/Plugins/Plugin.cpp:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        * WebProcess/Storage/StorageAreaMap.h:
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/ViewUpdateDispatcher.h:
        * WebProcess/WebPage/VisitedLinkTableController.h:
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebPlaybackSessionManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.h:

2016-08-19  Anders Carlsson  <andersca@apple.com>

        Update Xcode project.

        * WebKit2.xcodeproj/project.pbxproj:

2016-08-19  Anders Carlsson  <andersca@apple.com>

        Merge MessageEncoder and ArgumentEncoder into Encoder
        https://bugs.webkit.org/show_bug.cgi?id=161016

        Reviewed by Tim Horton.

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::didReceiveSyncMessage):
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * NetworkProcess/Downloads/DownloadID.h:
        (IPC::ArgumentCoder<WebKit::DownloadID>::encode):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode):
        * NetworkProcess/NetworkResourceLoadParameters.h:
        * Platform/IPC/ArgumentCoder.h:
        (IPC::ArgumentCoder::encode):
        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<std::chrono::system_clock::time_point>::encode):
        (IPC::ArgumentCoder<AtomicString>::encode):
        (IPC::ArgumentCoder<CString>::encode):
        (IPC::ArgumentCoder<String>::encode):
        (IPC::ArgumentCoder<uuid_t>::encode):
        * Platform/IPC/ArgumentCoders.h:
        (IPC::SimpleArgumentCoder::encode):
        (IPC::ArgumentCoder<OptionSet<T>>::encode):
        (IPC::ArgumentCoder<WTF::Optional<T>>::encode):
        * Platform/IPC/ArgumentEncoder.cpp:
        (IPC::allocBuffer): Deleted.
        (IPC::freeBuffer): Deleted.
        (IPC::ArgumentEncoder::ArgumentEncoder): Deleted.
        (IPC::ArgumentEncoder::~ArgumentEncoder): Deleted.
        (IPC::roundUpToAlignment): Deleted.
        (IPC::ArgumentEncoder::reserve): Deleted.
        (IPC::ArgumentEncoder::grow): Deleted.
        (IPC::ArgumentEncoder::encodeFixedLengthData): Deleted.
        (IPC::ArgumentEncoder::encodeVariableLengthByteArray): Deleted.
        (IPC::copyValueToBuffer): Deleted.
        (IPC::ArgumentEncoder::encode): Deleted.
        (IPC::ArgumentEncoder::addAttachment): Deleted.
        (IPC::ArgumentEncoder::releaseAttachments): Deleted.
        * Platform/IPC/ArgumentEncoder.h:
        (IPC::ArgumentEncoder::encodeEnum): Deleted.
        (IPC::ArgumentEncoder::encode): Deleted.
        (IPC::ArgumentEncoder::operator<<): Deleted.
        (IPC::ArgumentEncoder::buffer): Deleted.
        (IPC::ArgumentEncoder::bufferSize): Deleted.
        * Platform/IPC/Arguments.h:
        (IPC::TupleCoder::encode):
        (IPC::Arguments::encode):
        * Platform/IPC/Attachment.cpp:
        (IPC::Attachment::encode):
        * Platform/IPC/Attachment.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::createSyncMessageEncoder):
        (IPC::Connection::sendMessage):
        (IPC::Connection::sendSyncReply):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::sendOutgoingMessages):
        (IPC::Connection::dispatchSyncMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::send):
        (IPC::Connection::sendSync):
        * Platform/IPC/DataReference.cpp:
        (IPC::DataReference::encode):
        (IPC::SharedBufferDataReference::encode):
        * Platform/IPC/DataReference.h:
        * Platform/IPC/Encoder.cpp: Renamed from Source/WebKit2/Platform/IPC/ArgumentEncoder.cpp.
        (IPC::allocBuffer):
        (IPC::freeBuffer):
        (IPC::Encoder::Encoder):
        (IPC::Encoder::~Encoder):
        (IPC::Encoder::isSyncMessage):
        (IPC::Encoder::shouldDispatchMessageWhenWaitingForSyncReply):
        (IPC::Encoder::setIsSyncMessage):
        (IPC::Encoder::setShouldDispatchMessageWhenWaitingForSyncReply):
        (IPC::Encoder::setFullySynchronousModeForTesting):
        (IPC::Encoder::wrapForTesting):
        (IPC::roundUpToAlignment):
        (IPC::Encoder::reserve):
        (IPC::Encoder::encodeHeader):
        (IPC::Encoder::grow):
        (IPC::Encoder::encodeFixedLengthData):
        (IPC::Encoder::encodeVariableLengthByteArray):
        (IPC::copyValueToBuffer):
        (IPC::Encoder::encode):
        (IPC::Encoder::addAttachment):
        (IPC::Encoder::releaseAttachments):
        * Platform/IPC/Encoder.h: Renamed from Source/WebKit2/Platform/IPC/ArgumentEncoder.h.
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessage):
        (IPC::handleMessageDelayed):
        * Platform/IPC/MessageEncoder.cpp: Removed.
        (IPC::MessageEncoder::MessageEncoder): Deleted.
        (IPC::MessageEncoder::~MessageEncoder): Deleted.
        (IPC::MessageEncoder::encodeHeader): Deleted.
        (IPC::MessageEncoder::isSyncMessage): Deleted.
        (IPC::MessageEncoder::shouldDispatchMessageWhenWaitingForSyncReply): Deleted.
        (IPC::MessageEncoder::setIsSyncMessage): Deleted.
        (IPC::MessageEncoder::setShouldDispatchMessageWhenWaitingForSyncReply): Deleted.
        (IPC::MessageEncoder::setFullySynchronousModeForTesting): Deleted.
        (IPC::MessageEncoder::wrapForTesting): Deleted.
        * Platform/IPC/MessageEncoder.h: Removed.
        (IPC::MessageEncoder::messageReceiverName): Deleted.
        (IPC::MessageEncoder::messageName): Deleted.
        (IPC::MessageEncoder::destinationID): Deleted.
        (IPC::MessageEncoder::UUID): Deleted.
        * Platform/IPC/MessageReceiver.h:
        (IPC::MessageReceiver::didReceiveSyncMessage):
        * Platform/IPC/MessageReceiverMap.cpp:
        (IPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/IPC/MessageReceiverMap.h:
        * Platform/IPC/MessageRecorder.h:
        * Platform/IPC/MessageSender.cpp:
        (IPC::MessageSender::sendMessage):
        * Platform/IPC/MessageSender.h:
        (IPC::MessageSender::send):
        * Platform/IPC/StringReference.cpp:
        (IPC::StringReference::encode):
        * Platform/IPC/StringReference.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):
        (IPC::Connection::sendOutgoingMessage):
        * Platform/IPC/mac/MachPort.h:
        (IPC::MachPort::encode):
        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::encode):
        * PluginProcess/PluginCreationParameters.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * PluginProcess/WebProcessConnection.h:
        * Scripts/webkit/messages.py:
        (message_to_struct_declaration):
        (forward_declarations_and_headers):
        (generate_message_handler):
        (headers_for_type): Deleted.
        * Shared/API/APIData.cpp:
        (API::Data::encode):
        * Shared/API/APIData.h:
        * Shared/API/APIError.cpp:
        (API::Error::encode):
        * Shared/API/APIError.h:
        * Shared/API/APIFrameHandle.cpp:
        (API::FrameHandle::encode):
        * Shared/API/APIFrameHandle.h:
        * Shared/API/APIGeometry.cpp:
        (API::Point::encode):
        (API::Size::encode):
        (API::Rect::encode):
        * Shared/API/APIGeometry.h:
        * Shared/API/APINumber.h:
        (API::Number::encode):
        * Shared/API/APIPageGroupHandle.cpp:
        (API::PageGroupHandle::encode):
        * Shared/API/APIPageGroupHandle.h:
        * Shared/API/APIPageHandle.cpp:
        (API::PageHandle::encode):
        * Shared/API/APIPageHandle.h:
        * Shared/API/APIURL.h:
        (API::URL::encode):
        * Shared/API/APIURLRequest.cpp:
        (API::URLRequest::encode):
        * Shared/API/APIURLRequest.h:
        * Shared/API/APIURLResponse.cpp:
        (API::URLResponse::encode):
        * Shared/API/APIURLResponse.h:
        * Shared/API/Cocoa/RemoteObjectInvocation.h:
        * Shared/API/Cocoa/RemoteObjectInvocation.mm:
        (WebKit::RemoteObjectInvocation::encode):
        * Shared/AssistedNodeInformation.cpp:
        (WebKit::OptionItem::encode):
        (WebKit::AssistedNodeInformation::encode):
        * Shared/AssistedNodeInformation.h:
        * Shared/Cocoa/DataDetectionResult.h:
        * Shared/Cocoa/DataDetectionResult.mm:
        (WebKit::DataDetectionResult::encode):
        * Shared/Cocoa/LoadParametersCocoa.mm:
        (WebKit::LoadParameters::platformEncode):
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::Payment>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentContact>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentMerchantSession>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentMethod>::encode):
        (IPC::ArgumentCoder<PaymentRequest>::encode):
        (IPC::ArgumentCoder<PaymentRequest::ContactFields>::encode):
        (IPC::ArgumentCoder<PaymentRequest::LineItem>::encode):
        (IPC::ArgumentCoder<PaymentRequest::MerchantCapabilities>::encode):
        (IPC::ArgumentCoder<PaymentRequest::ShippingMethod>::encode):
        (IPC::ArgumentCoder<PaymentRequest::TotalAndLineItems>::encode):
        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::encode):
        * Shared/ContextMenuContextData.h:
        * Shared/Databases/DatabaseProcessCreationParameters.cpp:
        (WebKit::DatabaseProcessCreationParameters::encode):
        * Shared/Databases/DatabaseProcessCreationParameters.h:
        * Shared/Databases/IndexedDB/WebIDBResult.cpp:
        (WebKit::WebIDBResult::encode):
        * Shared/Databases/IndexedDB/WebIDBResult.h:
        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::PostLayoutData::encode):
        * Shared/EditorState.h:
        * Shared/FontInfo.cpp:
        (WebKit::FontInfo::encode):
        * Shared/FontInfo.h:
        * Shared/Gamepad/GamepadData.cpp:
        (WebKit::GamepadData::encode):
        * Shared/Gamepad/GamepadData.h:
        * Shared/LayerTreeContext.cpp:
        (WebKit::LayerTreeContext::encode):
        * Shared/LayerTreeContext.h:
        * Shared/LoadParameters.cpp:
        (WebKit::LoadParameters::encode):
        (WebKit::LoadParameters::platformEncode):
        * Shared/LoadParameters.h:
        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode):
        * Shared/NavigationActionData.h:
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        * Shared/PlatformPopupMenuData.h:
        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::encode):
        * Shared/Plugins/NPIdentifierData.h:
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::didReceiveSyncMessage):
        * Shared/Plugins/NPRemoteObjectMap.h:
        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::encode):
        * Shared/Plugins/NPVariantData.h:
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode):
        * Shared/PrintInfo.h:
        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::Handle::encode):
        (WebKit::SandboxExtension::HandleArray::encode):
        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateOverflowScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFixedNode>::encode):
        (ArgumentCoder<ScrollingStateStickyNode>::encode):
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::encode):
        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.h:
        * Shared/SessionState.cpp:
        (WebKit::HTTPBody::Element::encode):
        (WebKit::HTTPBody::encode):
        (WebKit::FrameState::encode):
        (WebKit::PageState::encode):
        (WebKit::BackForwardListItemState::encode):
        (WebKit::BackForwardListState::encode):
        * Shared/SessionState.h:
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::encode):
        * Shared/ShareableBitmap.h:
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::Handle::encode):
        * Shared/ShareableResource.h:
        * Shared/StatisticsData.cpp:
        (WebKit::StatisticsData::encode):
        * Shared/StatisticsData.h:
        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode):
        * Shared/UpdateInfo.h:
        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        * Shared/UserData.h:
        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        * Shared/VisibleContentRectUpdateInfo.h:
        * Shared/WebBackForwardListItem.h:
        * Shared/WebCompiledContentExtensionData.cpp:
        (WebKit::WebCompiledContentExtensionData::encode):
        * Shared/WebCompiledContentExtensionData.h:
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::encode):
        * Shared/WebContextMenuItemData.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<AffineTransform>::encode):
        (IPC::ArgumentCoder<EventTrackingRegions>::encode):
        (IPC::ArgumentCoder<TransformationMatrix>::encode):
        (IPC::ArgumentCoder<LinearTimingFunction>::encode):
        (IPC::ArgumentCoder<CubicBezierTimingFunction>::encode):
        (IPC::ArgumentCoder<StepsTimingFunction>::encode):
        (IPC::ArgumentCoder<SpringTimingFunction>::encode):
        (IPC::ArgumentCoder<FloatPoint>::encode):
        (IPC::ArgumentCoder<FloatPoint3D>::encode):
        (IPC::ArgumentCoder<FloatRect>::encode):
        (IPC::ArgumentCoder<FloatSize>::encode):
        (IPC::ArgumentCoder<FloatRoundedRect>::encode):
        (IPC::ArgumentCoder<FloatQuad>::encode):
        (IPC::ArgumentCoder<ViewportArguments>::encode):
        (IPC::ArgumentCoder<IntPoint>::encode):
        (IPC::ArgumentCoder<IntRect>::encode):
        (IPC::ArgumentCoder<IntSize>::encode):
        (IPC::pathEncodeApplierFunction):
        (IPC::ArgumentCoder<Path>::encode):
        (IPC::ArgumentCoder<RecentSearch>::encode):
        (IPC::ArgumentCoder<Region::Span>::encode):
        (IPC::ArgumentCoder<Region>::encode):
        (IPC::ArgumentCoder<Length>::encode):
        (IPC::ArgumentCoder<ViewportAttributes>::encode):
        (IPC::ArgumentCoder<MimeClassInfo>::encode):
        (IPC::ArgumentCoder<PluginInfo>::encode):
        (IPC::ArgumentCoder<AuthenticationChallenge>::encode):
        (IPC::ArgumentCoder<ProtectionSpace>::encode):
        (IPC::ArgumentCoder<Credential>::encode):
        (IPC::encodeImage):
        (IPC::encodeOptionalImage):
        (IPC::ArgumentCoder<Cursor>::encode):
        (IPC::ArgumentCoder<ResourceRequest>::encode):
        (IPC::ArgumentCoder<ResourceError>::encode):
        (IPC::ArgumentCoder<SelectionRect>::encode):
        (IPC::ArgumentCoder<WindowFeatures>::encode):
        (IPC::ArgumentCoder<Color>::encode):
        (IPC::ArgumentCoder<CompositionUnderline>::encode):
        (IPC::ArgumentCoder<Cookie>::encode):
        (IPC::ArgumentCoder<DatabaseDetails>::encode):
        (IPC::ArgumentCoder<Highlight>::encode):
        (IPC::encodeSharedBuffer):
        (IPC::ArgumentCoder<PasteboardWebContent>::encode):
        (IPC::ArgumentCoder<PasteboardImage>::encode):
        (IPC::ArgumentCoder<DictationAlternative>::encode):
        (IPC::ArgumentCoder<FileChooserSettings>::encode):
        (IPC::ArgumentCoder<GrammarDetail>::encode):
        (IPC::ArgumentCoder<TextCheckingRequestData>::encode):
        (IPC::ArgumentCoder<TextCheckingResult>::encode):
        (IPC::ArgumentCoder<URL>::encode):
        (IPC::ArgumentCoder<UserStyleSheet>::encode):
        (IPC::ArgumentCoder<MediaSessionMetadata>::encode):
        (IPC::ArgumentCoder<UserScript>::encode):
        (IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
        (IPC::ArgumentCoder<FixedPositionViewportConstraints>::encode):
        (IPC::ArgumentCoder<StickyPositionViewportConstraints>::encode):
        (IPC::ArgumentCoder<FilterOperation>::encode):
        (IPC::ArgumentCoder<FilterOperations>::encode):
        (IPC::ArgumentCoder<SessionID>::encode):
        (IPC::ArgumentCoder<BlobPart>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encode):
        (IPC::ArgumentCoder<DictionaryPopupInfo>::encode):
        (IPC::ArgumentCoder<ExceptionDetails>::encode):
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::encode):
        * Shared/WebEvent.h:
        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::Data::encode):
        * Shared/WebGeolocationPosition.h:
        * Shared/WebHitTestResultData.cpp:
        (WebKit::WebHitTestResultData::encode):
        (WebKit::WebHitTestResultData::platformEncode):
        * Shared/WebHitTestResultData.h:
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::encode):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::encode):
        * Shared/WebNavigationDataStore.h:
        (WebKit::WebNavigationDataStore::encode):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        * Shared/WebPageCreationParameters.h:
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        * Shared/WebPageGroupData.h:
        * Shared/WebPlatformTouchPoint.cpp:
        (WebKit::WebPlatformTouchPoint::encode):
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::encode):
        * Shared/WebPopupItem.h:
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::Value::encode):
        (WebKit::WebPreferencesStore::encode):
        * Shared/WebPreferencesStore.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::encode):
        * Shared/WebUserContentControllerDataTypes.cpp:
        (WebKit::WebUserScriptData::encode):
        (WebKit::WebUserStyleSheetData::encode):
        (WebKit::WebScriptMessageHandlerData::encode):
        * Shared/WebUserContentControllerDataTypes.h:
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::encode):
        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::Entry::encode):
        (WebKit::WebsiteData::encode):
        * Shared/WebsiteData/WebsiteData.h:
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode):
        * Shared/cf/ArgumentCodersCF.h:
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode):
        * Shared/ios/QuickLookDocumentData.cpp:
        (WebKit::QuickLookDocumentData::encode):
        * Shared/ios/QuickLookDocumentData.h:
        * Shared/ios/WebPlatformTouchPointIOS.cpp:
        (WebKit::WebPlatformTouchPoint::encode):
        * Shared/ios/WebTouchEventIOS.cpp:
        (WebKit::WebTouchEvent::encode):
        * Shared/mac/ArgumentCodersMac.h:
        * Shared/mac/ArgumentCodersMac.mm:
        (IPC::encode):
        * Shared/mac/AttributedString.h:
        * Shared/mac/AttributedString.mm:
        (WebKit::AttributedString::encode):
        * Shared/mac/ColorSpaceData.h:
        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::encode):
        * Shared/mac/ObjCObjectGraph.h:
        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::ObjCObjectGraph::encode):
        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::encode):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::encode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::Handle::encode):
        (WebKit::SandboxExtension::HandleArray::encode):
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::encode):
        * Shared/mac/SecItemRequestData.h:
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::encode):
        * Shared/mac/SecItemResponseData.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<CertificateInfo>::encode):
        (IPC::encodeNSError):
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        (IPC::ArgumentCoder<ProtectionSpace>::encodePlatformData):
        (IPC::ArgumentCoder<Credential>::encodePlatformData):
        (IPC::ArgumentCoder<MachSendRight>::encode):
        (IPC::ArgumentCoder<KeypressCommand>::encode):
        (IPC::ArgumentCoder<ContentFilterUnblockHandler>::encode):
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encodePlatformData):
        * Shared/mac/WebGestureEvent.cpp:
        (WebKit::WebGestureEvent::encode):
        * Shared/mac/WebGestureEvent.h:
        * Shared/mac/WebHitTestResultData.mm:
        (WebKit::WebHitTestResultData::platformEncode):
        * UIProcess/API/APIHitTestResult.h:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::dispatchSyncMessage):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * UIProcess/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::send):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveSyncMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Notifications/WebNotification.cpp:
        * UIProcess/Notifications/WebNotification.h:
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sendMessage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::dispatchSyncMessage):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::encode):
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveSyncMessage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::KeyframeValue::encode):
        (WebKit::PlatformCAAnimationRemote::Properties::encode):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::create):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::BackingStoreFlusher):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage):
        * WebProcess/WebProcess.h:

2016-08-16  Simon Fraser  <simon.fraser@apple.com>

        Rename didLayout(LayoutMilestones) to didReachLayoutMilestone(), and related WK2 functions
        https://bugs.webkit.org/show_bug.cgi?id=160923

        Reviewed by Tim Horton.

        didLayout(LayoutMilestones) -> didReachLayoutMilestone(LayoutMilestones)
        dispatchDidLayout(LayoutMilestones) -> dispatchDidReachLayoutMilestone(LayoutMilestones)

        Avoided changing functions that are exposed as API/SPI.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didReachLayoutMilestone):
        (API::LoaderClient::didLayout): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didLayoutForCustomContentProvider):
        (WebKit::WebPageProxy::didReachLayoutMilestone):
        (WebKit::WebPageProxy::didLayout): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didReachLayoutMilestone):
        (setUpPageLoaderClient):
        (didLayout): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didReachLayoutMilestone):
        (WebKit::InjectedBundlePageLoaderClient::didLayout): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReachLayoutMilestone):
        (WebKit::WebFrameLoaderClient::dispatchDidLayout): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::dispatchDidReachLayoutMilestone):
        (WebKit::DrawingArea::dispatchDidLayout): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dispatchDidReachLayoutMilestone):
        (WebKit::WebPage::dispatchDidLayout): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::dispatchDidReachLayoutMilestone):
        (WebKit::RemoteLayerTreeDrawingArea::dispatchDidLayout): Deleted.

2016-08-18  Daniel Bates  <dabates@apple.com>

        Ld warns of non-existent PrivateFrameworks directory when building WebKit with the public iOS 9.3 SDK
        https://bugs.webkit.org/show_bug.cgi?id=160979

        Rubber-stamped by Simon Fraser.

        Only add the SDK PrivateFrameworks directory to the FRAMEWORK_SEARCH_PATH when building for
        iOS Simulator, building with an iOS SDK that does not support text-based stubs, or building
        an Apple-internal build.

        * Configurations/BaseTarget.xcconfig:

2016-08-18  Hunseop Jeong  <hs85.jeong@samsung.com>

        Unreviewed, Fix CMake build after r204614

        * PlatformMac.cmake:

2016-08-18  Chris Dumez  <cdumez@apple.com>

        [iOS] Network Processes & Database processes do not exit promptly
        https://bugs.webkit.org/show_bug.cgi?id=160978
        <rdar://problem/27914081>

        Reviewed by Anders Carlsson.

        Network Processes & Database processes do not exit promptly. They hang
        for 10 seconds until they log the following message:
        > com.apple.WebKit.Networking: (WebKit) #WK: Exiting process early due to unacknowledged closed-connection

        Then forcefully call exit(0).

        To address the issue, we now call ChildProcess::stopRunLoop() instead
        of RunLoop::current().stop(). stopRunLoop() works as expected on iOS
        after r202723.

        There is no impact on Mac because stopRunLoop() calls
        RunLoop::current().stop().

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::didClose):
        (WebKit::DatabaseProcess::didReceiveInvalidMessage):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::didReceiveInvalidMessage):

2016-08-18  Dan Bernstein  <mitz@apple.com>

        [Cocoa] API::Number needs to be wrapped by an NSNumber
        https://bugs.webkit.org/show_bug.cgi?id=160977
        <rdar://problem/27877735>

        Reviewed by Anders Carlsson.

        We introduce a single WKNSNumber class to wrap three distinct API::Number instantiations
        corresponding to the Boolean, UInt64 and Double types.

        Test: TestWebKitAPI/Tests/WebKit2Cocoa/WKNSNumber.mm

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject): Create a WKNSNumber to contain any of the number types, and set
          its _type ivar accordingly.
        * Shared/Cocoa/WKNSNumber.h: Added.
        (WebKit::wrapper):
        * Shared/Cocoa/WKNSNumber.mm: Added.
        (-[WKNSNumber dealloc]): Call the appropriate destructor.
        (-[WKNSNumber objCType]): Implement this NSValue primitive method.
        (-[WKNSNumber getValue:]): Ditto.
        (-[WKNSNumber boolValue]): Implement this NSNumber method corresponding to one of our
          possible types.
        (-[WKNSNumber doubleValue]): Ditto.
        (-[WKNSNumber unsignedLongLongValue]): Ditto.
        (-[WKNSNumber copyWithZone:]): Implement this NSCopying method by retaining self.
        (-[WKNSNumber _apiObject]): Implement this WKObject method by returning the appropriate
          API object.

        * WebKit2.xcodeproj/project.pbxproj: Added references to new files.

2016-08-18  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to WKProcessPool for enabling cookie storage partitioning
        https://bugs.webkit.org/show_bug.cgi?id=160964

        Reviewed by Anders Carlsson.

        Followed the guidelines for SPI naming.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _isCookieStoragePartitioningEnabled]): Renamed from -cookieStoragePartitioningEnabled.
        (-[WKProcessPool _setCookieStoragePartitioningEnabled:]): Renamed from -setCookieStoragePartitioningEnabled:.
        (-[WKProcessPool cookieStoragePartitioningEnabled]): Renamed to -_isCookieStoragePartitioningEnabled.
        (-[WKProcessPool setCookieStoragePartitioningEnabled:]): Renamed to -_setCookieStoragePartitioningEnabled:.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

2016-08-18  Andy Estes  <aestes@apple.com>

        Generated messages headers should use #pragma once
        https://bugs.webkit.org/show_bug.cgi?id=160965

        Reviewed by Anders Carlsson.

        * Scripts/webkit/messages.py:
        (generate_messages_header): Used #pragma once instead of a header guard.

2016-08-18  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to WKProcessPool for enabling cookie storage partitioning
        https://bugs.webkit.org/show_bug.cgi?id=160964

        Reviewed by Brent Fulgham.

        * NetworkProcess/NetworkProcess.h: Declared setCookieStoragePartitioningEnabled().
        * NetworkProcess/NetworkProcess.messages.in: Added message SetCookieStoragePartitioningEnabled.
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode): Encoded cookieStoragePartitioningEnabled.
        (WebKit::NetworkProcessCreationParameters::decode): Decoded cookieStoragePartitioningEnabled.
        * NetworkProcess/NetworkProcessCreationParameters.h: Declared cookieStoragePartitioningEnabled.
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        Called NetworkStorageSession::setCookieStoragePartitioningEnabled() given the cookieStoragePartitioningEnabled parameter.
        (WebKit::NetworkProcess::setCookieStoragePartitioningEnabled):
        Called NetworkStorageSession::setCookieStoragePartitioningEnabled().
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool cookieStoragePartitioningEnabled]): Returned WebProcessPool::cookieStoragePartitioningEnabled().
        (-[WKProcessPool setCookieStoragePartitioningEnabled:]): Called WebProcessPool::setCookieStoragePartitioningEnabled().
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Declared cookieStoragePartitioningEnabled as a property.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        Set the cookieStoragePartitioningEnabled parameter from m_cookieStoragePartitioningEnabled.
        (WebKit::WebProcessPool::setCookieStoragePartitioningEnabled):
        Set m_cookieStoragePartitioningEnabled and sent the NetworkProcess::SetCookieStoragePartitioningEnabled message.
        * UIProcess/WebProcessPool.h: Declared cookieStoragePartitioningEnabled.

2016-08-17  Anders Carlsson  <andersca@apple.com>

        Add support for additional networks
        https://bugs.webkit.org/show_bug.cgi?id=160951
        rdar://problem/27807479

        Reviewed by Sam Weinig.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<PaymentRequest>::decode):
        (IPC::ArgumentCoder<PaymentRequest::SupportedNetworks>::encode): Deleted.
        (IPC::ArgumentCoder<PaymentRequest::SupportedNetworks>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toAdditionalSupportedNetwork):
        (WebKit::toSupportedNetwork):
        (WebKit::toSupportedNetworks):
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::supportsVersion):

2016-08-17  Anders Carlsson  <andersca@apple.com>

        Remove a couple of unused WKSI function pointers
        https://bugs.webkit.org/show_bug.cgi?id=160946

        Reviewed by Dan Bernstein.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.

2016-08-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] -[NSString isEqualToString:] returns NO for any WKNSString argument
        https://bugs.webkit.org/show_bug.cgi?id=160938
        <rdar://problem/27876652>

        Reviewed by Anders Carlsson.

        -[NSString isEqualToString:] calls an internal NSObject method on its argument, which
        NSString subclasses override to return YES, but WKObject does not override and does not
        forward to its target NSString.

        To fix this issue and other similar issues, we make WKObject a root class instead of an
        NSObject subclass.

        Test: TestWebKitAPI/Tests/WebKit2Cocoa/WKObject.mm

        * Platform/spi/Cocoa/objcSPI.h: Added.

        * Shared/Cocoa/WKObject.h: Make WKObject a root class instead of inhereting from NSObject.

        * Shared/Cocoa/WKObject.mm:
        (+[WKObject class]): Return self.
        (-[WKObject allowsWeakReference]): Added. Called by the Objective-C runtime.
        (-[WKObject retainWeakReference]): Ditto.
        (-[WKObject hash]): If we don’t have a target, return our address.
        (-[WKObject superclass]): Implement this NSObject protocol method.
        (-[WKObject class]): Ditto.
        (-[WKObject self]): Ditto.
        (-[WKObject performSelector:]): Ditto.
        (-[WKObject performSelector:withObject:]): Ditto.
        (-[WKObject performSelector:withObject:withObject:]): Ditto.
        (-[WKObject isProxy]): Ditto.
        (-[WKObject respondsToSelector:]): Changed to not call super.
        (-[WKObject conformsToProtocol:]): Ditto.
        (-[WKObject description]): Ditto.
        (-[WKObject retain]): Implement this NSObject protocol method.
        (-[WKObject release]): Ditto.
        (-[WKObject autorelease]): Ditto.
        (-[WKObject retainCount]): Ditto.
        (-[WKObject zone]): Ditto.
        (-[WKObject dealloc]): Deleted.
        (-[WKObject classForCoder]): Deleted.
        (-[WKObject classForKeyedArchiver]): Deleted.
        (-[WKObject _cfTypeID]): Deleted.

        * WebKit2.xcodeproj/project.pbxproj: Added reference to new file.

2016-08-17  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Fix test_ewk2_view after r203612 
        https://bugs.webkit.org/show_bug.cgi?id=160937

        Reviewed by Gyuyoung Kim.

        Default parameter values for window.alert() / prompt() / confirm() was
        changed from "undefined" to the empty string after r203612.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2016-08-16  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Don't throw touchMove events on the floor
        https://bugs.webkit.org/show_bug.cgi?id=160935

        Reviewed by Tim Horton.
        
        EventDispatcher claimed to coalesce touchMove events, but actually threw away any
        touchMove if there was one in the queue when the next non-move event came along.
        
        Fix to strictly coalesce touchMove events, so a start/move/end stream always fires
        a move event. This is necessary for move-based interaction to work in testing,
        for example the added range slider test.
        
        Test: fast/forms/ios/drag-range-thumb.html

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::touchEvent):

2016-08-16  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Clean up form select code
        https://bugs.webkit.org/show_bug.cgi?id=160915

        Reviewed by Enrica Casucci.
        
        Some minor forms-related cleanup:
        1. Give WKFormSelectPopover and WKFormSelectPicker their own header files, making
        things easier to find.
        
        2. Remove WKContentView *_view member variables from classes which also stored
        the view in their base classes.
        
        Sort the project file.

        * UIProcess/ios/forms/WKFormPopover.h:
        * UIProcess/ios/forms/WKFormPopover.mm:
        (-[WKFormRotatingAccessoryPopover accessoryDone]):
        (-[WKFormRotatingAccessoryPopover initWithView:]): Deleted.
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        * UIProcess/ios/forms/WKFormSelectPicker.h: Copied from Source/WebKit2/UIProcess/ios/forms/WKFormSelectControl.h.
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        * UIProcess/ios/forms/WKFormSelectPopover.h: Copied from Source/WebKit2/UIProcess/ios/forms/WKFormSelectControl.h.
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]):
        * WebKit2.xcodeproj/project.pbxproj:

2016-08-16  Daniel Bates  <dabates@apple.com>

        WKSI static library should be named by major iOS revision, not individual updates
        https://bugs.webkit.org/show_bug.cgi?id=160727
        <rdar://problem/22274848>

        Reviewed by Alexey Proskuryakov.

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

2016-08-16  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to test iOS select elements, and add iPhone and iPad tests for them
        https://bugs.webkit.org/show_bug.cgi?id=160909

        Reviewed by Enrica Casucci.
        
        Hook up form-related UIScriptController functions, and plumb through the various
        <select> pickers the ability to select a row.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView dismissFormAccessoryView]):
        (-[WKWebView selectFormAccessoryPickerRow:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView selectFormAccessoryPickerRow:]):
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (-[WKFormSelectControl selectRow:inComponent:extendingSelection:]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKMultipleSelectPicker selectRow:inComponent:extendingSelection:]):
        (-[WKSelectSinglePicker selectRow:inComponent:extendingSelection:]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover selectRow:inComponent:extendingSelection:]):

2016-08-16  Brady Eidson  <beidson@apple.com>

        Cleanup WK2 platform gamepad handling.
        https://bugs.webkit.org/show_bug.cgi?id=160871

        Reviewed by Alex Christensen.

        This patch does a few things:
        1 - Separates the concepts of "monitoring gamepads" and "monitoring gamepad inputs"
        2 - Uses this new concept to much more cleanly handle the case where we are not currently
            monitoring gamepad inputs because an interested WKWebView is not front and center.
        3 - Pre-populates the "initial set of gamepads" in WebProcesses that start listening for gamepads.
        
        * Platform/Logging.h:
        
        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::gamepadSyncTimerFired):
        (WebKit::UIGamepadProvider::setInitialConnectedGamepads):
        (WebKit::UIGamepadProvider::processPoolStoppedUsingGamepads):
        (WebKit::UIGamepadProvider::viewBecameActive):
        (WebKit::UIGamepadProvider::viewBecameInactive):
        (WebKit::UIGamepadProvider::stopMonitoringGamepads):
        (WebKit::UIGamepadProvider::snapshotGamepads):
        (WebKit::UIGamepadProvider::platformStopMonitoringInput):
        (WebKit::UIGamepadProvider::platformStartMonitoringInput):
        (WebKit::UIGamepadProvider::UIGamepadProvider): Deleted.
        (WebKit::UIGamepadProvider::scheduleDisableGamepadMonitoring): Deleted.
        (WebKit::UIGamepadProvider::disableMonitoringTimerFired): Deleted.
        * UIProcess/Gamepad/UIGamepadProvider.h:
        
        * UIProcess/Gamepad/mac/UIGamepadProviderHID.cpp:
        (WebKit::UIGamepadProvider::platformStopMonitoringInput):
        (WebKit::UIGamepadProvider::platformStartMonitoringInput):
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setInitialConnectedGamepads):
        * UIProcess/WebProcessPool.h:
        
        * WebProcess/Gamepad/WebGamepadProvider.cpp:
        (WebKit::WebGamepadProvider::setInitialGamepads):
        * WebProcess/Gamepad/WebGamepadProvider.h:
        
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setInitialGamepads):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2016-08-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Add iPad viewport and form tests, and revert the iPad-testing part of r202132
        https://bugs.webkit.org/show_bug.cgi?id=160878

        Reviewed by Tim Horton.

        Remove testing-specific "forceIPadStyleZoomOnInputFocus" behavior added in r202132
        now that we have the ability to run tests in the iPad simulator.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView forceIPadStyleZoomOnInputFocus]): Deleted.
        (-[WKWebView setForceIPadStyleZoomOnInputFocus:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView inputAccessoryView]):
        (-[WKContentView requiresAccessoryView:]): Deleted.
        (-[WKContentView forceIPadStyleZoomOnInputFocus]): Deleted.
        (-[WKContentView setForceIPadStyleZoomOnInputFocus:]): Deleted.

2016-08-16  Alex Christensen  <achristensen@webkit.org>

        Clean up WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=160889

        Reviewed by Darin Adler.

        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::didCloseSocketStream):
        (WebKit::WebSocketServerConnection::didReceiveSocketStreamData):
        * UIProcess/InspectorServer/WebSocketServerConnection.h:

2016-08-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r204506.

        Broke the build

        Reverted changeset:

        "Cleanup WK2 platform gamepad handling."
        https://bugs.webkit.org/show_bug.cgi?id=160871
        http://trac.webkit.org/changeset/204506

2016-08-16  Darin Adler  <darin@apple.com>

        [Cocoa] Remove dependency on Objective-C bindings in WebKit2 editing code
        https://bugs.webkit.org/show_bug.cgi?id=160891

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebEditorClient.h: Removed documentFragmentFromAttributedString.
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::documentFragmentFromAttributedString): Deleted.
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::createExcludedElementsForAttributedStringConversion): Deleted.
        (WebKit::WebEditorClient::documentFragmentFromAttributedString): Deleted.

2016-08-16  Brady Eidson  <beidson@apple.com>

        Cleanup WK2 platform gamepad handling.
        https://bugs.webkit.org/show_bug.cgi?id=160871

        Reviewed by Alex Christensen.

        This patch does a few things:
        1 - Separates the concepts of "monitoring gamepads" and "monitoring gamepad inputs"
        2 - Uses this new concept to much more cleanly handle the case where we are not currently
            monitoring gamepad inputs because an interested WKWebView is not front and center.
        3 - Pre-populates the "initial set of gamepads" in WebProcesses that start listening for gamepads.
        
        * Platform/Logging.h:
        
        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::gamepadSyncTimerFired):
        (WebKit::UIGamepadProvider::setInitialConnectedGamepads):
        (WebKit::UIGamepadProvider::processPoolStoppedUsingGamepads):
        (WebKit::UIGamepadProvider::viewBecameActive):
        (WebKit::UIGamepadProvider::viewBecameInactive):
        (WebKit::UIGamepadProvider::stopMonitoringGamepads):
        (WebKit::UIGamepadProvider::snapshotGamepads):
        (WebKit::UIGamepadProvider::platformStopMonitoringInput):
        (WebKit::UIGamepadProvider::platformStartMonitoringInput):
        (WebKit::UIGamepadProvider::UIGamepadProvider): Deleted.
        (WebKit::UIGamepadProvider::scheduleDisableGamepadMonitoring): Deleted.
        (WebKit::UIGamepadProvider::disableMonitoringTimerFired): Deleted.
        * UIProcess/Gamepad/UIGamepadProvider.h:
        
        * UIProcess/Gamepad/mac/UIGamepadProviderHID.cpp:
        (WebKit::UIGamepadProvider::platformStopMonitoringInput):
        (WebKit::UIGamepadProvider::platformStartMonitoringInput):
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setInitialConnectedGamepads):
        * UIProcess/WebProcessPool.h:
        
        * WebProcess/Gamepad/WebGamepadProvider.cpp:
        (WebKit::WebGamepadProvider::setInitialGamepads):
        * WebProcess/Gamepad/WebGamepadProvider.h:
        
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setInitialGamepads):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2016-08-15  Alex Christensen  <achristensen@webkit.org>

        Rename SocketStreamHandleBase to SocketStreamHandle and SocketStreamHandle to SocketStreamHandleImpl
        https://bugs.webkit.org/show_bug.cgi?id=160858

        Reviewed by Brady Eidson.

        * WebProcess/Network/WebSocketProvider.cpp:
        (WebKit::WebSocketProvider::createSocketStreamHandle):

2016-08-15  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

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

2016-08-15  Keith Rollin  <krollin@apple.com>

        Rename LOG_ALWAYS
        https://bugs.webkit.org/show_bug.cgi?id=160768

        Rename LOG_ALWAYS and friends, given that the first parameter to it is
        a boolean expression that determines whether or not logging should be
        performed.

        Reviewed by Chris Dumez.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveResponse):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::cancelPrepareToSuspend):
        (WebKit::NetworkProcess::processDidResume):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForSyncReply):
        * Shared/ChildProcess.cpp:
        (WebKit::didCloseOnConnectionWorkQueue):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::didChangeIsLoading):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertionNow):
        (WebKit::ProcessThrottler::updateAssertion):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityToken):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::WebProcessProxy::didSetAssertionState):
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
        (WebKit::ProcessAssertion::ProcessAssertion):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::layerVolatilityTimerFired):
        (WebKit::WebPage::markLayersVolatile):
        (WebKit::WebPage::cancelMarkLayersVolatile):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::processWillSuspendImminently):
        (WebKit::WebProcess::prepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::markAllLayersVolatile):
        (WebKit::WebProcess::processDidResume):

2016-08-15  Daniel Bates  <dabates@apple.com>

        Cannot build WebKit for iOS device using Xcode 7.3/iOS 9.3 public SDK due to missing
        private frameworks and libraries
        https://bugs.webkit.org/show_bug.cgi?id=155931
        <rdar://problem/25807989>

        Reviewed by Dan Bernstein.

        Add directory WebKitLibraries/WebKitPrivateFrameworkStubs/iOS/X to the framework search path
        where X is the major version of the active iOS SDK.

        * Configurations/BaseTarget.xcconfig:

2016-08-15  Simon Fraser  <simon.fraser@apple.com>

        Add a setting and preferences to enable visual viewport mode
        https://bugs.webkit.org/show_bug.cgi?id=160843

        Reviewed by Sam Weinig.
        
        Hook up the visualViewportEnabled setting for WebKit2.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _visualViewportEnabled]):
        (-[WKPreferences _setVisualViewportEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-08-15  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused includes of wtf headers
        https://bugs.webkit.org/show_bug.cgi?id=160839

        Reviewed by Alex Christensen.

        * Lots of files.

2016-08-12  Anders Carlsson  <andersca@apple.com>

        Move the plug-in and WebGL blacklist code to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=160831

        Reviewed by Sam Weinig.

        Adopt the plug-in and WebGL blacklist code from WebCore instead of using the code from WebKitSystemInterface.

        * Shared/Plugins/Netscape/mac/PluginInformationMac.mm:
        (WebKit::getPlatformPluginModuleInformation):
        * Shared/Plugins/PluginModuleInfo.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextIsPlugInUpdateAvailable):
        (WKContextShouldBlockWebGL):
        (WKContextShouldSuggestBlockWebGL):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::shouldBlockPlugin):
        (WebKit::PluginInfoStore::defaultLoadPolicyForPlugin):
        (WebKit::WKPlugInModuleLoadPolicyToPluginModuleLoadPolicy): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):

2016-08-10  Brent Fulgham  <bfulgham@apple.com>

        Add Sandbox profile for Enterprise support version of Flash Player
        https://bugs.webkit.org/show_bug.cgi?id=160753
        <rdar://problem/17614483>

        Reviewed by Andy Estes.

        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player ESR.plugin.sb: Added.
        * WebKit2.xcodeproj/project.pbxproj: Add reference to new sandbox profile.

2016-08-14  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove deprecated _WKFormDelegate
        https://bugs.webkit.org/show_bug.cgi?id=160848

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WebKitPrivate.h: Removed #import.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _formDelegate]): Moved into WKBinaryCompatibilityIOS10 cateogry implementation,
          chaged type to id <_WKInputDelegate>.
        (-[WKWebView _setFormDelegate:]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Removed property declaration.
        * UIProcess/API/Cocoa/_WKFormDelegate.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj: Removed reference to header.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Fixed comment.

2016-08-14  Daniel Bates  <dabates@apple.com>

        Fix compiler errors when building iOS WebKit using the iOS 10 beta SDK
        https://bugs.webkit.org/show_bug.cgi?id=160725

        Reviewed by Sam Weinig.

        * Platform/spi/ios/UIKitSPI.h: Add SPI for UITextInputSuggestionDelegate.
        * UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm: Remove unnecessary include of PKPaymentMerchantSession.h.

2016-08-14  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove deprecated _WKVisitedLinkProvider declarations that aren’t needed
        https://bugs.webkit.org/show_bug.cgi?id=160846

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _visitedLinkProvider]): Moved into WKBinaryCompatibilityIOS10
          cateogry implementation, changed type to _WKVisitedLinkStore.
        (-[WKWebViewConfiguration _setVisitedLinkProvider:]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Removed property declaration.

        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.h: Removed.
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm: Moved declaration in here.

        * WebKit2.xcodeproj/project.pbxproj: Updated for header removal.

2016-08-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Instances of WKObject subclasses don’t work correctly with CFGetTypeID()
        https://bugs.webkit.org/show_bug.cgi?id=160820
        <rdar://problem/27825875>

        Reviewed by Anders Carlsson.

        * Shared/Cocoa/WKObject.mm:
        (-[WKObject _cfTypeID]): Override this internal method and forward to the target object.

2016-08-12  Johan K. Jensen  <johan_jensen@apple.com>

        Rename DocumentLoadTiming and ResourceLoadTiming
        https://bugs.webkit.org/show_bug.cgi?id=160821

        Reviewed by Alex Christensen.

        Rename ResourceLoadTiming to NetworkLoadTiming.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):

2016-08-12  Anders Carlsson  <andersca@apple.com>

        message loading never finishes in Mail
        https://bugs.webkit.org/show_bug.cgi?id=160806
        rdar://problem/27624095

        Reviewed by Dan Bernstein.

        Add more checks for when a process goes away before we've established a proper connection to it.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::receiveSourceEventHandler):
        Handle the MACH_NOTIFY_NO_SENDERS and MACH_NOTIFY_SEND_ONCE messages here. Also, once we receive a send
        right from the other side, stop listening for the MACH_NOTIFY_NO_SENDERS notification.

        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):
        Null check the connection identifier.

        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::ProcessLauncher):
        (WebKit::processLauncherWorkQueue): Deleted.
        Get rid of the process launcher queue - we're not doing any blocking work here.

        * UIProcess/Launcher/ProcessLauncher.h:
        Add a weak factory.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::systemDirectoryPath):
        Move this before launchProcess().

        (WebKit::ProcessLauncher::launchProcess):
        Merge createService and connectToService into launchProcess. Also make the following changes:
        - Use mach_port_request_notification to get a notification for when our receive right loses all its senders.
        This lets us listen for the other process going away before we have a send right for it.
        - Use xpc_connection_set_event_handler to listen for errors, so we can detect the process going away before
        we've sent a message to it.
        
        (WebKit::connectToService): Deleted.
        (WebKit::createService): Deleted.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        If we failed to launch, call networkProcessCrashedOrFailedToLaunch so we'll unblock any waiting web processes.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        Null check the connection and XPC connection before trying to get its pid.

2016-08-11  Brady Eidson  <beidson@apple.com>

        [WK2] Don't monitor gamepads at all unless an interested WebPageProxy is in the active window.
        https://bugs.webkit.org/show_bug.cgi?id=160760

        Reviewed by Tim Horton.
        
        This patch makes it such that the UIProcess will only listen to the platform gamepad mechanism
        if a WebPageProxy that is interested in gamepads is in the active window.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::windowDidBecomeKey):
        (WebKit::WebViewImpl::windowDidResignKey):

        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::UIGamepadProvider):
        (WebKit::UIGamepadProvider::gamepadSyncTimerFired):
        (WebKit::UIGamepadProvider::scheduleGamepadStateSync):
        (WebKit::UIGamepadProvider::platformGamepadConnected):
        (WebKit::UIGamepadProvider::platformGamepadDisconnected):
        (WebKit::UIGamepadProvider::platformGamepadInputActivity):
        (WebKit::UIGamepadProvider::processPoolStartedUsingGamepads):
        (WebKit::UIGamepadProvider::processPoolStoppedUsingGamepads):
        (WebKit::UIGamepadProvider::viewBecameActive):
        (WebKit::UIGamepadProvider::viewBecameInactive):
        (WebKit::UIGamepadProvider::scheduleDisableGamepadMonitoring):
        (WebKit::UIGamepadProvider::disableMonitoringTimerFired):
        (WebKit::UIGamepadProvider::startMonitoringGamepads):
        (WebKit::UIGamepadProvider::stopMonitoringGamepads):
        (WebKit::UIGamepadProvider::updateTimerFired): Deleted.
        (WebKit::UIGamepadProvider::startOrStopSynchingGamepadState): Deleted.
        * UIProcess/Gamepad/UIGamepadProvider.h:

2016-08-11  Brady Eidson  <beidson@apple.com>

        Make Gamepads be a WK2 ExperimentalFeature.
        https://bugs.webkit.org/show_bug.cgi?id=160788

        Reviewed by Alex Christensen.

        * Shared/WebPreferencesDefinitions.h:

2016-08-11  Alex Christensen  <achristensen@webkit.org>

        Don't use a NetworkingContext when creating SocketStreamHandles
        https://bugs.webkit.org/show_bug.cgi?id=160732

        Reviewed by Brady Eidson.

        * WebProcess/Network/WebSocketProvider.cpp:
        (WebKit::WebSocketProvider::createSocketStreamHandle):
        * WebProcess/Network/WebSocketProvider.h:

2016-08-11  Alex Christensen  <achristensen@webkit.org>

        Use StringBuilder::appendLiteral when possible don't append result of makeString
        https://bugs.webkit.org/show_bug.cgi?id=160772

        Reviewed by Sam Weinig.

        * Shared/Gamepad/GamepadData.cpp:
        (WebKit::GamepadData::isNull):
        (WebKit::GamepadData::loggingString):
        * Shared/Gamepad/GamepadData.h:
        * UIProcess/WebProcessPool.h:

2016-08-10  Alex Christensen  <achristensen@webkit.org>

        Fix crash when changing cookie accept policy after r204327
        https://bugs.webkit.org/show_bug.cgi?id=160758

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):

2016-08-10  Simon Fraser  <simon.fraser@apple.com>

        Sort the feature flags in the FEATURE_DEFINES lines
        https://bugs.webkit.org/show_bug.cgi?id=160742

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2016-08-09  Alex Christensen  <achristensen@webkit.org>

        Move NetworkStorageSession management to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=160173

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::sessionID):
        NetworkSessions no longer own NetworkStorageSessions, but they should still have the same lifetime.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (WebKit::NetworkSession::setSourceApplicationAuditTokenData):
        (WebKit::NetworkSession::create):
        (WebKit::NetworkSession::defaultSession):
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::networkStorageSession):
        (WebKit::NetworkSession::clearCredentials):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::storageSession):
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * Shared/SessionTracker.cpp:
        (WebKit::SessionTracker::networkSession):
        (WebKit::SessionTracker::setSession):
        (WebKit::SessionTracker::destroySession):
        (WebKit::SessionTracker::storageSession): Deleted.
        (WebKit::staticStorageSessionMap): Deleted.
        (WebKit::SessionTracker::sessionID): Deleted.
        (WebKit::SessionTracker::forEachNetworkStorageSession): Deleted.
        * Shared/SessionTracker.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookiesForDOM):
        (WebKit::WebPlatformStrategies::setCookiesFromDOM):
        (WebKit::WebPlatformStrategies::cookiesEnabled):
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebKit::WebPlatformStrategies::getRawCookies):
        (WebKit::WebPlatformStrategies::deleteCookie):
        (WebKit::WebPlatformStrategies::addCookie):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebProcess.cpp:

2016-08-09  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setPluginLoadClientPolicy): Deleted.
        (WebKit::WebProcessPool::clearPluginClientPolicies): Deleted.

2016-08-09  Anders Carlsson  <andersca@apple.com>

        Instantiate WebKit plug-ins at layout time, instead of at style resolution time
        https://bugs.webkit.org/show_bug.cgi?id=160715

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::objectContentType):

2016-08-09  Brady Eidson  <beidson@apple.com>

        [WK2] Only send gamepad input events to the currently focused page.
        https://bugs.webkit.org/show_bug.cgi?id=160699

        Reviewed by Tim Horton.
        
        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::updateTimerFired):
        (WebKit::UIGamepadProvider::platformWebProcessProxyForGamepadInput):
        * UIProcess/Gamepad/UIGamepadProvider.h:
        * UIProcess/Gamepad/mac/UIGamepadProviderMac.mm: Copied from Source/WebKit2/UIProcess/API/mac/WKViewInternal.h.
        (WebKit::UIGamepadProvider::platformWebPageProxyForGamepadInput):
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::gamepadActivity):
        * UIProcess/WebPageProxy.h:
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::gamepadActivity): Deleted.
        * UIProcess/WebProcessPool.h:
        
        * WebKit2.xcodeproj/project.pbxproj:
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::gamepadActivity):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::gamepadActivity): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2016-08-09  Anders Carlsson  <andersca@apple.com>

        Remove code that would tell clients whenever the list of installed plug-ins changes
        https://bugs.webkit.org/show_bug.cgi?id=160719

        Reviewed by Tim Horton.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::PluginInfoStore): Deleted.
        (WebKit::PluginInfoStore::loadPluginsIfNecessary): Deleted.
        * UIProcess/Plugins/PluginInfoStore.h:
        (WebKit::PluginInfoStoreClient::~PluginInfoStoreClient): Deleted.
        (WebKit::PluginInfoStoreClient::PluginInfoStoreClient): Deleted.
        (WebKit::PluginInfoStore::setClient): Deleted.
        (WebKit::PluginInfoStore::client): Deleted.
        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::plugInInformationBecameAvailable): Deleted.
        * UIProcess/WebContextClient.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_hiddenPageThrottlingTimer): Deleted.
        (WebKit::WebProcessPool::pluginInfoStoreDidLoadPlugins): Deleted.
        * UIProcess/WebProcessPool.h:

2016-08-09  George Ruan  <gruan@apple.com>

        Implement functionality of media capture on iOS
        https://bugs.webkit.org/show_bug.cgi?id=158945
        <rdar://problem/26893343>

        Reviewed by Tim Horton.

        For a input type file element on iOS, the media capture attribute can
        now be used to specify which camera to pull up immediately, as opposed
        to having to select the camera from a file picker menu. If the
        specified capture type camera device is unavailable, the other
        built-in camera will be pulled up instead. If no camera is available,
        then the file picker menu will be presented to the user.

        * Configurations/FeatureDefines.xcconfig: Enable Media Capture feature
        on iOS.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FileChooserSettings>::encode): Encode enum
        MediaCaptureType.
        (IPC::ArgumentCoder<FileChooserSettings>::decode): Decode enum
        MediaCaptureType.
        * UIProcess/API/APIOpenPanelParameters.cpp:
        (API::OpenPanelParameters::mediaCaptureType):
        (API::OpenPanelParameters::capture): Deleted.
        * UIProcess/API/APIOpenPanelParameters.h: Capture attribute is now
        represented with MediaCaptureType instead of boolean.
        * UIProcess/API/C/WKOpenPanelParametersRef.cpp:
        (WKOpenPanelParametersGetMediaCaptureType): Change function name to
        better represent function.
        (WKOpenPanelParametersGetCaptureEnabled): Deleted.
        * UIProcess/API/C/WKOpenPanelParametersRef.h:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (cameraDeviceForMediaCaptureType): Translate MediaCaptureType to media
        device.
        (-[WKFileUploadPanel presentWithParameters:resultListener:]):
        Immediately pull up media capture device if devices are available and
        capture attribute is present.
        (-[WKFileUploadPanel _showDocumentPickerMenu]): Only show option to
        use media capture device if it is available for the source type.
        (-[WKFileUploadPanel _adjustMediaCaptureType]): Determines correct
        fallback option for the media capture device.
        (-[WKFileUploadPanel _shouldMediaCaptureOpenMediaDevice]): Checks if
        the media capture device should be immediately pulled up.
        (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]): Specified the
        media capture device to use.

2016-08-09  Brady Eidson  <beidson@apple.com>

        Implement "dumb" WK2 support for gamepads.
        https://bugs.webkit.org/show_bug.cgi?id=160700

        Reviewed by Alex Christensen.
        
        With this patch, gamepads work in WK2.

        Things known to be missing to make this mechanism more "smart":
          - Refresh values along with display sync instead of on a 60hz timer (bug 160673)
          - Only send updated values to the current focused web page (bug 160699)

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:
        
        * Shared/Gamepad/GamepadData.cpp: Copied from Source/WebKit2/UIProcess/Gamepad/mac/UIGamepadProviderHID.cpp.
        (WebKit::GamepadData::encode):
        (WebKit::GamepadData::decode):
        (WebKit::GamepadData::isNull):
        (WebKit::GamepadData::loggingString):
        * Shared/Gamepad/GamepadData.h: Copied from Source/WebKit2/WebProcess/Gamepad/WebGamepad.h.
        
        * UIProcess/Gamepad/UIGamepad.cpp: Copied from Source/WebKit2/UIProcess/Gamepad/mac/UIGamepadProviderHID.cpp.
        (WebKit::UIGamepad::UIGamepad):
        (WebKit::UIGamepad::updateFromPlatformGamepad):
        (WebKit::UIGamepad::gamepadData):
        * UIProcess/Gamepad/UIGamepad.h: Copied from Source/WebKit2/WebProcess/Gamepad/WebGamepad.h.
        (WebKit::UIGamepad::index):
        
        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::UIGamepadProvider):
        (WebKit::UIGamepadProvider::updateTimerFired):
        (WebKit::UIGamepadProvider::startOrStopSynchingGamepadState):
        (WebKit::UIGamepadProvider::platformGamepadConnected):
        (WebKit::UIGamepadProvider::platformGamepadDisconnected):
        (WebKit::UIGamepadProvider::platformGamepadInputActivity):
        (WebKit::UIGamepadProvider::processPoolStartedUsingGamepads):
        (WebKit::UIGamepadProvider::processPoolStoppedUsingGamepads):
        (WebKit::UIGamepadProvider::platformGamepads):
        * UIProcess/Gamepad/UIGamepadProvider.h:
        * UIProcess/Gamepad/mac/UIGamepadProviderHID.cpp:
        (WebKit::UIGamepadProvider::platformGamepads):
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::gamepadConnected):
        (WebKit::WebProcessPool::gamepadDisconnected):
        (WebKit::WebProcessPool::gamepadActivity):
        * UIProcess/WebProcessPool.h:
        
        * WebProcess/Gamepad/WebGamepad.cpp:
        (WebKit::WebGamepad::WebGamepad):
        (WebKit::WebGamepad::axisValues):
        (WebKit::WebGamepad::buttonValues):
        (WebKit::WebGamepad::updateValues):
        * WebProcess/Gamepad/WebGamepad.h:
        
        * WebProcess/Gamepad/WebGamepadProvider.cpp:
        (WebKit::WebGamepadProvider::gamepadConnected):
        (WebKit::WebGamepadProvider::gamepadDisconnected):
        (WebKit::WebGamepadProvider::gamepadActivity):
        (WebKit::WebGamepadProvider::platformGamepads):
        * WebProcess/Gamepad/WebGamepadProvider.h:
        
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::gamepadConnected):
        (WebKit::WebProcess::gamepadDisconnected):
        (WebKit::WebProcess::gamepadActivity):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2016-08-09  Anders Carlsson  <andersca@apple.com>

        Get rid of PluginStrategy
        https://bugs.webkit.org/show_bug.cgi?id=160696

        Reviewed by Dan Bernstein.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createPluginStrategy): Deleted.
        * NetworkProcess/NetworkProcessPlatformStrategies.h:
        * WebProcess/Plugins/WebPluginInfoProvider.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createPluginStrategy): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2016-08-09  Dan Bernstein  <mitz@apple.com>

        Add WKPage SPI for looking up a WKFrame given a WKFrameHandle
        https://bugs.webkit.org/show_bug.cgi?id=160695

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageLookUpFrameFromHandle): Added. Gets the frame from the map in the page’s process and
          returns it if it belongs to the page.
        * UIProcess/API/C/WKPagePrivate.h:

2016-08-08  Anders Carlsson  <andersca@apple.com>

        Move plug-in code from WebPlatformStrategies to WebPluginInfoProvider
        https://bugs.webkit.org/show_bug.cgi?id=160679

        Reviewed by Alex Christensen.

        * WebProcess/Plugins/WebPluginInfoProvider.cpp:
        (WebKit::WebPluginInfoProvider::setPluginLoadClientPolicy):
        (WebKit::WebPluginInfoProvider::clearPluginClientPolicies):
        (WebKit::WebPluginInfoProvider::refreshPlugins):
        (WebKit::WebPluginInfoProvider::getPluginInfo):
        (WebKit::WebPluginInfoProvider::getWebVisiblePluginInfo):
        (WebKit::WebPluginInfoProvider::populatePluginCache):
        (WebKit::WebPluginInfoProvider::pluginLoadClientPolicyForHost):
        (WebKit::WebPluginInfoProvider::longestMatchedWildcardHostForHost):
        (WebKit::WebPluginInfoProvider::replaceHostWithMatchedWildcardHost):
        * WebProcess/Plugins/WebPluginInfoProvider.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createPluginStrategy):
        (WebKit::WebPlatformStrategies::WebPlatformStrategies): Deleted.
        (WebKit::WebPlatformStrategies::refreshPlugins): Deleted.
        (WebKit::WebPlatformStrategies::getPluginInfo): Deleted.
        (WebKit::WebPlatformStrategies::getWebVisiblePluginInfo): Deleted.
        (WebKit::WebPlatformStrategies::setPluginLoadClientPolicy): Deleted.
        (WebKit::WebPlatformStrategies::clearPluginClientPolicies): Deleted.
        (WebKit::WebPlatformStrategies::longestMatchedWildcardHostForHost): Deleted.
        (WebKit::WebPlatformStrategies::replaceHostWithMatchedWildcardHost): Deleted.
        (WebKit::WebPlatformStrategies::pluginLoadClientPolicyForHost): Deleted.
        (WebKit::WebPlatformStrategies::populatePluginCache): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setPluginLoadClientPolicy):
        (WebKit::WebProcess::clearPluginClientPolicies):

2016-08-08  Anders Carlsson  <andersca@apple.com>

        Add a new PluginInfoProvider class, to replace PluginStrategy
        https://bugs.webkit.org/show_bug.cgi?id=160670

        Reviewed by Sam Weinig.

        Add a new WebPluginInfoProvider - it just calls through to the plug-in strategy for now.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/WebPluginInfoProvider.cpp: Added.
        (WebKit::WebPluginInfoProvider::singleton):
        (WebKit::WebPluginInfoProvider::WebPluginInfoProvider):
        (WebKit::WebPluginInfoProvider::~WebPluginInfoProvider):
        (WebKit::WebPluginInfoProvider::refreshPlugins):
        (WebKit::WebPluginInfoProvider::getPluginInfo):
        (WebKit::WebPluginInfoProvider::getWebVisiblePluginInfo):
        (WebKit::WebPluginInfoProvider::setPluginLoadClientPolicy):
        (WebKit::WebPluginInfoProvider::clearPluginClientPolicies):
        * WebProcess/Plugins/WebPluginInfoProvider.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):

2016-08-08  Brady Eidson  <beidson@apple.com>

        Addressing late review feedback in bug 160605
        https://bugs.webkit.org/show_bug.cgi?id=160605

        Reviewed by Darin's suggestions.

        * UIProcess/Gamepad/UIGamepadProvider.cpp:
        (WebKit::UIGamepadProvider::processPoolStartedUsingGamepads):
        (WebKit::UIGamepadProvider::processPoolStoppedUsingGamepads):
        * UIProcess/Gamepad/UIGamepadProvider.h:
        
        * UIProcess/Gamepad/mac/UIGamepadProviderHID.cpp:
        (WebKit::UIGamepadProvider::platformStartMonitoringGamepads):
        (WebKit::UIGamepadProvider::platformStopMonitoringGamepads):
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::startedUsingGamepads):
        (WebKit::WebProcessPool::stoppedUsingGamepads):
        (WebKit::WebProcessPool::processStoppedUsingGamepads):
        * UIProcess/WebProcessPool.h:
        
        * WebProcess/Gamepad/WebGamepadProvider.cpp:
        (WebKit::WebGamepadProvider::startMonitoringGamepads):
        (WebKit::WebGamepadProvider::stopMonitoringGamepads):
        * WebProcess/Gamepad/WebGamepadProvider.h:

2016-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bad performance in accelerated compositing mode with the modesetting intel driver and DRI3 enabled
        https://bugs.webkit.org/show_bug.cgi?id=160491

        Reviewed by Michael Catanzaro.

        This is becoming the default in several linux distributions and it makes WebKitGTK+ unusable in accelerated
        compositing mode, which is now always enabled because since we switched to use the threaded compositor. The
        problem seems to be an optimization of the intel driver for windows that are offscreen, and our redirected
        window is always positioned at ScreenWidth + 1, 0. Using negative coordinates to position the redirected window
        offscreen fixes the problem.
        See also https://bugs.freedesktop.org/show_bug.cgi?id=85064.

        * WebProcess/WebPage/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow): Position the parent window at -1, -1.

2016-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Duplicated code in DrawingAreaProxyImpl and CoordinatedDrawingAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=160506

        Reviewed by Michael Catanzaro.

        Same logic as in r202855 but in the UI process. CoordinatedDrawingAreaProxy is just a copy paste of
        DrawingAreaProxyImpl with non-accelerated code path removed. There's actually nothing (or very little) specific
        to coordinated graphics in the CoordinatedDrawingAreaProxy implementation. This patch renames
        CoordinatedDrawingAreaProxy as AcceleratedDrawingAreaProxy and makes DrawingAreaProxyImpl inherit from it, so
        that in case of accelerated compositing the parent class is used, and DrawingAreaProxyImpl only adds the non
        accelerated code path.
        To simplify the common API of AcceleratedDrawingAreaProxy, I have changed CoordinatedLayerTreeHostProxy to
        receive a WebPageProxy in the constructor instead of a drawing area, since the drawing area was used just to get
        the page proxy.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * UIProcess/AcceleratedDrawingAreaProxy.cpp: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp.
        (WebKit::AcceleratedDrawingAreaProxy::AcceleratedDrawingAreaProxy):
        (WebKit::AcceleratedDrawingAreaProxy::~AcceleratedDrawingAreaProxy):
        (WebKit::AcceleratedDrawingAreaProxy::alwaysUseCompositing):
        (WebKit::AcceleratedDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        (WebKit::AcceleratedDrawingAreaProxy::sizeDidChange):
        (WebKit::AcceleratedDrawingAreaProxy::deviceScaleFactorDidChange):
        (WebKit::AcceleratedDrawingAreaProxy::visibilityDidChange):
        (WebKit::AcceleratedDrawingAreaProxy::waitForBackingStoreUpdateOnNextPaint):
        (WebKit::AcceleratedDrawingAreaProxy::didUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingAreaProxy::enterAcceleratedCompositingMode):
        (WebKit::AcceleratedDrawingAreaProxy::exitAcceleratedCompositingMode):
        (WebKit::AcceleratedDrawingAreaProxy::updateAcceleratedCompositingMode):
        (WebKit::AcceleratedDrawingAreaProxy::backingStoreStateDidChange):
        (WebKit::AcceleratedDrawingAreaProxy::sendUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingAreaProxy::setNativeSurfaceHandleForCompositing):
        (WebKit::AcceleratedDrawingAreaProxy::destroyNativeSurfaceHandleForCompositing):
        * UIProcess/AcceleratedDrawingAreaProxy.h: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.h.
        (WebKit::AcceleratedDrawingAreaProxy::isInAcceleratedCompositingMode):
        (WebKit::AcceleratedDrawingAreaProxy::coordinatedLayerTreeHostProxy):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::CoordinatedLayerTreeHostProxy):
        (WebKit::CoordinatedLayerTreeHostProxy::~CoordinatedLayerTreeHostProxy):
        (WebKit::CoordinatedLayerTreeHostProxy::updateViewport):
        (WebKit::CoordinatedLayerTreeHostProxy::commitCoordinatedGraphicsState):
        (WebKit::CoordinatedLayerTreeHostProxy::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHostProxy::renderNextFrame):
        (WebKit::CoordinatedLayerTreeHostProxy::commitScrollOffset):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::syncVisibleContents):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::paint):
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::~DrawingAreaProxyImpl): Deleted.
        (WebKit::DrawingAreaProxyImpl::update): Deleted.
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate): Deleted.
        (WebKit::DrawingAreaProxyImpl::discardBackingStoreSoon): Deleted.
        (WebKit::DrawingAreaProxyImpl::discardBackingStore): Deleted.
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::setVisible):
        (WebKit::WebView::coordinatedGraphicsScene):
        (WebKit::WebView::updateViewportSize):
        (WebKit::WebView::createDrawingAreaProxy):

2016-08-07  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Reply block leaks if the remote object doesn’t call it
        https://bugs.webkit.org/show_bug.cgi?id=160642

        Reviewed by Sam Weinig.

        * Shared/API/Cocoa/RemoteObjectRegistry.h: Declared new member functions.
        * Shared/API/Cocoa/RemoteObjectRegistry.messages.in: Added ReleaseUnusedReplyBlock message.
        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::sendUnusedReply): Send the ReleaseUnusedReplyBlock message.
        (WebKit::RemoteObjectRegistry::releaseUnusedReplyBlock): Message receiver that call through
          to -_releaseReplyWithID:.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _invokeMethod:]): Define a ReplyBlockCallChecker object and
          capture an instance of it in the reply block we pass to the exported object. Have that
          block set a flag on the checker when it’s called. If the checker gets destroyed without
          the block having been called, which means that the block got destroyed without being
          called, call sendUnusedReply to let the other side know that the block will not be invoked.
        (-[_WKRemoteObjectRegistry _releaseReplyWithID:]): Added. Removed the pending reply from the
          map, which release the block.
        * Shared/API/Cocoa/_WKRemoteObjectRegistryInternal.h:

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

        Write API test to cover crash fix in r204135
        https://bugs.webkit.org/show_bug.cgi?id=160587

        Reviewed by Darin Adler.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::terminateProcess):
        Stop calling resetStateAfterProcessExited() after calling
        requestTermination() because requestTermination() now calls
        didClose() which calls processDidCrash() which already calls
        resetStateAfterProcessExited(). Because the processDidCrash()
        delegates may start new loads, we really do not want to
        reset the state again after calling the delegates.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):
        - Call didClose() in WebProcessProxy::requestTermination() so that
          the processDidCrash() delegates get called in API tests whenever
          a WebContent process is terminated to simulate a crash.
        - Stop calling shutDown() and webConnection()->didClose() because
          didClose() already does this for us.

2016-08-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r204226.

        Broke some API tests

        Reverted changeset:

        "Write API test to cover crash fix in r204135"
        https://bugs.webkit.org/show_bug.cgi?id=160587
        http://trac.webkit.org/changeset/204226

2016-08-06  Dan Bernstein  <mitz@apple.com>

        [Cocoa] -[_WKRemoteObjectRegistry() _invokeMethod:] leaks a block
        https://bugs.webkit.org/show_bug.cgi?id=160636

        Reviewed by Darin Adler.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _invokeMethod:]): Release the block returned from
          __NSMakeSpecialForwardingCaptureBlock.

2016-08-06  Chris Dumez  <cdumez@apple.com>

        Write API test to cover crash fix in r204135
        https://bugs.webkit.org/show_bug.cgi?id=160587

        Reviewed by Darin Adler.

        Call didClose() in WebProcessProxy::requestTermination() so that
        the processDidCrash() delegates get called in API tests whenever
        a WebContent process is terminated to simulate a crash.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):

2016-08-06  Brady Eidson  <beidson@apple.com>

        Lay WebProcess/UIProcess groundwork for an IPC GamepadProvider.
        https://bugs.webkit.org/show_bug.cgi?id=160605

        Reviewed by Alex Christensen.

        This patch:
          - Introduces the GamepadProvider that the WebProcess will use (WebGamepadProvider)
          - Has that provider message to the UIProcess notifying interest in gamepad state
          - Introduces a GamepadProviderClient in the UIProcess (UIGamepadProvider) that will use
            one of the existing GamepadProviders to pass gamepad state along to WebProcesses.
          - Adds an empty skeleton for the soon-to-be-used WebGamepad, which will be the 
            "PlatformGamepad" for WebProcesses.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:

        * UIProcess/Gamepads/UIGamepadProvider.cpp: Added.
        (WebKit::UIGamepadProvider::singleton):
        (WebKit::UIGamepadProvider::UIGamepadProvider):
        (WebKit::UIGamepadProvider::~UIGamepadProvider):
        (WebKit::UIGamepadProvider::platformGamepadConnected):
        (WebKit::UIGamepadProvider::platformGamepadDisconnected):
        (WebKit::UIGamepadProvider::platformGamepadInputActivity):
        (WebKit::UIGamepadProvider::processPoolStartedUsingGamepads):
        (WebKit::UIGamepadProvider::processPoolStoppedUsingGamepads):
        (WebKit::UIGamepadProvider::platformStartMonitoringGamepads):
        (WebKit::UIGamepadProvider::platformStopMonitoringGamepads):
        * UIProcess/Gamepads/UIGamepadProvider.h: Added.

        * UIProcess/Gamepads/mac/UIGamepadProviderHID.cpp: Added.
        (WebKit::UIGamepadProvider::platformStartMonitoringGamepads):
        (WebKit::UIGamepadProvider::platformStopMonitoringGamepads):

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::startedUsingGamepads):
        (WebKit::WebProcessPool::stoppedUsingGamepads):
        (WebKit::WebProcessPool::processStoppedUsingGamepads):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
                
        * WebProcess/Gamepad/WebGamepad.cpp: Added.
        * WebProcess/Gamepad/WebGamepad.h: Added.
        
        * WebProcess/Gamepad/WebGamepadProvider.cpp: Added.
        (WebKit::WebGamepadProvider::singleton):
        (WebKit::WebGamepadProvider::WebGamepadProvider):
        (WebKit::WebGamepadProvider::~WebGamepadProvider):
        (WebKit::WebGamepadProvider::startMonitoringGamepads):
        (WebKit::WebGamepadProvider::stopMonitoringGamepads):
        (WebKit::WebGamepadProvider::platformGamepads):
        * WebProcess/Gamepad/WebGamepadProvider.h: Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2016-08-05  Commit Queue  <commit-queue@webkit.org>

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

        This change causes assertion failures in LayoutTests and API
        tests. (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "Lay WebProcess/UIProcess groundwork for an IPC
        GamepadProvider."
        https://bugs.webkit.org/show_bug.cgi?id=160605
        http://trac.webkit.org/changeset/204195

2016-08-05  Brady Eidson  <beidson@apple.com>

        Lay WebProcess/UIProcess groundwork for an IPC GamepadProvider.
        https://bugs.webkit.org/show_bug.cgi?id=160605

        Reviewed by Alex Christensen.

        This patch:
          - Introduces the GamepadProvider that the WebProcess will use (WebGamepadProvider)
          - Has that provider message to the UIProcess notifying interest in gamepad state
          - Introduces a GamepadProviderClient in the UIProcess (UIGamepadProvider) that will use
            one of the existing GamepadProviders to pass gamepad state along to WebProcesses.
          - Adds an empty skeleton for the soon-to-be-used WebGamepad, which will be the 
            "PlatformGamepad" for WebProcesses.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:

        * UIProcess/Gamepads/UIGamepadProvider.cpp: Added.
        (WebKit::UIGamepadProvider::singleton):
        (WebKit::UIGamepadProvider::UIGamepadProvider):
        (WebKit::UIGamepadProvider::~UIGamepadProvider):
        (WebKit::UIGamepadProvider::platformGamepadConnected):
        (WebKit::UIGamepadProvider::platformGamepadDisconnected):
        (WebKit::UIGamepadProvider::platformGamepadInputActivity):
        (WebKit::UIGamepadProvider::processPoolStartedUsingGamepads):
        (WebKit::UIGamepadProvider::processPoolStoppedUsingGamepads):
        (WebKit::UIGamepadProvider::platformStartMonitoringGamepads):
        (WebKit::UIGamepadProvider::platformStopMonitoringGamepads):
        * UIProcess/Gamepads/UIGamepadProvider.h: Added.

        * UIProcess/Gamepads/mac/UIGamepadProviderHID.cpp: Added.
        (WebKit::UIGamepadProvider::platformStartMonitoringGamepads):
        (WebKit::UIGamepadProvider::platformStopMonitoringGamepads):

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::startedUsingGamepads):
        (WebKit::WebProcessPool::stoppedUsingGamepads):
        (WebKit::WebProcessPool::processStoppedUsingGamepads):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
                
        * WebProcess/Gamepad/WebGamepad.cpp: Added.
        * WebProcess/Gamepad/WebGamepad.h: Added.
        
        * WebProcess/Gamepad/WebGamepadProvider.cpp: Added.
        (WebKit::WebGamepadProvider::singleton):
        (WebKit::WebGamepadProvider::WebGamepadProvider):
        (WebKit::WebGamepadProvider::~WebGamepadProvider):
        (WebKit::WebGamepadProvider::startMonitoringGamepads):
        (WebKit::WebGamepadProvider::stopMonitoringGamepads):
        (WebKit::WebGamepadProvider::platformGamepads):
        * WebProcess/Gamepad/WebGamepadProvider.h: Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2016-08-05  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKRemoteObjectCoder doesn’t handle NSRange
        https://bugs.webkit.org/show_bug.cgi?id=160589

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (encodeInvocationArguments): Encode NSRange by wrapping in an NSValue.
        (decodeInvocationArguments): Decode wrapped NSRange.

2016-08-04  Chris Dumez  <cdumez@apple.com>

        Crash under NavigationState::NavigationClient::processDidCrash()
        https://bugs.webkit.org/show_bug.cgi?id=160563
        <rdar://problem/19814215>

        Reviewed by Sam Weinig.

        When WebPageProxy::close() gets called, make sure we destroy the page's
        navigationClient. If we don't then the navigationClient can outlive the
        navigationState, causing crashes when navigationClient tries to use its
        stale navigationState member reference later on. This happens when the
        WebPageProxy outlives its WKWebView because:
        1. WebPageProxy owns the navigationClient
        2. WKWebView owns the navigationState
        3. navigationClient has a reference to the navigationState as member.

        WebPageProxy can outlive the WKWebView because it is refCounted. It
        can happen for example when the client application uses the
        RelatedPage API as this extend the lifetime of the related WebPage's
        proxy but the application may not keep the related WKWebView alive.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        Note that it is safe to null out m_navigationClient here instead of
        creating a fresh one because there is a null check before every use
        of m_navigationClient in WebPageProxy.

2016-08-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Deduplicate WebProcessPool::setIgnoreTLSErrors
        https://bugs.webkit.org/show_bug.cgi?id=160489

        Reviewed by Alex Christensen.

        WebProcessPool::setIgnoreTLSErrors has identical implementation in WebProcessPoolEfl.cpp
        and WebProcessPoolGtk.cpp. We have WebProcessPoolSoup.cpp and this function is specific to
        the soup network backend, so move it there.

        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::setIgnoreTLSErrors): Deleted.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::setIgnoreTLSErrors): Deleted.
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::setIgnoreTLSErrors):

2016-08-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Document how to initialize WebKitFaviconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=160391

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:

2016-08-02  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r203385): Frequent RELEASE_ASSERT in WebKit::RemoteLayerTreeDrawingArea::flushLayers()
        https://bugs.webkit.org/show_bug.cgi?id=160481
        <rdar://problem/27534205>

        Reviewed by Simon Fraser.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateViewState):
        If the UI process sends a didUpdate message while the Web process is in
        the middle of flushing on a background thread, the drawing area will
        allow another commit to start on the main thread, which then (rightfully)
        causes the RELEASE_ASSERT.

        This is normally not a problem, because didRefreshDisplay (which sends the didUpdate)
        bails if m_didUpdateMessageState is anything other than NotSent, and m_didUpdateMessageState
        is only NotSent if the Web process has sent a commit (and thus will not commit again until
        it gets a didUpdate). This is the fundamental mechanism that avoids multiple commits being
        in flight at once.

        In r203385, I added a path where didRefreshDisplay could be called
        before the first commit arrived (by way of
        _applicationWillEnterForeground -> viewStateDidChange -> waitForDidUpdateViewState).

        This caused trouble because m_didUpdateMessageState is initialized to NotSent,
        which means that we could end up sending a didUpdate immediately, before the first
        commit arrives - even worse, while the first commit is being flushed on a background thread,
        leading the aforementioned RELEASE_ASSERT to fire.

        Instead, initialize it to Sent (which I've renamed to DoesNotNeedDidUpdate), so that
        we won't send a didUpdate until after the first commit arrives (at which point
        the two processes are in agreement about the order of things).

        It's not currently possible to API test this for multiple reasons, though it is fairly
        easy to write a test app that reproduces reliably (by simulating suspend/resume notifications
        inside the didFinishNavigation: callback).

2016-08-02  Enrica Casucci  <enrica@apple.com>

        Allow building with content filtering disabled.
        https://bugs.webkit.org/show_bug.cgi?id=160454

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<KeypressCommand>::decode):
        (IPC::ArgumentCoder<ContentFilterUnblockHandler>::encode):
        (IPC::ArgumentCoder<ContentFilterUnblockHandler>::decode):
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::blockedByContentFilterError):

2016-08-02  Brady Eidson  <beidson@apple.com>

        Refactor data passed along for a "GetRecord" request.
        https://bugs.webkit.org/show_bug.cgi?id=160352

        Reviewed by Tim Horton.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::getRecord):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::getRecord):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2016-08-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move the redirected XComposite window to the web process
        https://bugs.webkit.org/show_bug.cgi?id=160389

        Reviewed by Žan Doberšek.

        In the current code, the UI process creates the redirected window that the web process uses to render
        accelerated contents. The redirected window is sent to the web process as native surface handle, and using
        XDamage extension the UI process takes a pixmap of the redirected window to render into the widget when there
        are updates. This requires several points of synchronization between UI and web processes. When the web view is
        resized, the UI process first resizes the redirected window and then sends a new backing store ID to the web
        process. The time between the redirected window is resized and the web process renders the new contents the UI
        process keeps rendering the previous contents with the previous size in the new window with the new size. This
        makes the resize process slow, and it produces rendering artifacts quite often. The redirected window is created
        when the web view is realized, to be able to inherit the XVisual from the parent window, and the native window
        handle is sent to the web process. The time until the window is realized, the web process doesn't have a context
        to render into, so the UI process simply renders an empty page. When the web view is unrealized, for example if
        the web view is reparented, the redirected window is destroyed, and a sync message is sent to the web process to
        destroy the current gl context and stop drawing. This needs to happen synchronously, because the UI process
        can't remove the redirected window until the web process has stopped rendering into it. This makes also the
        reparenting process quite unstable and risky.
        To all those synchronization points we now have to add the synchronization with the compositing thread when
        using the threaded compositor. The threaded compositor made resizing, reparenting, etc. even worse. We can't
        avoid the synchronization with the threaded compositor, but we can reduce the synchronization points and improve
        the current ones by moving the redirected window to the web process. In this case is web process who creates the
        redirected window, so we can be sure that it always has a valid native surface handle to render into. This means
        we no longer need the IPC message to send the native surface handle from the UI process to the web process, nor
        the sync message to destroy it either. This also means we no longer need to wait until the view is realized to
        start rendering accelerated contents, and we don't need to stop when it's unrealized either. We don't really
        need to inherit the XVisual from the parent window if the redirected window always uses always a RGBA visual
        when available. That way we always render into a transparent window that is composed into the web view
        widget. And when the web view is resized, we no longer need to destroy the GL context either, because we use the
        same redirected window as the native handle, but create a new pixmap that is what we send to the UI process as
        layer tree context ID. The layer tree context ID is already sent to the UI process by the drawing area as part
        of the backing store update process, so we don't need any new IPC message for this. When the web view is
        resized, the UI process sends a backing store state update message to the web process that updates its size,
        relayouts and then renders the new contents, so that when the update backing store state reply gets to the UI
        process, we already have a new pixmap with the new contents updated. This makes resizing smooth again, and
        avoids flickering and rendering artifacts. And finally all this also prevents several race conditions that were
        causing X errors and web process crashes.

        * PlatformGTK.cmake:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::create): Make it possible to optionally pass a native surface handle for
        compositing to the ThreadedCompositor contructor.
        (WebKit::ThreadedCompositor::ThreadedCompositor): Initialize the native surface handle and make the scene active
        after the thread initialization if we already have a valid handle.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode): Pass the layer tree context ID to the web view.
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode): Notify the web view about the update.
        (WebKit::PageClientImpl::willEnterAcceleratedCompositingMode): Deleted.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetAcceleratedCompositingPixmap): Helper function to update the pixmap used to render the
        accelerated contents.
        (webkitWebViewBaseRealize): Remove the code to create the redirected window.
        (webkitWebViewBaseUnrealize): Remove the code to destroy the redirected window.
        (webkitWebViewBaseDispose): Reset the accelerated compositing pixmap.
        (webkitWebViewRenderAcceleratedCompositingResults): Use the accelerated compositing pixmap surface.
        (webkitWebViewBaseSizeAllocate): Remove the code to resize the redirected window.
        (webkitWebViewBaseEnterAcceleratedCompositingMode): Update the accelerated compositing pixmap.
        (webkitWebViewBaseUpdateAcceleratedCompositingMode): Ditto.
        (webkitWebViewBaseExitAcceleratedCompositingMode): Reset the accelerated compositing pixmap.
        (webkitWebViewBaseDidRelaunchWebProcess): Remove the code to send native surface handle to the web process.
        (webkitWebViewBasePageClosed): Reset the accelerated compositing pixmap.
        (_WebKitWebViewBasePrivate::updateViewStateTimerFired): Deleted.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState): Handle the case when the layer tree context ID
        changes without leaving the accelerated compositing mode, calling updateAcceleratedCompositingMode().
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode): Let the web view know we are leaving accelerated
        compositing mode even when it's forced, since in case of web process crash we need to leave the accelerated
        compositing mode in the UI process.
        (WebKit::DrawingAreaProxyImpl::willEnterAcceleratedCompositingMode): This message was added only to prepare the
        redirected window when the web process was about to enter accelerated compositing mode, so it's no longer needed.
        (WebKit::DrawingAreaProxyImpl::setNativeSurfaceHandleForCompositing): This is now only used when building
        without redirected XComposite window support.
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willEnterAcceleratedCompositingMode): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebView.h:
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp: Removed.
        * UIProcess/gtk/XDamageNotifier.cpp: Helper class to be notified about XDamage events.
        (WebKit::XDamageNotifier::singleton):
        (WebKit::XDamageNotifier::XDamageNotifier):
        (WebKit::XDamageNotifier::add):
        (WebKit::XDamageNotifier::remove):
        (WebKit::XDamageNotifier::filterXDamageEvent):
        (WebKit::XDamageNotifier::notify):
        * UIProcess/gtk/XDamageNotifier.h: Added.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::willEnterAcceleratedCompositingMode): Deleted.
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::willEnterAcceleratedCompositingMode): Deleted.
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp:
        (WebKit::AcceleratedDrawingArea::enterAcceleratedCompositingMode): Remove code to send
        WillEnterAcceleratedCompositingMode message.
        (WebKit::AcceleratedDrawingArea::setNativeSurfaceHandleForCompositing): This is now only used when building
        without redirected XComposite window support.
        * WebProcess/WebPage/AcceleratedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost): Create a redirected window and
        pass the window ID as native surface handle to the threaded compositor. Use the redirected window pixmap as
        layer tree context.
        (WebKit::ThreadedCoordinatedLayerTreeHost::invalidate): Destroy the redirected window.
        (WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged): Resize the redirected window and
        update the layer tree context.
        (WebKit::ThreadedCoordinatedLayerTreeHost::sizeDidChange): Ditto.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk): Create a redirected window and texture mapper that uses the window
        ID as native surface handle. Use the redirected window pixmap as layer tree context.
        (WebKit::LayerTreeHostGtk::makeContextCurrent): Use the redirected window as native handle.
        (WebKit::LayerTreeHostGtk::invalidate): Destroy the redirected window.
        (WebKit::LayerTreeHostGtk::sizeDidChange): Resize the redirected window and update the layer tree context.
        (WebKit::LayerTreeHostGtk::deviceOrPageScaleFactorChanged): Ditto.
        (WebKit::LayerTreeHostGtk::createTextureMapper): Helper function to create the texture mapper.
        (WebKit::LayerTreeHostGtk::setNativeSurfaceHandleForCompositing): Use createTextureMapper().
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        * WebProcess/WebPage/gtk/RedirectedXCompositeWindow.cpp: Added.
        (WebKit::RedirectedXCompositeWindow::create):
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        (WebKit::RedirectedXCompositeWindow::~RedirectedXCompositeWindow):
        (WebKit::RedirectedXCompositeWindow::resize):
        * WebProcess/WebPage/gtk/RedirectedXCompositeWindow.h: Renamed from Source/WebKit2/UIProcess/gtk/RedirectedXCompositeWindow.h.
        (WebKit::RedirectedXCompositeWindow::window):
        (WebKit::RedirectedXCompositeWindow::pixmap):

2016-08-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Database Process: ASSERTION FAILED: filePaths.size() == result.handles().size() with SANDBOX_EXTENSIONS disabled
        https://bugs.webkit.org/show_bug.cgi?id=160398

        Reviewed by Brady Eidson.

        Same assert as in bug #160188, but this time in preregisterSandboxExtensionsIfNecessary.

        * DatabaseProcess/DatabaseProcess.cpp:
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseProcess.messages.in:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::handleGetResult):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Databases/DatabaseProcessProxy.messages.in:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::preregisterSandboxExtensionsIfNecessary):

2016-08-01  Alex Christensen  <achristensen@webkit.org>

        _WKDownloadDelegate.didReceiveResponse should be called before decideDestinationWithSuggestedFilename
        https://bugs.webkit.org/show_bug.cgi?id=160437
        <rdar://problem/27578272>

        Reviewed by Brady Eidson.

        This preserves the behavior of the NSURLConnection/NSURLDownload code path.
        decideDestinationWithSuggestedFilename might need some information from the didReceiveResponse callback
        in order to decide what the suggested filename should be.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveAuthenticationChallenge):
        (WebKit::Download::didReceiveResponse):
        (WebKit::Download::didReceiveData):
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::setPendingDownloadID):
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        * NetworkProcess/NetworkLoad.h:
        (WebKit::NetworkLoad::pendingDownloadID):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::pendingDownloadCanceled):
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):

2016-07-31  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][Unix] Implement missing WebKit::SharedMemory::create() function
        https://bugs.webkit.org/show_bug.cgi?id=160364

        Reviewed by Carlos Garcia Campos.

        The WebKit::SharedMemory::create() function is missing for the Unix
        platform, which is also used by the GTK+ port. The latter is going
        to need this in place to use the common content filtering code.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::accessModeMMap): Added helper function to convert a
        SharedMemory::Protection value into flags useable with mmap().
        (WebKit::SharedMemory::create): Added. Implementation reuses code
        existing in the SharedMemory::allocate() function.
        (WebKit::SharedMemory::allocate): Reimplemented in terms of
        SharedMemory::create().

2016-07-30  Dan Bernstein  <mitz@apple.com>

        [Xcode] WebKit.framework is touched on incremental build even if nothing’s changed
        https://bugs.webkit.org/show_bug.cgi?id=160383

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj: Removed the output files listed under the
          Copy iOS Sandbox Profiles for Manual Sandboxing script build phase, because it doesn’t
          produce those files on macOS. With no outputs listed, the script will still run every
          time, but the fact that it has run won’t trigger touching the framework.

2016-07-28  Ryosuke Niwa  <rniwa@webkit.org>

        Crash with an Invalid Web Process IPC Message ID: WebPageProxy.AttributedStringForCharacterRangeCallback
        https://bugs.webkit.org/show_bug.cgi?id=160334
        <rdar://problem/27078089>

        Reviewed by Alexey Proskuryakov.

        The crash is most likely caused by an MESSAGE_CHECK failure in WebPageProxy::attributedStringForCharacterRangeCallback
        which marks the currently dispatching message was invalid inside the macro.

        Make sure we never fail this check by sending an empty EditingRange in attributedSubstringForCharacterRangeAsync when
        the editing range we're about to send to the UIProcess is invalid in WebProcess.

        Unfortunately, no new tests since we don't have any reproduction and I couldn't spot any code path in which we end up
        with an invalid EditingRage here with multiple inspection of the relevant code.

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

2016-07-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Split calculateCacheSizes in two methods
        https://bugs.webkit.org/show_bug.cgi?id=160237

        Reviewed by Darin Adler.

        It's used to calculate memory and disk cache sizes, but only the web process is interested in memory caches, and
        the network process in disk cache. We can also avoid a lot of duplicated code between ports to set the cache model.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::setCacheModel): Use calculateURLCacheSizes to set the disk cache size and call
        platformSetURLCacheSize if not set to allow ports to setup platform specific cache.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformSetURLCacheSize): Remove common code that is now in cross-platform file.
        (WebKit::volumeFreeSize): Deleted.
        (WebKit::NetworkProcess::platformSetCacheModel): Renamed to platformSetURLCacheSize().
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformSetURLCacheSize): Remove common code that is now in cross-platform file.
        (WebKit::getCacheDiskFreeSize): Deleted.
        (WebKit::NetworkProcess::platformSetCacheModel): Renamed to platformSetURLCacheSize().
        * Shared/CacheModel.cpp:
        (WebKit::calculateMemoryCacheSizes): Calculate the memory and page cache sizes.
        (WebKit::calculateURLCacheSizes): Calculate the disk cache size.
        (WebKit::calculateCacheSizes): Deleted.
        * Shared/CacheModel.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess): Tell the page cache to clear backing stores for GTK+ port too. This was done before when
        setting the cache model.
        (WebKit::WebProcess::setCacheModel): Use calculateMemoryCacheSizes to setup memory caches and call
        platformSetCacheModel to allow ports do more setup according to the cache model.
        (WebKit::WebProcess::clearResourceCaches): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetCacheModel): Remove common code that is now in cross-platform file.
        (WebKit::volumeFreeSize): Deleted.
        (WebKit::WebProcess::platformClearResourceCaches): Deleted.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformSetCacheModel): Remove common code that is now in cross-platform file.
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformClearResourceCaches): Deleted.

2016-07-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Database Process: ASSERTION FAILED: paths.size() == handles.size() with SANDBOX_EXTENSIONS disabled
        https://bugs.webkit.org/show_bug.cgi?id=160188

        Reviewed by Sergio Villar Senin.

        This happens in ports with sandbox extensions disabled, and it's making several tests to crash in debug
        builds. The SandboxExtension implementation is empty in case of building with sandbox extensions disabled, so
        that we are actually allocating no extensions at all in
        NetworkProcessProxy::grantSandboxExtensionsToDatabaseProcessForBlobs(). When the message arrives to database
        process, we have a list of paths, but an empty list of hanldes which causes the assertion. We can just avoid
        that message entirely in case of building without sandbox extensions.

        * DatabaseProcess/DatabaseProcess.cpp:
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::grantSandboxExtensionsToDatabaseProcessForBlobs):

2016-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove deprecated SPI for video inline / fullscreen controls
        https://bugs.webkit.org/show_bug.cgi?id=160318

        Reviewed by Tim Horton.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAllowsInlineMediaPlaybackWithPlaysInlineAttribute): Deleted.
        (WKPreferencesGetAllowsInlineMediaPlaybackWithPlaysInlineAttribute): Deleted.
        (WKPreferencesSetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute): Deleted.
        (WKPreferencesGetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Deleted.
        (-[WKWebViewConfiguration copyWithZone:]): Deleted.
        (-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithPlaysInlineAttribute]): Deleted.
        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:]): Deleted.
        (-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]): Deleted.
        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Deleted.

2016-07-28  Tim Horton  <timothy_horton@apple.com>

        Frequent animation lags when interacting with Safari (sidebar, tab switching, etc.)
        https://bugs.webkit.org/show_bug.cgi?id=160289
        <rdar://problem/27553464>

        Reviewed by Simon Fraser.

        API Tests: WebKit2.AnimatedResizeDoesNotHang, WebKit2.ResizeWithHiddenContentDoesNotHang

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        Avoid calling _endAnimatedResize when a commit comes in when we haven't yet received
        a dynamic viewport update reply (and thus don't have a transaction ID to wait on).
        Previously, in this case, _resizeAnimationTransformTransactionID would be 0,
        and *any* commit would cause _endAnimatedResize to be called, causing us to always
        fall into the worst-case sync wait.
        
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::synchronizeDynamicViewportUpdate):
        Make use of waitForDidUpdateViewState instead of having a separate waitForAndDispatchImmediately
        here, because it knows to do things like dispatch the didUpdate message if it's still
        pending. This also shortens the sync wait timeout from 1s to 500ms, which makes it
        consistent with e.g. the newly-parented-view timeout duration, and should be nothing
        but positive.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::timeoutRespectingIgnoreTimeoutsForTesting):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::waitForSyncReply):
        * Platform/IPC/Connection.h:
        (IPC::Connection::ignoreTimeoutsForTesting):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration ignoreSynchronousMessagingTimeoutsForTesting]):
        (-[_WKProcessPoolConfiguration setIgnoreSynchronousMessagingTimeoutsForTesting:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processDidFinishLaunching):
        Add a mechanism for clients to cause all synchronous message timeouts to be effectively infinite.
        The new API tests use this to ensure that the test will time out if they ever enter
        the bad state (otherwise, the shorter sync wait timeout could make the test still pass).

2016-07-27  Andy Estes  <aestes@apple.com>

        [iOS] Add WKUIDelegate SPI for specifying that an attachment list is from a managed source
        https://bugs.webkit.org/show_bug.cgi?id=160280
        <rdar://problem/27471815>

        Reviewed by Dan Bernstein.

        * Platform/spi/ios/UIKitSPI.h: Declared
        UIPreviewItemTypeAttachment, UIPreviewDataAttachmentList, and UIPreviewDataAttachmentIndex.
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Declared -_attachmentListForWebView:sourceIsManaged:.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]): Used UIPreviewItemTypeAttachment,
        UIPreviewDataAttachmentList, and UIPreviewDataAttachmentIndex. If uiDelegate responds to
        -_attachmentListForWebView:sourceIsManaged:, called it instead of -_attachmentListForWebView:.
        Set sourceIsManaged as the value for the UIPreviewDataAttachmentListSourceIsManaged key in dataForPreview.

2016-07-27  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Remove unused textContentType SPI from _WKFormInputSession
        https://bugs.webkit.org/show_bug.cgi?id=160260

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKFormInputSession.h: Remove unused SPI.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textInputTraits]): Set textContentType of _traits to whatever we classify it as based
        on the assisted node info. The default textContentType is nil, and that is our fallback in our method
        for determining textContentType.
        (-[WKFormInputSession textContentType]): Deleted.
        (-[WKFormInputSession setTextContentType:]): Deleted.

2016-07-27  Chris Dumez  <cdumez@apple.com>

        Fix m_isInBackground initialization for Safari View Services
        https://bugs.webkit.org/show_bug.cgi?id=160255
        <rdar://problem/27569255>

        Reviewed by Tim Horton.

        Fix m_isInBackground initialization for Safari View Services. The
        code was using m_applicationStateMonitor without initializing it.
        Instead, use the local applicationStateMonitor and make sure we
        invalidate it before it gets released.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):

2016-07-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Coordinated Graphics] Improve scheduling of tasks between threads in CoordinatedGraphicsScene
        https://bugs.webkit.org/show_bug.cgi?id=160238

        Reviewed by Michael Catanzaro.

        This patch makes the following improvements:

         - Avoid scheduling tasks to the main thread if the scene is detached.
         - Do not take references when not actually sending tasks to another threads.
         - Use Function instead of std::function on dispatch methods.
         - Remove purgeBackingStores that is actually never called. It's only scheduled from purgeGLResources() that
           is always called after detach.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::dispatchOnMainThread):
        (WebKit::CoordinatedGraphicsScene::dispatchOnClientRunLoop):
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebKit::CoordinatedGraphicsScene::updateViewport):
        (WebKit::CoordinatedGraphicsScene::onNewBufferAvailable):
        (WebKit::CoordinatedGraphicsScene::commitSceneState):
        (WebKit::CoordinatedGraphicsScene::renderNextFrame):
        (WebKit::CoordinatedGraphicsScene::purgeGLResources):
        (WebKit::CoordinatedGraphicsScene::commitScrollOffset):
        (WebKit::CoordinatedGraphicsScene::detach):
        (WebKit::CoordinatedGraphicsScene::setActive):
        (WebKit::CoordinatedGraphicsScene::dispatchCommitScrollOffset): Deleted.
        (WebKit::CoordinatedGraphicsScene::purgeBackingStores): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::purgeBackingStores): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::purgeBackingStores): Deleted.
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::invalidate):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::invalidate):
        (WebKit::CoordinatedLayerTreeHost::purgeBackingStores): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.messages.in:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2016-07-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove network setup from web process
        https://bugs.webkit.org/show_bug.cgi?id=160236

        Reviewed by Michael Catanzaro.

        We are still doing network init and finish in th web process. It's useless since we switched to mandatory
        network process.

        * WebProcess/gtk/WebProcessMainGtk.cpp:

2016-07-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.13.4 release.

        * gtk/NEWS: Add release notes for 2.13.4.

2016-07-26  Simon Fraser  <simon.fraser@apple.com>

        Sort the project files.

        * WebKit2.xcodeproj/project.pbxproj:

2016-07-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [iPhone] Playing a video on tudou.com plays only sound, no video
        https://bugs.webkit.org/show_bug.cgi?id=160178
        <rdar://problem/27535468>

        Reviewed by Eric Carlson and Dan Bernstein.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetInlineMediaPlaybackRequiresPlaysInlineAttribute):
        (WKPreferencesGetInlineMediaPlaybackRequiresPlaysInlineAttribute):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _inlineMediaPlaybackRequiresPlaysInlineAttribute]):
        (-[WKWebViewConfiguration _setInlineMediaPlaybackRequiresPlaysInlineAttribute:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-07-26  Alex Christensen  <achristensen@webkit.org>

        Remove unused DownloadAuthenticationClient
        https://bugs.webkit.org/show_bug.cgi?id=160220

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * NetworkProcess/Downloads/Download.cpp:
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadAuthenticationClient.cpp: Removed.
        * NetworkProcess/Downloads/DownloadAuthenticationClient.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2016-07-26  Simon Fraser  <simon.fraser@apple.com>

        Allow LOG macros to be used outside the namespace, and other logging cleanup
        https://bugs.webkit.org/show_bug.cgi?id=160216

        Reviewed by Anders Carlsson.

        Fix some issues with the LOG macros.
        
        First, they were not usable outside the WebKit namespace in WebKit2 code. Fix by moving
        its log channels outside of the namespace (they are protected by a unique prefix anyway).
        
        Second, allow LOG_WITH_STREAM to be used in WebKit2 by moving that and a helper macro
        into LogMacros.h, which is exported from WebCore as a private header.
        
        Third, split the Logging.h header into two. Logging.h remains for framework-internal
        log channels and log macros. Add LogInitialization.h which is external, and used to
        initialize the channels.
        
        Finally unify "initializeLogChannels" and "initializeLoggingChannels" terminology everywhere.

        * NetworkProcess/NetworkProcess.cpp:
        * Platform/LogInitialization.h: Copied from Source/WebKit2/Platform/foundation/LoggingFoundation.mm.
        * Platform/Logging.cpp:
        (WebKit::initializeLogChannelsIfNecessary):
        * Platform/Logging.h:
        * Platform/foundation/LoggingFoundation.mm:
        * Shared/WebKit2Initialize.cpp:
        (WebKit::InitializeWebKit2):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateContentRectsWithState:]):
        (-[WKWebView _navigationGestureDidBegin]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_hiddenPageThrottlingTimer):
        * WebKit2.xcodeproj/project.pbxproj:

2016-07-26  David Kilzer <ddkilzer@apple.com>

        Networking process crash due to missing -[WebCoreAuthenticationClientAsChallengeSender performDefaultHandlingForAuthenticationChallenge:] implementation
        https://bugs.webkit.org/show_bug.cgi?id=156947
        <rdar://problem/23325160>

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKAuthenticationDecisionListener.cpp:
        (WKAuthenticationDecisionListenerRejectProtectionSpaceAndContinue): 
        * UIProcess/API/C/WKAuthenticationDecisionListener.h:
        Added new SPI for testing corresponding to calling the completion handler of
        WKWebView.didReceiveAuthenticationChallenge with NSURLSessionAuthChallengeRejectProtectionSpace.

2016-07-26  Anders Carlsson  <andersca@apple.com>

        Payment session does not end if user closes all Safari windows
        https://bugs.webkit.org/show_bug.cgi?id=160213
        rdar://problem/27480873

        Reviewed by Tim Horton.

        Listen for the NSWindowWillCloseNotification of the sheet window and hide the payment UI when
        the sheet window is going to be closed.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI):
        (WebKit::WebPaymentCoordinatorProxy::hidePaymentUI):

2016-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] ASSERTION FAILED: canAccessThreadLocalDataForThread(m_thread) after r203718
        https://bugs.webkit.org/show_bug.cgi?id=160201

        Reviewed by Michael Catanzaro.

        I forgot to call purgeGLResources() before invalidating the scene in the compositing thread.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::invalidate):

2016-07-26  Enrica Casucci  <enrica@apple.com>

        Support configurable autocapitalization.
        https://bugs.webkit.org/show_bug.cgi?id=158860
        rdar://problem/27536113

        Reviewed by Tim Horton.

        Autocapitalization should be enabled/disabled regardless of whether
        we are using advance spelling feature.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):


2016-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Coordinated Graphics] Test fast/fixed-layout/fixed-layout.html crashes in debug
        https://bugs.webkit.org/show_bug.cgi?id=160117

        Reviewed by Michael Catanzaro.

        The problem is that WebPage has its own m_useFixedLayout that is only updated when changed from the UI
        process. However, layout tests doing internals.setUseFixedLayout() change the frame view directly, and the
        WebPage doesn't notice it.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setFixedVisibleContentRect): Deleted.
        (WebKit::WebPage::sendViewportAttributesChanged): Change the assert to check the main FrameView is in fixed
        layout mode.
        * WebProcess/WebPage/WebPage.h:

2016-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] ASSERTION FAILED: isMainThread() when ThreadedCompositor is destroyed since r203718
        https://bugs.webkit.org/show_bug.cgi?id=160197

        Reviewed by Žan Doberšek.

        ThreadedCompositor can be destroyed from a secondary thread, for example, when a task takes a reference and the
        main threads derefs it, when the task finishes in the secondary thread the lambda ends up deleting the threaded
        compositor. This is ok for the Threaded compositor but not for the CompositingRunLoop class. this was not a
        problem before r203718 because the CompositingRunLoop object was created and destroyed in the same thread
        always, but now it's part of the ThreadedCompositor class. This patch uses std:unique_ptr again to explicitly
        create the CompositingRunLoop in the ThreadedCompositor constructor and delete in the invalidate() method to
        make sure it happens in the main thread in both cases.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::WorkQueuePool::invalidate):
        (WebKit::WorkQueuePool::getOrCreateWorkQueueForContext):
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::ThreadedCompositor):
        (WebKit::ThreadedCompositor::invalidate):
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing):
        (WebKit::ThreadedCompositor::setDeviceScaleFactor):
        (WebKit::ThreadedCompositor::setDrawsBackground):
        (WebKit::ThreadedCompositor::didChangeViewportSize):
        (WebKit::ThreadedCompositor::didChangeViewportAttribute):
        (WebKit::ThreadedCompositor::didChangeContentsSize):
        (WebKit::ThreadedCompositor::scrollTo):
        (WebKit::ThreadedCompositor::scrollBy):
        (WebKit::ThreadedCompositor::updateViewport):
        (WebKit::ThreadedCompositor::scheduleDisplayImmediately):
        (WebKit::ThreadedCompositor::forceRepaint):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:

2016-07-26  Youenn Fablet  <youenn@apple.com>

        Remove ClientCredentialPolicy cross-origin option from ResourceLoaderOptions
        https://bugs.webkit.org/show_bug.cgi?id=159413

        Reviewed by Alex Christensen.

        Renaming of ClientCredentialPolicy values.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkLoad::didReceiveAuthenticationChallenge):
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):

2016-07-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Crashes and deadlocks in single web process mode
        https://bugs.webkit.org/show_bug.cgi?id=160160

        Reviewed by Žan Doberšek.

        Every WebPage has its own threaded compositor that runs its own compositing thread. That means that when there's
        more than one WebPage in the same process, we are running OpenGL stuff in different secondary threads. That's
        causing crashes and deadlocks in X and graphics drivers. We should ensure there's a single compositing thread
        per process when multiple threads is not supported. This is causing unit test
        WebKit2.WKPageGetScaleFactorNotZero to time out since we switched to the threaded compositor. That test is
        creating two pages in the same web process, and most of the times the web process crashes or deadlocks causing
        the test to never finish and time out.
        This patch makes CompositingRunLoop use a thread pool that spawns the compositing threads and schedules the tasks
        there.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::WorkQueuePool::singleton):
        (WebKit::WorkQueuePool::dispatch):
        (WebKit::WorkQueuePool::runLoop):
        (WebKit::WorkQueuePool::invalidate):
        (WebKit::WorkQueuePool::WorkQueuePool):
        (WebKit::WorkQueuePool::getOrCreateWorkQueueForContext):
        (WebKit::CompositingRunLoop::CompositingRunLoop):
        (WebKit::CompositingRunLoop::~CompositingRunLoop):
        (WebKit::CompositingRunLoop::performTask):
        (WebKit::CompositingRunLoop::performTaskSync):
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::ThreadedCompositor):
        (WebKit::ThreadedCompositor::invalidate):
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing):
        (WebKit::ThreadedCompositor::setDeviceScaleFactor):
        (WebKit::ThreadedCompositor::setDrawsBackground):
        (WebKit::ThreadedCompositor::didChangeViewportSize):
        (WebKit::ThreadedCompositor::didChangeViewportAttribute):
        (WebKit::ThreadedCompositor::didChangeContentsSize):
        (WebKit::ThreadedCompositor::scrollTo):
        (WebKit::ThreadedCompositor::scrollBy):
        (WebKit::ThreadedCompositor::purgeBackingStores):
        (WebKit::ThreadedCompositor::renderNextFrame):
        (WebKit::ThreadedCompositor::commitScrollOffset):
        (WebKit::ThreadedCompositor::updateViewport):
        (WebKit::ThreadedCompositor::scheduleDisplayImmediately):
        (WebKit::ThreadedCompositor::forceRepaint):
        (WebKit::ThreadedCompositor::tryEnsureGLContext): Deleted.
        (WebKit::ThreadedCompositor::glContext): Deleted.
        (WebKit::ThreadedCompositor::updateSceneState): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:

2016-07-25  Sam Weinig  <sam@webkit.org>

        Fix assertion.

        * NetworkProcess/cache/NetworkCacheCodersCocoa.cpp:
        (WebKit::NetworkCache::encodeCertificateChain):

2016-07-25  Sam Weinig  <sam@webkit.org>

        Split platform specific parts of NetworkCacheCoders.cpp into separate files
        https://bugs.webkit.org/show_bug.cgi?id=160151

        Reviewed by Alex Christensen.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode): Deleted.
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode): Deleted.
        * NetworkProcess/cache/NetworkCacheCodersCocoa.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp.
        (WebKit::NetworkCache::encodeCFData): Moved.
        (WebKit::NetworkCache::decodeCFData): Moved.
        (WebKit::NetworkCache::encodeSecTrustRef): Moved.
        (WebKit::NetworkCache::decodeSecTrustRef): Moved.
        (WebKit::NetworkCache::encodeCertificateChain): Moved.
        (WebKit::NetworkCache::decodeCertificateChain): Moved.
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode): Moved.
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode): Moved.
        * NetworkProcess/cache/NetworkCacheCodersSoup.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp.
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode): Moved.
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode): Moved.

        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

2016-07-25  Chris Dumez  <cdumez@apple.com>

        [iOS] Make sure we call the ProcessAssertion invalidation handler on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=160140
        <rdar://problem/27399998>

        Reviewed by Darin Adler.

        Based on crash traces, it appears BKSProcessAssertion is calling our
        invalidation handler on a background thread. This was not anticipated
        and therefore, this would lead to thread safety issues and crashes.

        We now make sure to call our invalidation handler on the main thread.
        We also use a WeakPtr to ensure that the ProcessAssertion is still
        alive once on the main thread and before calling the invalidation
        handler.

        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::ProcessAssertion):
        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::createWeakPtr):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::markAsInvalidated):

2016-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Threaded Compositor] ASSERTION FAILED: !!handle ^ !!m_nativeSurfaceHandle with several layout tests
        https://bugs.webkit.org/show_bug.cgi?id=160143

        Reviewed by Michael Catanzaro.

        We have a message to set the native surface handle and another one for destroying it, the former is a normal
        message while the latter is sync. This assertion happens if the web view is realized before the web process is
        launched. This is the sequence:

        1.- DrawingAreaProxyImpl sends SetNativeSurfaceHandleForCompositing message to the web process, since the
        process hasn't been launched yet, the message is queued.
        2.- Web process is launched and queued messages are now sent to the web process.
        3.- The page is closed right after the web process is launched, and DrawingAreaProxyImpl sends
        DestroyNativeSurfaceHandleForCompositing to the web process.
        4.- The web process processes incoming messages, and DestroyNativeSurfaceHandleForCompositing is processed before
        SetNativeSurfaceHandleForCompositing because it's sync.
        5.- The web process processes SetNativeSurfaceHandleForCompositing message.

        This is not only producing the assertion, it's also setting a handle for a X window already destroyed in the UI
        process, so this could be producing the X errors we have seen in other tests. So, we need to make sure
        SetNativeSurfaceHandleForCompositing and DestroyNativeSurfaceHandleForCompositing are handled in order by the
        web process. We could make SetNativeSurfaceHandleForCompositing sync as well, but sync messages are just ignored
        when sent before the web process has been launched (only normal messages are queued for obvious reasons). The
        other option is sending the SetNativeSurfaceHandleForCompositing message with the
        IPC::DispatchMessageEvenWhenWaitingForSyncReply flag. In this case the message is queued and dispatched on
        process launch, but it's dispatched before other messages also queued without that flag, like
        CreateWebPage. Since there's no WebPage the web process doesn't find a valid message receiver for it and
        it's discarded. We need to ensure the DrawinArea object has been created before sending the
        SetNativeSurfaceHandleForCompositing with the PC::DispatchMessageEvenWhenWaitingForSyncReply flag.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState): If we have received the first update and there's a
        SetNativeSurfaceHandleForCompositing message pending, send it.
        (WebKit::DrawingAreaProxyImpl::setNativeSurfaceHandleForCompositing): Do not send the message before the first
        update is received.
        (WebKit::DrawingAreaProxyImpl::destroyNativeSurfaceHandleForCompositing): If there was a
        SetNativeSurfaceHandleForCompositing message pending, just ignore this destroy since the web process never
        received the handle.
        * UIProcess/DrawingAreaProxyImpl.h:

2016-07-25  Philippe Normand  <pnormand@igalia.com>

        Improve GDB backtrace generation for GTK/EFL
        https://bugs.webkit.org/show_bug.cgi?id=128928

        Reviewed by Carlos Garcia Campos.

        Move the Web, Database and Network ProcessIdentifier functions to
        the cross-platform WKContext and WKPage implementations.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetNetworkProcessIdentifier):
        (WKContextGetDatabaseProcessIdentifier):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetProcessIdentifier):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:

2016-07-24  Sam Weinig  <sam@webkit.org>

        Add specialization for encoding/decoding WebCore::CertificateInfos in the Network Cache
        <rdar://problem/27409315>
        https://bugs.webkit.org/show_bug.cgi?id=160144

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCache::encodeCFData):
        (WebKit::NetworkCache::decodeCFData):
        (WebKit::NetworkCache::encodeSecTrustRef):
        (WebKit::NetworkCache::decodeSecTrustRef):
        (WebKit::NetworkCache::encodeCertificateChain):
        (WebKit::NetworkCache::decodeCertificateChain):
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode):
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode):

        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::version):
        Bump the version and lastStableVersion to account for the format change.

2016-07-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Automation: All key events should be processed before sending response
        https://bugs.webkit.org/show_bug.cgi?id=160114
        <rdar://problem/27505943>

        Reviewed by Darin Adler.

        When evaluating performKeyboardInteractions, we were sending all
        NSEvents synchronously, but because WebPageProxy was doing its
        own queueing and asynchronous processing of those key events, we
        would receive and respond to the next Automation command before
        having completed all of the key events.

        This change makes performKeyboardInteractions asynchronous. It
        will be notified only after WebPageProxy has exhausted its queue
        of key events.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::keyboardEventsFlushedForPage):
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent):

2016-07-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Automation: WebAutomationSession::deleteAllCookies never calls callback, hangs automation session
        https://bugs.webkit.org/show_bug.cgi?id=160113
        <rdar://problem/27308124>

        Reviewed by Darin Adler.

        Delete all cookies appears to be a straightforward action
        where we don't need to wait for a callback. So drop the
        async altogether and implicitly complete the action.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::deleteAllCookies):
        * UIProcess/Automation/WebAutomationSession.h:

2016-07-22  Zalan Bujtas  <zalan@apple.com>

        Handle cases when IOSurface initialization fails.
        https://bugs.webkit.org/show_bug.cgi?id=160006
        <rdar://problem/27495102>

        Reviewed by Tim Horton and Simon Fraser.

        This is an additional fix to r203514 to check if IOSurface initialization was successful.

        Unable to test.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::encode):
        (WebKit::RemoteLayerBackingStore::display):
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2016-07-22  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Clients should be able to decide if they want secure text entry in a form field
        https://bugs.webkit.org/show_bug.cgi?id=160109
        rdar://problem/27504958

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession forceSecureTextEntry]): Getter.
        (-[WKFormInputSession setForceSecureTextEntry:]): Setter.
        (-[WKContentView textInputTraits]): If the form input session has specified that secure text
        entry is desired, we should use secure text entry.

2016-07-22  Anders Carlsson  <andersca@apple.com>

        Get rid of an unused API typedef
        https://bugs.webkit.org/show_bug.cgi?id=160103

        Reviewed by Sam Weinig.

        * Shared/API/c/WKSharedAPICast.h:

2016-07-22  Dan Bernstein  <mitz@apple.com>

        run-safari doesn't work with Safari 10 on 10.11
        https://bugs.webkit.org/show_bug.cgi?id=159958
        <rdar://problem/27422805>

        Reviewed by Alexey Proskuryakov.

        Safari’s injected bundle may depend on the newer versions of frameworks installed in a
        staging location. Have the engineering builds of the Web Content service look for newer
        versions in that location.

        * Configurations/BaseTarget.xcconfig: Shortened a linker flag.

        * Configurations/BaseXPCService.xcconfig: Increased Mach-O header padding in production
          builds to allow for more dyld environment commands to be added after the fact.

        * Configurations/DebugRelease.xcconfig: Have the new
          WK_WEBCONTENT_SERVICE_NEEDS_VERSIONED_FRAMEWORK_PATH_LDFLAG set to YES for macOS
          engineering builds.

        * Configurations/WebContentService.xcconfig: Include the versioned frameworks whenever
          WK_WEBCONTENT_SERVICE_NEEDS_VERSIONED_FRAMEWORK_PATH_LDFLAG is set to YES. Have the
          value of WK_WEBCONTENT_SERVICE_NEEDS_VERSIONED_FRAMEWORK_PATH_LDFLAG default to
          the value of USE_STAGING_INSTALL_PATH, while letting DebugRelease.xcconfig override it.

2016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove support for deprecated SPI inlineMediaPlaybackRequiresPlaysInlineAttribute
        https://bugs.webkit.org/show_bug.cgi?id=160066

        Reviewed by Dean Jackson.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetInlineMediaPlaybackRequiresPlaysInlineAttribute): Deleted.
        (WKPreferencesGetInlineMediaPlaybackRequiresPlaysInlineAttribute): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Deleted.
        (-[WKWebViewConfiguration copyWithZone:]): Deleted.
        (-[WKWebViewConfiguration _inlineMediaPlaybackRequiresPlaysInlineAttribute]): Deleted.
        (-[WKWebViewConfiguration _setInlineMediaPlaybackRequiresPlaysInlineAttribute:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Deleted.

2016-07-21  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Apps using WKWebView will crash if they set the scroll view's delegate and don't nil it out later
        https://bugs.webkit.org/show_bug.cgi?id=159980
        rdar://problem/27450825

        Reviewed by Dan Bernstein.

        The root cause of this crash is that we are not abiding the UIScrollView API that the scroll view
        delegate property should be weak. If setters of this delegate do not know that, since the WKWebView
        exposes the scroll view as a UIScrollView, they may forget to nil out the delegate they set and will
        then crash.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollViewDelegateForwarder methodSignatureForSelector:]): Get a RetainPtr holding the
        external delegate and use where needed.
        (-[WKScrollViewDelegateForwarder respondsToSelector:]): Ditto.
        (-[WKScrollViewDelegateForwarder forwardInvocation:]): Ditto.
        (-[WKScrollViewDelegateForwarder forwardingTargetForSelector:]): Ditto. When returning a reference
        to the external delegate, get a retained and autoreleased reference so the caller needn't release
        the object when done.
        (-[WKScrollView delegate]): Ditto.
        (-[WKScrollView _updateDelegate]): Get a RetainPtr holding the external delegate that can be
        used throughout this method. Use the RetainPtr to get the external delegate for setting super's
        delegate as well as creating the delegate forwarder.
        (-[WKScrollView setDelegate:]): Get a RetainPtr holding the external delegate and use its value for
        comparison to the object we are setting the external delegate to.

2016-07-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [iPhone] Playing a video on tudou.com plays only sound, no video
        https://bugs.webkit.org/show_bug.cgi?id=159967
        <rdar://problem/26964090>

        Reviewed by Jon Lee, Jeremy Jones, and Anders Carlsson.

        Add the two preferences to WKWebViewConfiguration and WKPreferences to cover both
        the Obj-C API and the C SPI.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
        (WKPreferencesGetAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
        (WKPreferencesSetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):
        (WKPreferencesGetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithPlaysInlineAttribute]):
        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:]):
        (-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]):
        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-07-21  Yongjun Zhang  <yongjun_zhang@apple.com>

        WebBackForwardList's currentIndex could get out of bounds when filtering items.
        https://bugs.webkit.org/show_bug.cgi?id=159986

        When generating a new BackForwardListState object, if we filter out multiple items in the list, the currentIndex could get
        out of bounds.

        Reviewed by Dan Bernstein.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backForwardListState): Make currentIndex point to the last item if it is out of bounds.

2016-07-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Automation: Allow JavaScript evaluation to return an InvalidElementState error
        https://bugs.webkit.org/show_bug.cgi?id=160015
        <rdar://problem/27434529>

        Reviewed by Brian Burg.

        * UIProcess/Automation/Automation.json:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):

2016-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Threaded Compositor] WTR generates fully white images for pixel tests most of the time
        https://bugs.webkit.org/show_bug.cgi?id=160016

        Reviewed by Žan Doberšek.

        WTR sends a force repaint message to the web process before taking a snapshot of the web view. With the threaded
        compositor, the UI process is notified about the force repaint callback before the contents have been actually
        painted. We need to ensure that the contents are rendered before the UI process is notified.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::forceRepaint): Synchronously render the layer tree.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewRenderAcceleratedCompositingResults): Always mark the redirected window surface as dirty before
        rendering, since it can be modified by the web process at any time.
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::XDamageNotifier::add):
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow): Do not mark the surface as dirty on every
        damage since the view will do it before rendering.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::forceRepaint): Call ThreadedCompositor::forceRepaint().
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2016-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] White page when loaded tab is visited until it's hovered when AC mode is always on
        https://bugs.webkit.org/show_bug.cgi?id=159512

        Reviewed by Michael Catanzaro.

        The redirected window is always mapped, but offscreen, to ensure that the web process can always render
        there. When the web process renders something into the offscreen window, we receive a damage event in the UI
        process and queue a redraw of the web view. However, when the web view is not mapped, even if we still receive
        the damage events, the web view redraws are ignored until the view is mapped again (gtk_widget_queue_draw()
        returns early when the widget is not visible). The redirected window updates its pixmap on demand when the
        surface is requested, which happens when the web view draws its contents. So when the web view becames visible,
        the redirected window creates a new pixmap and surface (the first time or if the web view was resized), that we
        initialize to avoid artifacts when the web process hasn't render anything yet. That initialization is actually
        overwriting anything rendered into the redirected window while the view was unmapped. That's why see white pages
        the first time, and previous contents after a resize, and we don't see the actual contents until the web process
        renders again and we reuse the existing pixmap. The white page didn't happen for tabs with accelerated content,
        because in those cases the web process was rendering a new frame every 16ms, but instead there was a flickering
        effect due to the current frame being overwritten when the view is mapped until the next frame.
        So, instead of lazily create and initialize the redirected window pixmap and surface, we should always create
        the new pixmap as soon as the window is created or resized (and not empty) This fixes the issues but also makes
        resizing the window a bit smoother when AC mode is enabled.

        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow): Create the pixmap and surface if the window is
        not empty.
        (WebKit::RedirectedXCompositeWindow::resize): Ditto.
        (WebKit::RedirectedXCompositeWindow::createNewPixampAndPixampSurface): Create the pixmap and surface.
        (WebKit::RedirectedXCompositeWindow::surface): Deleted.
        * UIProcess/gtk/RedirectedXCompositeWindow.h:
        (WebKit::RedirectedXCompositeWindow::surface):

2016-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Threaded Compositor] Web view background colors don't work
        https://bugs.webkit.org/show_bug.cgi?id=159465

        Reviewed by Michael Catanzaro.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::setDrawsBackground): Set m_drawsBackground in compositing thread and schedule a
        layer flush.
        (WebKit::ThreadedCompositor::renderLayerTree): Clear the area when not rendering backgrounds.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::pageBackgroundTransparencyChanged): Notify the compositor.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2016-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web view background colors don't work in accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=159455

        Reviewed by Michael Catanzaro.

        In non AC mode it's the drawing area backing store the one drawing the background, and the web process just
        renders into a transparent bitmap. In AC mode we need to make the redirected window pixmap transparent for the
        web process to render there, and let the web view fill the background color before rendering the redirected
        window pixmap on top. To be able to make the redirected window surface transparent, we need to ensure the parent
        window has an RGBA visual, even when setting a fully opaque background, because we still need the web process
        to render on the transparent xwindow.

        * UIProcess/API/gtk/WebKitWebView.cpp: Update documentation of webkit_web_view_set_background_color() since now
        it's required to set the RGBA visual even for opaque colors in case AC mode is enabled.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewRenderAcceleratedCompositingResults): When a background color has been set, fill it before
        rendering the redirected window surface.
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow): Mark the surface as dirty after every damage
        event, since the web process has modified it.
        (WebKit::RedirectedXCompositeWindow::surface): Initialize the surface after creating it, to avoid flickering and
        rendering artifacts when waiting for the first damage event from the web process.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::compositeLayersToContext): Use a fully transparent color to clear the context when the page
        is resized or when a view background color has been set.

2016-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Avoid the redirected window resize when the view is realized in AC mode
        https://bugs.webkit.org/show_bug.cgi?id=159463

        Reviewed by Michael Catanzaro.

        We are always creating the redirected window at 1x1 and then resizing it if we are in AC mode. When the view is
        realized and AC mode is already enabled, which happens for example when AC mode is forced, or when the threaded
        compositor is enabled, we could just pass the initial size to the redirected window constructor to create the
        XWindow at the right size.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseResizeRedirectedWindow): We no longer need to pass the device scale factor, since the
        RedirectedXCompositeWindow already knows it.
        (webkitWebViewBaseRealize): Pass the WebPageProxy and an initial size to the RedirectedXCompositeWindow
        constructor instead of the parent GdkWindow. If AC mode is disabled, the initial size will be empty. With the
        WebPageProxy the redirected window has access to the device scale factor and view widget to get the parent
        GdkWindow.
        (deviceScaleFactorChanged): Resize the redirected window when device scale factor changes.
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::RedirectedXCompositeWindow::create):
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        (WebKit::RedirectedXCompositeWindow::resize):
        (WebKit::RedirectedXCompositeWindow::surface):
        (WebKit::RedirectedXCompositeWindow::~RedirectedXCompositeWindow):
        * UIProcess/gtk/RedirectedXCompositeWindow.h:

2016-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Threaded Compositor] Web Process crash when the page is closed before the web view is realized
        https://bugs.webkit.org/show_bug.cgi?id=159918

        Reviewed by Michael Catanzaro.

        When the web view is unrealized, we send a sync message to the web process to destroy the native surface handle
        for compositing, and then we actually destroy the redirected window. But if the page is closed explicitly before
        the web view is unrealized, the drawing area proxy is destroyed so that when the web view is unrealized we can't
        notify the web process that keeps trying to render to a now deleted window handle. That produces a BadDrawable
        X error and the web process crashes.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::pageClosed): Call webkitWebViewBasePageClosed().
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBasePageClosed): If the web view is still realized, destroy the native surface handle and the
        redirected window.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Add webkitWebViewBasePageClosed().

2016-07-20  Commit Queue  <commit-queue@webkit.org>

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

        many iOS-simulator tests are failing (Requested by litherum on
        #webkit).

        Reverted changeset:

        "[iPhone] Playing a video on tudou.com plays only sound, no
        video"
        https://bugs.webkit.org/show_bug.cgi?id=159967
        http://trac.webkit.org/changeset/203471

2016-07-20  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r203189): Webpage snapshots are partially or fully blank when edge swiping back
        https://bugs.webkit.org/show_bug.cgi?id=160000
        rdar://problem/27455589
        
        Reviewed by Zalan Bujtas.

        r203189 triggered a call to -_updateContentRectsWithState: in the middle of a swipe,
        during which we'd compute the visible rect of the view as having zero width, causing us
        to not create tiles.

        -_navigationGestureDidBegin already snapshots the visibleContentRect in _frozenVisibleContentRect,
        but -_visibleContentRect then clipped that with ancestor views, causing the issue.

        Fix by having -_visibleContentRect just return _frozenVisibleContentRect if we have one.

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

2016-07-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [iPhone] Playing a video on tudou.com plays only sound, no video
        https://bugs.webkit.org/show_bug.cgi?id=159967
        <rdar://problem/26964090>

        Reviewed by Jon Lee.

        Add the two preferences to WKWebViewConfiguration and WKPreferences to cover both
        the Obj-C API and the C SPI.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
        (WKPreferencesGetAllowsInlineMediaPlaybackWithPlaysInlineAttribute):
        (WKPreferencesSetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):
        (WKPreferencesGetAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithPlaysInlineAttribute]):
        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithPlaysInlineAttribute:]):
        (-[WKWebViewConfiguration _allowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute]):
        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackWithWebKitPlaysInlineAttribute:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-07-20  ChangSeok Oh  <changseok@webkit.org>

        Fix a linking failure caused by NetworkCache::Data::~Data()
        https://bugs.webkit.org/show_bug.cgi?id=159931

        Linking is failed with clang 3.6. It says WebKit::NetworkCache::Data::~Data is undefined.
        It is fixed by adding a destructor for NetworkCache::Data.

        Reviewed by Alex Christensen.

        * NetworkProcess/cache/NetworkCacheData.h:
        (WebKit::NetworkCache::Data::~Data):

2016-07-20  Tim Horton  <timothy_horton@apple.com>

        Explain the default value of WKWebViewConfiguration's ignoresViewportScaleLimits
        https://bugs.webkit.org/show_bug.cgi?id=159978
        <rdar://problem/27453189>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        This defaults to NO.

2016-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Linux] MemoryPressureMonitor fallback code to get memory available in older linux kernels doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=159970

        Reviewed by Antonio Gomes.

        We are failing to detect zones when parsing /proc/zoneinfo.

        * UIProcess/linux/MemoryPressureMonitor.cpp:
        (WebKit::lowWatermarkPages): Use strncmp since we want to know whether the line starts with "Node".
        (WebKit::MemoryPressureMonitor::MemoryPressureMonitor): Stop the polling if we fail to get the memory available,
        because that means it's not sopported in the system for whatever reason.

2016-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Web Process crash when the layer tree host is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=159922

        Reviewed by Sergio Villar Senin.

        It happens when the layer tree host is destroyed after the didChangeVisibleRect is scheduled to be run in the
        main thread, but before it's actually dispatched. In that case the threaded compositor client points to a
        deleted object and crashes when trying to dereference it.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::~ThreadedCompositor): Add an assert to ensure invalidate is always called before
        the object is deleted.
        (WebKit::ThreadedCompositor::invalidate): Terminate the compositing thread and nullify the client.
        (WebKit::ThreadedCompositor::didChangeVisibleRect): Return early if the client is null when the task is
        dispatched in the main thread.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h: Add invalidate().
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::invalidate): Invalidate the ThreadedCompositor and chain up.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2016-07-19  Brian Burg  <bburg@apple.com>

        Web Automation: WebAutomationSessionProxy's HashMaps should support '0' as valid keys
        https://bugs.webkit.org/show_bug.cgi?id=159957
        <rdar://problem/27376446>

        Reviewed by Joseph Pecoraro.

        * WebProcess/Automation/WebAutomationSessionProxy.h:
        Use UnsignedWithZeroKeyHashTraits to avoid problems with zero as a key.

2016-07-19  Anders Carlsson  <andersca@apple.com>

        Some payment authorization status values should keep the sheet active
        https://bugs.webkit.org/show_bug.cgi?id=159936
        rdar://problem/26756701

        Reviewed by Tim Horton.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::completePaymentSession):
        If the status isn't a final state status, bounce the current state back to active.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        Rename the _authorized ivar to _didReachFinalState.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (-[WKPaymentAuthorizationViewControllerDelegate paymentAuthorizationViewControllerDidFinish:]):
        (WebKit::WebPaymentCoordinatorProxy::platformCompletePaymentSession):
        Set _didReachFinalState based on the return value of isFinalStateStatus.

2016-07-18  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the --minimal build fail in InjectedBundle.cpp
        https://bugs.webkit.org/show_bug.cgi?id=159770

        Reviewed by Benjamin Poulain.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:

2016-07-18  Alex Christensen  <achristensen@webkit.org>

        webbookmarksd needs to use the same AppCache directory as MobileSafari
        https://bugs.webkit.org/show_bug.cgi?id=159912
        <rdar://problem/27056844>

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        Make webbookmarksd match MobileSafari by adding a matching runtime exception.

2016-07-18  Anders Carlsson  <andersca@apple.com>

        Don't null out the IPC::Connection's XPC connection
        https://bugs.webkit.org/show_bug.cgi?id=159911
        rdar://problem/27018065

        Reviewed by Alex Christensen.

        The function that nulls out the XPC connection, platformInvalidate(), is called from the connection queue,
        whereas the XPC connection is normally accessed from the main thread leading to inconsistencies when the
        connection is being invalidated while the main thread is trying to access it.
        
        Fix this by simply never nulling out the XPC connection. It will be released when the IPC::Connection is destroyed anyway.

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

2016-07-18  Tim Horton  <timothy_horton@apple.com>

        Tapping on an apple.com tab in tab overview stutters when switching to it
        https://bugs.webkit.org/show_bug.cgi?id=159904
        <rdar://problem/27192350>

        Reviewed by Simon Fraser.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateViewState):
        In any case where we get to waitForDidUpdateViewState (usually a tab switch),
        if we have an outstanding didUpdate message, the Web process will not commit
        a new layer tree until it receives the didUpdate message. However, since
        waitForDidUpdateViewState synchronously blocks the UI process, we also
        won't *send* the didUpdate message, so we block for the full timeout duration.

        Instead, if we get to waitForDidUpdateViewState, just send the didUpdate without
        waiting for the DisplayLink or anything else, because calling rAF slightly too
        quickly, once, is certainly better than blocking the UI process for a whole second.

2016-07-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] ENABLE_OPENGL=OFF build broken since r201802
        https://bugs.webkit.org/show_bug.cgi?id=159909

        Reviewed by Antonio Gomes.

        * WebProcess/WebPage/LayerTreeHost.h: Add missing include.

2016-07-18  Anders Carlsson  <andersca@apple.com>

        WebKit nightly fails to build on macOS Sierra
        https://bugs.webkit.org/show_bug.cgi?id=159902
        rdar://problem/27365672

        Reviewed by Tim Horton.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        Use new PassKitSPI header.

2016-07-18  Tim Horton  <timothy_horton@apple.com>

        Mail contents are temporarily obscured by black rectangles when returning from suspend and in app switcher
        https://bugs.webkit.org/show_bug.cgi?id=159894
        <rdar://problem/26973202>

        Reviewed by Simon Fraser.

        * UIProcess/ApplicationStateTracker.h:
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        (WebKit::ApplicationStateTracker::~ApplicationStateTracker):
        (WebKit::ApplicationStateTracker::applicationDidCreateWindowContext):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didMoveToWindow]):
        (-[WKContentView _applicationDidCreateWindowContext]):
        (-[WKContentView _applicationWillEnterForeground]): Deleted.
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView didMoveToWindow]):
        (-[WKPDFView _applicationDidCreateWindowContext]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidFinishSnapshottingAfterEnteringBackground):
        Hide content at window context creation time, instead of when the application
        becomes foregrounded. Otherwise, background snapshots (which create/destroy
        window contexts, but do not bring the app into the foreground) can have
        parented layers that have volatile surfaces in them. In the normal case,
        we will subsequently get foregrounded and re-build the layer tree; in the
        background snapshot case, we will just have an empty layer tree.

        In the future, we should consider making ApplicationStateTracker use
        window context creation/destruction to drive web process lifetime, so
        that we can actually paint correctly for background snapshots.

2016-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.13.3 release.

        * gtk/NEWS: Add release notes for 2.13.3.

2016-07-18  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed buildfix after r203338. Just for fun.

        * PlatformMac.cmake:

2016-07-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        MemoryPressureHandler doesn't work if cgroups aren't present in Linux
        https://bugs.webkit.org/show_bug.cgi?id=155255

        Reviewed by Sergio Villar Senin.

        There's no way to get notifications about memory pressure in Linux without using cgroups that doesn't require a
        manual polling. We can get that information from /proc/meminfo, but that's not pollable so it requires to
        manually check its contents in a loop sleeping for a while between checks. This means we would be waking up the
        process on every poll iteration, most of the times for nothing. That's specially problematic on devices running
        on battery. And taking into account that there's a memory pressure handler in every secondary process (Web,
        Network and Plugin), we would be waking up all those process all the time. However, not having a memory pressure
        handler is even more problematic than the manual polling.
        This patch adds a class MemoryPressureMonitor to the manual polling of /proc/meminfo, but runs in the UI
        process, to avoid the weakups in all other secondary processes, and uses an eventFD to notify all other
        processes. It's only used in case cgroups is not available. The eventFD descriptor is sent to all other
        processes at startup, and passed to the MemoryPressureHandler before install() is called for the first
        time. To minimize the wakeups even in the UI process, the poll interval is calculated from 1 to 5 seconds
        depending on the current memory used, so in case of low memory level we sleep for a longer time.
        It's also important to make the memory calculations as accurate as possible to avoid cleaning resources in the
        secondary processes unnecessarily.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess): Pass the memory pressure monitor file descriptor to the MemoryPressureHandler.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode): Encode memory pressure monitor handle.
        (WebKit::NetworkProcessCreationParameters::decode): Decode memory pressure monitor handle.
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * PlatformEfl.cmake: Add new file to compilation, and update include dirs.
        * PlatformGTK.cmake: Ditto.
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializePluginProcess): Pass the memory pressure monitor file descriptor to the MemoryPressureHandler.
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode): Encode memory pressure monitor handle.
        (WebKit::PluginProcessCreationParameters::decode): Decode memory pressure monitor handle.
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Encode memory pressure monitor handle.
        (WebKit::WebProcessCreationParameters::decode): Decode memory pressure monitor handle.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching): Create the memory pressure monitor handle for the plugin
        process if needed.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess): Create the memory pressure monitor handle for the network
        process if needed.
        (WebKit::WebProcessPool::createNewWebProcess): Create the memory pressure monitor handle for the web process if
        needed.
        * UIProcess/linux/MemoryPressureMonitor.cpp: Added.
        (WebKit::lowWatermarkPages):
        (WebKit::systemPageSize):
        (WebKit::calculateMemoryAvailable):
        (WebKit::systemMemoryUsedAsPercentage):
        (WebKit::pollIntervalForUsedMemoryPercentage):
        (WebKit::isSystemdMemoryPressureMonitorAvailable):
        (WebKit::MemoryPressureMonitor::isEnabled):
        (WebKit::MemoryPressureMonitor::singleton):
        (WebKit::MemoryPressureMonitor::MemoryPressureMonitor):
        (WebKit::MemoryPressureMonitor::createHandle):
        * UIProcess/linux/MemoryPressureMonitor.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Pass the memory pressure monitor file descriptor to the MemoryPressureHandler.

2016-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r202855): [GTK] ASSERTION FAILED: m_webPage.bounds().contains(bounds)
        https://bugs.webkit.org/show_bug.cgi?id=159806

        Reviewed by Žan Doberšek.

        The problem is that since r202855, in case of non accelerated mode, the dirty region is updated too late when
        updating backing store state.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updateBackingStoreState): Update the dirty region to the new size when not in
        accelerated compositing mode.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSize): Update the WebPage size before resizing the frame and calling setNeedsDisplay() to
        ensure that any call to setNeedsDisplay() uses the new web page bounds. This is actually a regression introduced
        in r143472, where setNeedsDisplay was changed to use the web page bounds as directy rectangle. Before r143472
        the dirty rectangle was passed to setNeedsDisplay and it passed the right one.

2016-07-16  Sam Weinig  <sam@webkit.org>

        [WebKit API] Add SPI to track multiple navigations caused by a single user gesture
        <rdar://problem/26554137>
        https://bugs.webkit.org/show_bug.cgi?id=159856

        Reviewed by Dan Bernstein.

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/APIUserInitiatedAction.h: Added.
        Add new APIObject type, UserInitiatedAction.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        Expose a _WKUserInitiatedAction on the WKNavigationAction.

        * UIProcess/API/Cocoa/_WKUserInitiatedAction.h: Added.
        * UIProcess/API/Cocoa/_WKUserInitiatedAction.mm: Added.
        (-[_WKUserInitiatedAction consume]):
        (-[_WKUserInitiatedAction isConsumed]):
        (-[_WKUserInitiatedAction _apiObject]):
        * UIProcess/API/Cocoa/_WKUserInitiatedActionInternal.h: Added.
        Add new _WKUserInitiatedAction type wrapping API::UserInitiatedAction.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        Store the userGestureTokenIdentifier (as determined from the WebProcess's map) rather
        than just a single bit. This allows us to track if a user gesture is used for multiple navigations.

        * UIProcess/API/APINavigationAction.h:
        Add UserInitiatedAction member and re-implement isProcessingUserGesture in terms of it.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        Get the API::UserInitiatedAction from the WebProcessProxy (if it exists), and pass
        it along to the API::NavigationAction.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::userInitiatedActivity):
        (WebKit::WebProcessProxy::didDestroyUserGestureToken):
        * UIProcess/WebProcessProxy.h:
        Keep a map of active userInitiatedActivity objects.

        * UIProcess/WebProcessProxy.messages.in:
        Add DidDestroyUserGestureToken message to manager API::UserInitiatedActivity lifetimes.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::didClickNotification):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        (WebKit::PluginView::evaluate):
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle):
        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionManager::play):
        (WebKit::WebPlaybackSessionManager::pause):
        (WebKit::WebPlaybackSessionManager::togglePlayState):
        (WebKit::WebPlaybackSessionManager::beginScrubbing):
        (WebKit::WebPlaybackSessionManager::endScrubbing):
        (WebKit::WebPlaybackSessionManager::seekToTime):
        (WebKit::WebPlaybackSessionManager::fastSeek):
        (WebKit::WebPlaybackSessionManager::beginScanningForward):
        (WebKit::WebPlaybackSessionManager::beginScanningBackward):
        (WebKit::WebPlaybackSessionManager::endScanning):
        (WebKit::WebPlaybackSessionManager::selectAudioMediaOption):
        (WebKit::WebPlaybackSessionManager::selectLegibleMediaOption):
        Update for new UserGestureIndicator interface.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        Get an identifier for the UserGestureToken from the WebProcess singleton
        to pass to the WebProcess.

        * WebProcess/WebProcess.cpp:
        (WebKit::nextUserGestureTokenIdentifier):
        (WebKit::WebProcess::userGestureTokenIdentifier):
        (WebKit::WebProcess::userGestureTokenDestroyed):
        * WebProcess/WebProcess.h:
        Track UserGestureToken lifetimes utilizing the destructionObserver mechanism
        off the tokens to indicate destruction. When destroyed, notify the UIProcess
        to avoid leaks.

2016-07-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rename fastHasAttribute to hasAttributeWithoutSynchronization
        https://bugs.webkit.org/show_bug.cgi?id=159864

        Reviewed by Chris Dumez.

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

2016-07-17  Jeremy Jones  <jeremyj@apple.com>

        REGRESSION (r191907): Maxthon Browser -After exit full screen video playback the browser window is blank with audio running
        https://bugs.webkit.org/show_bug.cgi?id=159731
        <rdar://problem/26674003>

        Reviewed by Tim Horton.

        Primarily written by Jer Noble  <jer.noble@apple.com>.

        When a view is removed from it's superview, and that superview's constraints property references
        the removed superview, those constraints are removed as well. Make sure to save off a copy of
        the superview's constraints before swapping in the placeholder view, and reapply those constraints
        when swapping the web view back into its original superview.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController setSavedConstraints:]):
        (-[WKFullScreenWindowController savedConstraints]):
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):

2016-07-16  Ryosuke Niwa  <rniwa@webkit.org>

        Rename fastGetAttribute to attributeWithoutSynchronization
        https://bugs.webkit.org/show_bug.cgi?id=159852

        Reviewed by Darin Adler.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        (WebKit::WebPage::performActionOnElement):
        (WebKit::WebPage::getAssistedNodeInformation):

2016-07-15  Timothy Hatcher  <timothy@apple.com>

        Web Automation: Fix element and event coord space issues
        https://bugs.webkit.org/show_bug.cgi?id=159851
        rdar://problem/27375780

        Reviewed by Brian Burg.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::performMouseInteraction): Subtract topContentInset() before
        it goes back out to WebDriver.
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout): When using useViewportCoordinates,
        subtract topContentInset() so it matches expectations.

2016-07-15  Beth Dakin  <bdakin@apple.com>

        Mac UI process needs to know about element focus and blur, much like iOS
        https://bugs.webkit.org/show_bug.cgi?id=159843
        -and corresponding-
        rdar://problem/27229504

        Reviewed by Tim Horton.

        This patch makes the existing iOS machinery to handle focus and blurring of 
        elements cross-platform. Instead of using the existing iOS messages for 
        startAssistingNode/stopAssistingNode, this patch adds a new message that 
        require only a boolean parameter: setEditableElementIsFocused.

        Now that more of this code is shared, this patch teases 
        m_hasFocusedDueToUserInteraction out into two variables. I realized that it 
        was being used to mean two slightly different things on Mac and iOS, which 
        was very confusing. Now we have m_isAssistingNodeDueToUserInteraction to 
        represent the way iOS was using the variable, and we have 
        m_hasEverFocusedElementDueToUserInteractionSincePageTransition to represent 
        how Mac was using the variable. There should not be any behavior changes with 
        this re-name, just added clarity.

        WebViewImpl has a new member variable m_editableElementIsFocused.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setEditableElementIsFocused):

        Pipe the new setEditableElementIsFocused message to WebViewImpl.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setEditableElementIsFocused):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setEditableElementIsFocused):

        elementDidFocus() and elementDidBlur() are now PLATFORM(COCOA) instead of 
        PLATFORM(IOS)
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::elementDidFocus):
        (WebKit::WebChromeClient::elementDidBlur):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::elementDidFocus): Deleted.
        (WebKit::WebChromeClient::elementDidBlur): Deleted.

        m_hasPendingBlurNotification is no longer iOS-only.
        * WebProcess/WebPage/WebPage.cpp:

        Use our two new bools m_isAssistingNodeDueToUserInteraction and 
        m_hasEverFocusedElementDueToUserInteractionSincePageTransition 
        (WebKit::WebPage::didStartPageTransition):
        (WebKit::WebPage::didChangeSelection):

        These functions are all newly cross-platform. The Messages they send are 
        still platform-specific, but otherwise the logic is the same. We 
        dispatch_async the blur messages so that the UI process features won’t be 
        flashy when the user is tapping, tabbing, or clicking through form fields.
        (WebKit::WebPage::resetAssistedNodeForFrame):
        (WebKit::WebPage::elementDidFocus):
        (WebKit::WebPage::elementDidBlur):

        resetAssistedNodeForFrame() is no longer iOS-only. 
        (WebKit::WebPage::didCommitLoad):

        Move variables and functions around so that they are defined for the right 
        platform, and declare the two new bools in place of the old one.
        * WebProcess/WebPage/WebPage.h:

        These functions are now defined in WebPage.cpp
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::resetAssistedNodeForFrame): Deleted.
        (WebKit::WebPage::elementDidFocus): Deleted.
        (WebKit::WebPage::elementDidBlur): Deleted.

2016-07-15  Geoffrey Garen  <ggaren@apple.com>

        Added a makeRef<T> helper
        https://bugs.webkit.org/show_bug.cgi?id=159835

        Reviewed by Andreas Kling.

        Anders told me to!

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::removeWorkQueueMessageReceiver):
        (IPC::Connection::invalidate):
        (IPC::Connection::sendMessage):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::postConnectionDidCloseOnConnectionWorkQueue):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::enqueueIncomingMessage):
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::receiveSourceEventHandler):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing):
        (WebKit::ThreadedCompositor::setDeviceScaleFactor):
        (WebKit::ThreadedCompositor::didChangeViewportSize):
        (WebKit::ThreadedCompositor::didChangeViewportAttribute):
        (WebKit::ThreadedCompositor::didChangeContentsSize):
        (WebKit::ThreadedCompositor::scrollTo):
        (WebKit::ThreadedCompositor::scrollBy):
        (WebKit::ThreadedCompositor::didChangeVisibleRect):
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::UserContentExtensionStore::lookupContentExtension):
        (API::UserContentExtensionStore::compileContentExtension):
        (API::UserContentExtensionStore::removeContentExtension):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::ProcessLauncher):
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit::StorageManager::destroySessionStorageNamespace):
        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnection):
        (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):
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::readDataFromDiskIfNeeded):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pluginThreadAsyncCall):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        (WebKit::EventDispatcher::gestureEvent):
        (WebKit::EventDispatcher::touchEvent):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):

2016-07-15  Chris Dumez  <cdumez@apple.com>

        Use fastGetAttribute() / setAttributeWithoutSynchronization() when possible
        https://bugs.webkit.org/show_bug.cgi?id=159793

        Reviewed by Ryosuke Niwa.

        Use fastGetAttribute() / setAttributeWithoutSynchronization() when possible, for performance.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::createPasswordEntryForm):
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        (WebKit::PDFPluginAnnotation::attach):
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement):

2016-07-15  Ryosuke Niwa  <rniwa@webkit.org>

        Disable custom elements in Safari Tech Preview
        https://bugs.webkit.org/show_bug.cgi?id=159829

        Reviewed by Chris Dumez.
 
        Disable custom elements API in Safari Technology Preview. Our implementation is so out of sync
        with the latest spec that it's actively harmful to have this feature enabled.

        * Shared/WebPreferencesDefinitions.h:

2016-07-15  Jer Noble  <jer.noble@apple.com>

        Full screen ePub embedded video is playing on 1/4 screen, cut off
        https://bugs.webkit.org/show_bug.cgi?id=159737
        <rdar://problem/26259404>

        Reviewed by Tim Horton.

        Set the fixedLayoutSize to CGSizeZero when disabling fixed layout due to the 
        WebView not supporting arbitrary layout modes, and reset to the saved value
        when the view does begin supporting arbitrary layout modes.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setFixedLayoutSize):
        (WebKit::WebViewImpl::updateSupportsArbitraryLayoutModes):

2016-07-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r203248.

        This change causes LayoutTests to crash and exit early

        Reverted changeset:

        "Use more Refs with WorkQueues"
        https://bugs.webkit.org/show_bug.cgi?id=159792
        http://trac.webkit.org/changeset/203248

2016-07-14  Chris Dumez  <cdumez@apple.com>

        Use emptyString() instead of "" when possible
        https://bugs.webkit.org/show_bug.cgi?id=159789

        Reviewed by Alex Christensen.

        Use emptyString() instead of "" when possible to reduce String allocations.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::pasteboardChangedOwner):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parseRFC822HeaderFields):
        (WebKit::NPN_Status):

2016-07-14  Alex Christensen  <achristensen@webkit.org>

        Use more Refs with WorkQueues
        https://bugs.webkit.org/show_bug.cgi?id=159792

        Reviewed by Brady Eidson.

        * NetworkProcess/CustomProtocols/CustomProtocolManager.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::setShouldExitOnSyncMessageSendFailure):
        (IPC::Connection::addWorkQueueMessageReceiver):
        * Platform/IPC/Connection.h:
        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::initializeConnection):
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::create):
        (WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded):
        (WebKit::StorageManager::StorageManager):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::processWillOpenConnection):
        (WebKit::WebResourceLoadStatisticsStore::processDidCloseConnection):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::initializeConnection):
        (WebKit::SecItemShimProxy::secItemRequest):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::initializeConnection):
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::initializeConnection):
        (WebKit::EventDispatcher::wheelEvent):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::initializeConnection):
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):

2016-07-14  Timothy Hatcher  <timothy@apple.com>

        Web Automation: FrameNotFound errors happen a lot for the main frame
        https://bugs.webkit.org/show_bug.cgi?id=159777
        rdar://problem/27224628

        Send both pageID and frameID, and have the WebProcess side resolve the
        mainFrame from 0 based on the known pageID. This avoids a race waiting
        for the DidCreateMainFrame message.

        Reviewed by Brian Burg.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::webFrameIDForHandle):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::computeElementLayout):
        (WebKit::WebAutomationSession::getAllCookies):
        (WebKit::WebAutomationSession::deleteSingleCookie):
        (WebKit::WebAutomationSession::webFrameProxyForHandle): Deleted.
        (WebKit::WebAutomationSession::webFrameIDForHandle): Added.
        * UIProcess/Automation/WebAutomationSession.h:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithOrdinal):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithName):
        (WebKit::WebAutomationSessionProxy::resolveParentFrame):
        (WebKit::WebAutomationSessionProxy::focusFrame):
        (WebKit::WebAutomationSessionProxy::computeElementLayout):
        (WebKit::WebAutomationSessionProxy::takeScreenshot):
        (WebKit::WebAutomationSessionProxy::getCookiesForFrame):
        (WebKit::WebAutomationSessionProxy::deleteCookie):
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:

2016-07-14  Alex Christensen  <achristensen@webkit.org>

        Use SocketProvider to create SocketStreamHandles
        https://bugs.webkit.org/show_bug.cgi?id=159774

        Reviewed by Brady Eidson.

        * WebProcess/Network/WebSocketProvider.cpp:
        (WebKit::WebSocketProvider::createSocketStreamHandle):
        (WebKit::WebSocketProvider::createWebSocketChannel): Deleted.
        * WebProcess/Network/WebSocketProvider.h:

2016-07-14  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Potential null dereference under ViewGestureController::beginSwipeGesture()
        https://bugs.webkit.org/show_bug.cgi?id=159776
        <rdar://problem/22467100>

        Reviewed by Tim Horton.

        Potential null dereference under ViewGestureController::beginSwipeGesture() of:
        m_webPageProxy.backForwardList().currentItem()

        The client side is expected to call ViewGestureController::canSwipeInDirection() but
        this only guarantees that the m_alternateBackForwardListSourceView's currentItem is
        non-null when m_alternateBackForwardListSourceView is non-null. It does not guarantee
        that m_webPageProxy's currentItem is non-null.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):

2016-07-14  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(WEB_SOCKETS) build after r202930
        https://bugs.webkit.org/show_bug.cgi?id=159768

        Reviewed by Alex Christensen.

        * WebProcess/Network/WebSocketProvider.h:

2016-07-14  Chris Dumez  <cdumez@apple.com>

        Possible crash under NavigationState::NavigationClient::processDidCrash()
        https://bugs.webkit.org/show_bug.cgi?id=159773
        <rdar://problem/19814215>

        Reviewed by Anders Carlsson.

        Add a m_navigationState.m_navigationDelegateMethods.webViewWebProcessDidCrash before
        trying to call it to avoid crashing if the client does not implement it.

        At the beginning of the method, we abort early only if both webViewWebContentProcessDidTerminate
        and webViewWebProcessDidCrash are implemented. However, if webViewWebContentProcessDidTerminate
        implemented but not webViewWebProcessDidCrash we can end up crashing as we fail to check later
        on before trying to call it.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::processDidCrash):

2016-07-14  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the DatabaseProcess build with disabled IDB
        https://bugs.webkit.org/show_bug.cgi?id=159769

        Reviewed by Alex Christensen.

        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::didClose):

2016-07-14  Hyunjun Ko  <zzoon@igalia.com>

        [ThreadedCompositor] Build fails in debug mode after r202040
        https://bugs.webkit.org/show_bug.cgi?id=159757

        Reviewed by Michael Catanzaro.

        Debug mode build failed due to call getter method, which is
        removed, in ASSERT().

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::glContext): Deleted.
        (WebKit::ThreadedCompositor::didChangeVisibleRect): Deleted.
        (WebKit::ThreadedCompositor::renderLayerTree): Deleted.

2016-07-13  Alex Christensen  <achristensen@webkit.org>

        Modernize WebSocket handle
        https://bugs.webkit.org/show_bug.cgi?id=159750

        Reviewed by Brady Eidson.

        * UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp:
        (WebKit::connectionCallback):

2016-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r202273): [GTK] Redirected X window is resized to the previous size on size allocate
        https://bugs.webkit.org/show_bug.cgi?id=159551

        Reviewed by Michael Catanzaro.

        In r202273 I added webkitWebViewBaseResizeRedirectedWindow() helper to remove duplicated code in all places
        where we were resizing the redirected window to the current drawing area size. But on size allocate, we were
        updating the redirected window first, and then the drawing area, to ensure that when the drawing area notifies
        the web process the redirected window is already at the new size. This regression doesn't have any visual
        effect, because we are ensure the right size always before rendering, but there's a small extra resize in this case.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSizeAllocate): Resize the redirected window before updating the drawing area size.

2016-07-13  Chris Dumez  <cdumez@apple.com>

        [WK2] Use more references for connections
        https://bugs.webkit.org/show_bug.cgi?id=159739

        Reviewed by Alex Christensen.

        Use more references for connections to make it more obvious they cannot
        be null.

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::DatabaseToWebProcessConnection):
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        (WebKit::DatabaseToWebProcessConnection::connection):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::messageSenderConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::connection):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::messageSenderConnection):
        * Shared/mac/CookieStorageShim.mm:
        (WebKit::webKitCookieStorageCopyRequestHeaderFieldsForURL):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::messageSenderConnection):
        (WebKit::preregisterSandboxExtensionsIfNecessary):
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::WebToDatabaseProcessConnection):
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        (WebKit::WebToDatabaseProcessConnection::connection):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLOptionallyFileBacked):
        (WebKit::BlobRegistryProxy::unregisterBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLForSlice):
        (WebKit::BlobRegistryProxy::blobSize):
        (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles):
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit::NetworkProcessConnection::connection):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::remove):
        (WebKit::WebLoaderStrategy::setDefersLoading):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::createPingHandle):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::messageSenderConnection):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookiesForDOM):
        (WebKit::WebPlatformStrategies::setCookiesFromDOM):
        (WebKit::WebPlatformStrategies::cookiesEnabled):
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebKit::WebPlatformStrategies::getRawCookies):
        (WebKit::WebPlatformStrategies::deleteCookie):
        (WebKit::WebPlatformStrategies::addCookie):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureLegacyPrivateBrowsingSessionInNetworkProcess):
        (WebKit::WebProcess::networkConnection):
        (WebKit::WebProcess::prefetchDNS):
        * WebProcess/WebProcess.h:

2016-07-13  Anders Carlsson  <andersca@apple.com>

        Move WKPreferencesRef functions to the correct file
        https://bugs.webkit.org/show_bug.cgi?id=159741

        Reviewed by Sam Weinig.

        Also, get rid of WKPreferencesGetPaymentsEnabled and WKPreferencesSetPaymentsEnabled.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetApplePayEnabled):
        (WKPreferencesSetApplePayEnabled):
        (WKPreferencesGetApplePayCapabilityDisclosureAllowed):
        (WKPreferencesSetApplePayCapabilityDisclosureAllowed):
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
        (WKPreferencesGetApplePayEnabled): Deleted.
        (WKPreferencesSetApplePayEnabled): Deleted.
        (WKPreferencesGetApplePayCapabilityDisclosureAllowed): Deleted.
        (WKPreferencesSetApplePayCapabilityDisclosureAllowed): Deleted.
        (WKPreferencesGetPaymentsEnabled): Deleted.
        (WKPreferencesSetPaymentsEnabled): Deleted.

2016-07-13  Anders Carlsson  <andersca@apple.com>

        Add _applePayCapabilityDisclosureAllowed SPI declaration
        https://bugs.webkit.org/show_bug.cgi?id=159740

        Reviewed by Dan Bernstein.

        Also, delete an old method that is no longer used.

        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _paymentsEnabled]): Deleted.
        (-[WKWebViewConfiguration _setPaymentsEnabled:]): Deleted.

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

        Blank news article on kottke.org
        https://bugs.webkit.org/show_bug.cgi?id=159733
        <rdar://problem/26743065>

        Reviewed by Simon Fraser.

        This patch ensures that we update the visible content rect, when Auto Layout moves the WKWebView around.
        We normally expect setFrameRect to be called to position WKWebView. However Auto Layout relies on layoutSubviews,
        and in order to always have up-to-date visible content rect, we need to override layoutSubviews in WKWebView. 

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

2016-07-13  Chris Dumez  <cdumez@apple.com>

        WebKit2 shouldn't signal custom protocol clients from the NSURLConnection loader thread.
        https://bugs.webkit.org/show_bug.cgi?id=159725
        <rdar://problem/27323131>

        Reviewed by Andy Estes.

        WebKit2 shouldn't signal custom protocol clients from the NSURLConnection
        loader thread. Instead, use the RunLoop the WKCustomProtocol was initialized
        on.

        * NetworkProcess/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (-[WKCustomProtocol initWithRequest:cachedResponse:client:]):
        (WebKit::dispatchOnInitializationRunLoop):
        (WebKit::CustomProtocolManager::didFailWithError):
        (WebKit::CustomProtocolManager::didLoadData):
        (WebKit::CustomProtocolManager::didReceiveResponse):
        (WebKit::CustomProtocolManager::didFinishLoading):
        (WebKit::CustomProtocolManager::wasRedirectedToRequest):
        (WebKit::dispatchOnResourceLoaderRunLoop): Deleted.

2016-07-13  Enrica Casucci  <enrica@apple.com>

        Update supported platforms in xcconfig files to match the sdk names.
        https://bugs.webkit.org/show_bug.cgi?id=159728

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:

2016-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Coordinated Graphics] Remove toCoordinatedGraphicsLayer and use downcast instead
        https://bugs.webkit.org/show_bug.cgi?id=159469

        Reviewed by Michael Catanzaro.

        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        (WebKit::CompositingCoordinator::initializeRootCompositingLayerIfNeeded):
        (WebKit::CompositingCoordinator::mainContentsLayer):

2016-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitGtk+ uses too many file descriptors
        https://bugs.webkit.org/show_bug.cgi?id=152316

        Reviewed by Michael Catanzaro.

        The problem is that we are keeping file descriptors open in SharedMemory objects. Those objects can be kept
        alive for a long time, for example in case of cached resources sent from the network process as shareable
        resources. The thing is that we keep the file descriptor in the SharedMemory object only to be able to create a
        Handle, duplicating the file descriptor. However, we are also assuming that we create handles for SharedMemory
        objects created by another handle which is wrong. SharedMemory objects are created to map a file or data and
        then a handle is created to send it to another process, or to map an existing file or data for a given handle
        received from another process. They can also be created to wrap another map, but in that case we don't own the
        file descritor nor the mapped data. So, after mapping from a handle, we no longer need the file descriptor, and
        it can be closed to release it, while the mapped memory data will still be alive until munmap() is called. This
        drastically reduces the amount of file descriptors used by WebKitGTK+.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::readBytesFromSocket): Use setCloseOnExec().
        (IPC::Connection::createPlatformConnection): Ditto.
        * Platform/SharedMemory.h:
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::map): Close the file descriptor right after mmap.
        (WebKit::SharedMemory::~SharedMemory): Close the file descriptor only if it hasn't been closed yet.
        (WebKit::SharedMemory::createHandle): Add an ASSERT to ensure we only try to create a handle for SharedMemory
        objects having a valid file descriptor. Use dupCloseOnExec() to duplicate the handle and set the close on exec flag.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Use setCloseOnExec().

2016-07-12  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] After zooming and when under memory pressure, page tiles sometimes don't redraw while panning
        https://bugs.webkit.org/show_bug.cgi?id=159697
        rdar://problem/26314075

        Reviewed by Benjamin Poulain.

        When under memory pressure, and after pinching back to minimum scale, WebPage::updateVisibleContentRects()
        would sometimes always bail under the "boundedScale != currentScale..." condition.

        This happened because the visibleContentRectUpdateInfo.scale() is a double, but m_page->pageScaleFactor()
        is a float, and the constraining between min and max scale (which are doubles) caused boundedScale
        to be always different from currentScale.

        Fix by using floats throughout.

        No test because there's no way to simulate memory pressure for testing.

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

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

        [WK2][NetworkSession] Fix unsafe RunLoop::dispatch() in NetworkLoad constructor
        https://bugs.webkit.org/show_bug.cgi?id=159691

        Reviewed by Brady Eidson.

        Remove unsafe RunLoop::dispatch() in NetworkLoad constructor. It captured |this| but there
        was no guarantee the NetworkLoad would still be alive by the time the lambda gets executed.

        Instead, the constructor now takes a NetworkSession& parameter so that the call sites
        have to retrieve the NetworkSession for a given SessionID and deal with the fact that
        there may be no such NetworkSession before constructing the NetworkLoad.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):

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

        [WK2] Protect against bad database data in LocalStorageDatabase::importItems()
        https://bugs.webkit.org/show_bug.cgi?id=159663
        <rdar://problem/18995873>

        Reviewed by Benjamin Poulain.

        Protect against bad database data in LocalStorageDatabase::importItems(). We
        crash if the database contains a null key or a null value so protect against
        it given that we have evidence it can happen.

        With this change, I can no longer reproduce the UIProcess crash on evernote.com
        that is documented at <rdar://problem/18995873>.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::importItems):

2016-07-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove ENABLE_CSS3_TEXT_LINE_BREAK flag
        https://bugs.webkit.org/show_bug.cgi?id=159671

        Reviewed by Csaba Osztrogonác.

        ENABLE_CSS3_TEXT_LINE_BREAK feature was implemented without guards.
        https://bugs.webkit.org/show_bug.cgi?id=89235

        So this guard can be removed in build scripts.

        * Configurations/FeatureDefines.xcconfig:

2016-07-11  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr in platform/efl and platform/mac 
        https://bugs.webkit.org/show_bug.cgi?id=159548

        Reviewed by Alex Christensen.

        Remove all use of PassRefPtr and clean up unnecessary tabs and spaces.
        WebKit2 codes are also changed because of setBufferForType()'s modification.

        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::setBufferForType):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

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

        [WK2][iOS] Intermittent crash in [UIApplication beginBackgroundTaskWithName] expiration handler
        https://bugs.webkit.org/show_bug.cgi?id=159648
        <rdar://problem/27219361>

        Reviewed by Anders Carlsson.

        We see an intermittent crash in [UIApplication beginBackgroundTaskWithName] expiration handler.
        From the traces, we noticed the expiration handler can get called on a non-main thread under
        certain conditions, which our code is designed to deal with.

        In particular, we get called on a non-main thread when UIKit fails to acquire the assertion.
        Update our expiration handler to always notify the clients on the main thread.

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

2016-07-11  Dan Bernstein  <mitz@apple.com>

        Tried to fix the macOS build.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction description]):

2016-07-11  Dan Bernstein  <mitz@apple.com>

        Cleaned up API availability.

        Requested by Tim Horton.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:

2016-07-11  Enrica Casucci  <enrica@apple.com>

        Add synthetic click origin to WKNavigationAction.
        https://bugs.webkit.org/show_bug.cgi?id=159584
        rdar://problem/25610422

        Reviewed by Tim Horton.

        Adds a private property to WKNavigationAction to retrieve
        the origin of the synthetic click.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * Shared/WebEvent.h:
        (WebKit::WebMouseEvent::button):
        (WebKit::WebMouseEvent::menuTypeForEvent):
        (WebKit::WebMouseEvent::force):
        (WebKit::WebMouseEvent::syntheticClickType):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::WebMouseEvent):
        (WebKit::WebMouseEvent::encode):
        (WebKit::WebMouseEvent::decode):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        * UIProcess/API/APINavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (toWKNavigationType):
        (toWKSyntheticClickType):
        (-[WKNavigationAction description]):
        (-[WKNavigationAction sourceFrame]):
        (-[WKNavigationAction request]):
        (-[WKNavigationAction _syntheticClickType]):
        (-[WKNavigationAction modifierFlags]):
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _twoFingerSingleTapGestureRecognized:]):
        (-[WKContentView _longPressRecognized:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::getSelectionContext):
        (WebKit::WebPageProxy::handleTwoFingerTapAtPoint):
        (WebKit::WebPageProxy::selectWithTwoTouches):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::mouseButtonForMouseEvent):
        (WebKit::syntheticClickTypeForMouseEvent):
        (WebKit::InjectedBundleNavigationAction::modifiersForNavigationAction):
        (WebKit::InjectedBundleNavigationAction::mouseButtonForNavigationAction):
        (WebKit::InjectedBundleNavigationAction::syntheticClickTypeForNavigationAction):
        (WebKit::InjectedBundleNavigationAction::create):
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
        (WebKit::InjectedBundleNavigationAction::navigationType):
        (WebKit::InjectedBundleNavigationAction::modifiers):
        (WebKit::InjectedBundleNavigationAction::mouseButton):
        (WebKit::InjectedBundleNavigationAction::hitTestResult):
        (WebKit::InjectedBundleNavigationAction::formElement):
        (WebKit::InjectedBundleNavigationAction::syntheticClickType):
        (WebKit::InjectedBundleNavigationAction::shouldOpenExternalURLs):
        (WebKit::InjectedBundleNavigationAction::shouldTryAppLinks):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::navigateToPDFLinkWithSimulatedClick):
        (WebKit::WebPage::contextMenuAtPointInWindow):
        (WebKit::WebPage::dragEnded):
        (WebKit::WebPage::simulateMouseDown):
        (WebKit::WebPage::simulateMouseUp):
        (WebKit::WebPage::simulateMouseMotion):
        (WebKit::WebPage::setCompositionForTesting):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):
        (WebKit::WebPage::completePendingSyntheticClickForContentChangeObserver):
        (WebKit::WebPage::completeSyntheticClick):
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary):
        (WebKit::WebPage::handleTwoFingerTapAtPoint):
        (WebKit::WebPage::potentialTapAtPosition):
        (WebKit::WebPage::inspectorNodeSearchMovedToPosition):

2016-07-11  Anders Carlsson  <andersca@apple.com>

        Able to open multiple payment sheets in Safari at the same time
        https://bugs.webkit.org/show_bug.cgi?id=159637
        rdar://problem/26411339

        Reviewed by Beth Dakin.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp:
        (WebKit::WebPaymentCoordinatorProxy::showPaymentUI):
        Add result out parameter. Set the result to false if isShowingPaymentUI is true, otherwise set isShowingPaymentUI to true.
    
        (WebKit::WebPaymentCoordinatorProxy::didReachFinalState):
        Set isShowingPaymentUI to false.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::showPaymentUI):
        * WebProcess/ApplePay/WebPaymentCoordinator.h:
        The showPaymentUI message and client functions now return booleans.

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

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

        This change causes LayoutTest crashes on WK1 ASan (Requested
        by ryanhaddad on #webkit).

        Reverted changeset:

        "Use refs for ResourceLoaders"
        https://bugs.webkit.org/show_bug.cgi?id=159592
        http://trac.webkit.org/changeset/203064

2016-07-11  Nan Wang  <n_wang@apple.com>

        AX: WKWebView should have API to prevent pinch-to-zoom always being allowed
        https://bugs.webkit.org/show_bug.cgi?id=158364

        Reviewed by Anders Carlsson.

        Added a property in WKWebViewConfiguration so that developers can toggle the ignoring
        viewport scale limits setting.

        Changes are covered in modified tests.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetResourceCachingDisabled):
        (WKPageSetIgnoresViewportScaleLimits):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldAllowPictureInPictureMediaPlayback):
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _navigationGestureDidEnd]):
        (forceAlwaysUserScalableChangedCallback): Deleted.
        (-[WKWebView _updateForceAlwaysUserScalable]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSize):
        (WebKit::WebPageProxy::setForceAlwaysUserScalable):
        (WebKit::WebPageProxy::setMaximumUnobscuredSize):
        (WebKit::WebPageProxy::updateForceAlwaysUserScalable): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::disableInspectorNodeSearch):
        (WebKit::WebPage::setForceAlwaysUserScalable):
        (WebKit::innerFrameQuad):
        (WebKit::WebPage::updateForceAlwaysUserScalable): Deleted.

2016-07-08  Alex Christensen  <achristensen@webkit.org>

        Use refs for ResourceLoaders
        https://bugs.webkit.org/show_bug.cgi?id=159592

        Reviewed by Chris Dumez.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleInternallyFailedLoad):
        (WebKit::WebLoaderStrategy::internallyFailedLoadTimerFired):
        (WebKit::WebLoaderStrategy::startLocalLoad):
        (WebKit::WebLoaderStrategy::remove):
        (WebKit::WebLoaderStrategy::setDefersLoading):
        (WebKit::WebLoaderStrategy::crossOriginRedirectReceived):
        * WebProcess/Network/WebLoaderStrategy.h:

2016-07-11  Antti Koivisto  <antti@apple.com>

        Update stable cache version in NetworkCache::Storage::deleteOldVersions()
        https://bugs.webkit.org/show_bug.cgi?id=159618
        rdar://problem/26715745

        Reviewed by Chris Dumez.

        NetworkCache::Storage::deleteOldVersions() keeps the previous shipped cache version (4) for Mac around so
        development WebKit doesn’t clobber system Safari cache. Update this to the current version so old caches
        go away in customer systems.

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

            Move lastStableVersion to header next to the current version.

2016-07-10  Beth Dakin  <bdakin@apple.com>

        Update mediaIcon.pdf
        https://bugs.webkit.org/show_bug.cgi?id=159613
        -and corresponding-
        rdar://problem/27268111

        Reviewed by Sam Weinig.

        * Resources/mediaIcon.pdf: Replaced.

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

        Add self to WebKit2 Owners
        https://bugs.webkit.org/show_bug.cgi?id=159499

        Reviewed by Sam Weinig.

        * Owners:

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

        Fix client certificate authentication after r200463
        https://bugs.webkit.org/show_bug.cgi?id=159574
        <rdar://problem/26931006>

        Reviewed by Sam Weinig.

        * Shared/Authentication/mac/AuthenticationManager.mac.mm:
        (WebKit::leafCertificate):
        (WebKit::chain):
        Handle the different types of CertificateInfos.

2016-07-08  Yongjun Zhang  <yongjun_zhang@apple.com>

        When WKWebView prepares the session state blob, we should be able to filter it.
        https://bugs.webkit.org/show_bug.cgi?id=159410

        Add a SPI to WKWebView so that a client can decide how to filter backforward items
        when WKWebView perparing session state.

        Reviewed by Brady Eidson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _sessionStateWithFilter:]): When preparing session state, check each
        backforward item against the filter block.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Add the SPI _sessionStateWithFilter:


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

        Mail messages don't start loading until scrolling completes
        https://bugs.webkit.org/show_bug.cgi?id=159585
        <rdar://problem/27088405>

        Reviewed by Andy Estes.

        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (-[WKCustomProtocolLoader initWithCustomProtocolManagerProxy:customProtocolID:request:connection:]):
        When scrolling, NSDefaultRunLoopMode isn't run, but NSRunLoopCommonModes are.
        CFNetwork uses NSDefaultRunLoopMode if we tell NSURLConnection to "start immediately",
        but we can instead schedule our NSURLConnection into NSRunLoopCommonModes
        and start it ourselves, ensuring that it will be able to do work while scrolling is happening.

2016-07-08  Andy Estes  <aestes@apple.com>

        [Content Filtering] Load blocked pages more like other error pages are loaded
        https://bugs.webkit.org/show_bug.cgi?id=159485
        <rdar://problem/26014076>

        Reviewed by Brady Eidson.

        * Shared/API/c/WKErrorRef.h: Defined kWKErrorCodeFrameLoadBlockedByContentFilter.
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess): Added the resource directories
        of WebCore.framework and WebKit.framework as paths with assumed read access.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::hasAssumedReadAccessToURL): Checked platformPathsWithAssumedReadAccess()
        as well as m_localPathsWithAssumedReadAccess.
        (WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess): Added a non-Cocoa implementation.
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebCoreSupport/WebErrors.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::blockedByContentFilterError): Called WebKit::blockedByContentFilterError().
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::blockedByContentFilterError): Returned a ResourceError for kWKErrorCodeFrameLoadBlockedByContentFilter.

2016-07-08  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * PluginProcess/mac/PluginProcessShim.mm:

2016-07-07  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r196321): Adobe Reader DC + Safari : Zoom level pulldown is not displayed at the correct position
        https://bugs.webkit.org/show_bug.cgi?id=159531
        rdar://problem/26382579

        Reviewed by Tim Horton.

        There's code in the Adobe Acrobat framework that checks if the main bundle identifier is "com.apple.WebKit.PluginProcess"
        and assumes that it's running inside the Adobe Reader app if it's something else. Since we're now using the XPC service
        for all plug-ins, the bundle identifier is "com.apple.WebKit.Plugin.64", so the Acrobat framework assumes it's running in the app
        and doesn't use any special tricks to show the popup menu.
        
        Work around this by shimming CFStringCompare, and looking for the exact conditions when this can happen and return kCFCompareEqualTo
        when all conditions are true.
        
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::isAdobeAcrobatAddress):
        (WebKit::stringCompare):
        (WebKit::initializeShim):
        (WebKit::PluginProcess::platformInitializeProcess):
        * PluginProcess/mac/PluginProcessShim.h:
        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shimCFStringCompare):

2016-07-08  Brady Eidson  <beidson@apple.com>

        Unreviewed: Fix case-sensitive filesystem build.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:

2016-07-08  Commit Queue  <commit-queue@webkit.org>

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

        caused some tests to crash under GuardMalloc (Requested by
        estes on #webkit).

        Reverted changeset:

        "[Content Filtering] Load blocked pages more like other error
        pages are loaded"
        https://bugs.webkit.org/show_bug.cgi?id=159485
        http://trac.webkit.org/changeset/202944

2016-07-08  Keith Rollin  <krollin@apple.com>

        Add always-on logging for downloads
        https://bugs.webkit.org/show_bug.cgi?id=159521
        <rdar://problem/26630645>

        Reviewed by Alex Christensen.

        Add logging statements that track when a download starts, when it
        first receives data, and when the download is done (due to completion,
        cancelation, or failure).

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        (WebKit::Download::didReceiveResponse):
        (WebKit::Download::didReceiveData):
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        (WebKit::Download::isAlwaysOnLoggingAllowed):
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::Download):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):

2016-07-08  Brady Eidson  <beidson@apple.com>

        Clearing LocalStorage doesn't also delete -wal and -shm files.
        <rdar://problem/27206772> and https://bugs.webkit.org/show_bug.cgi?id=159566

        Reviewed by Brent Fulgham.
        Also helpfully picked over by Andy "Never Forgets" Estes.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::removeDatabaseWithOriginIdentifier):

2016-07-07  Andy Estes  <aestes@apple.com>

        [Content Filtering] Load blocked pages more like other error pages are loaded
        https://bugs.webkit.org/show_bug.cgi?id=159485
        <rdar://problem/26014076>

        Reviewed by Brady Eidson.

        * Shared/API/c/WKErrorRef.h: Defined kWKErrorCodeFrameLoadBlockedByContentFilter.
        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess): Added the resource directories
        of WebCore.framework and WebKit.framework as paths with assumed read access.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::hasAssumedReadAccessToURL): Checked platformPathsWithAssumedReadAccess()
        as well as m_localPathsWithAssumedReadAccess.
        (WebKit::WebProcessProxy::platformPathsWithAssumedReadAccess): Added a non-Cocoa implementation.
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebCoreSupport/WebErrors.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::blockedByContentFilterError): Called WebKit::blockedByContentFilterError().
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::blockedByContentFilterError): Returned a ResourceError for kWKErrorCodeFrameLoadBlockedByContentFilter.

2016-07-07  Alex Christensen  <achristensen@webkit.org>

        Followup to r202939.
        https://bugs.webkit.org/show_bug.cgi?id=159526

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFailLoading):
        We need the correct destination id when sending a message.

2016-07-07  Alex Christensen  <achristensen@webkit.org>

        Fix crash when sending failure message to closed WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=159526
        <rdar://problem/26767037>

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFailLoading):
        Check to see if there is a connection before using it to send a message.
        Sometimes it was null.
        I think this could be tested if we had real network loading from TestWebKitAPI
        by cancelling slow loads and closing WebProcesses around the same time, but no such infrastructure exists yet.

2016-07-07  Alex Christensen  <achristensen@webkit.org>

        Use SocketProvider to create WebSocketChannels
        https://bugs.webkit.org/show_bug.cgi?id=158776

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebSocketProvider.cpp: Copied from Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.cpp.
        (WebKit::WebSocketProvider::createWebSocketChannel):
        (WebCore::ThreadableWebSocketChannel::create): Deleted.
        * WebProcess/Network/WebSocketProvider.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):

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

        <img> with a wide gamut PDF does not display using a wide gamut color space
        https://bugs.webkit.org/show_bug.cgi?id=158983
        <rdar://problem/25720247>

        Reviewed by Dean Jackson.

        ColorSpace parameters have been replaced with CGColorSpaceRef parameters for IOSurface.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::decode):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2016-07-07  Anders Carlsson  <andersca@apple.com>

        Memory corruption destroying PaymentCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=159516
        rdar://problem/27222517

        Reviewed by Tim Horton.

        Introduce a new MessageReceiverMap::removeMessageReceiver that takes a MessageReceiver
        and removes all traces of it in the message receiver map. Use it in the WebPaymentCoordinator destructor.

        * Platform/IPC/MessageReceiverMap.cpp:
        (IPC::MessageReceiverMap::removeMessageReceiver):
        * Platform/IPC/MessageReceiverMap.h:
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::removeMessageReceiver):
        * Shared/ChildProcess.h:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::~WebPaymentCoordinator):

2016-07-07  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed buildfix after r202889. Just for fun.

        * PlatformMac.cmake:

2016-07-06  Tim Horton  <timothy_horton@apple.com>

        Some API tests started failing after r202889
        https://bugs.webkit.org/show_bug.cgi?id=159498

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadHTMLString):
        Fix a typo; this is a MIME type, not an encoding :|

2016-07-06  Tim Horton  <timothy_horton@apple.com>

        Email from June 1st containing text 'Today @ 7:10PM' is linkified, but shouldn't be
        https://bugs.webkit.org/show_bug.cgi?id=159498
        <rdar://problem/26719903>

        Reviewed by Sam Weinig.

        * Shared/Cocoa/LoadParametersCocoa.mm: Added.
        (WebKit::LoadParameters::platformEncode):
        (WebKit::LoadParameters::platformDecode):
        * Shared/LoadParameters.cpp: Added.
        (WebKit::LoadParameters::encode):
        (WebKit::LoadParameters::decode):
        * Shared/LoadParameters.h: Added.
        Add a struct that knows how to encode all of the different parameters
        to all of the Load* messages, including the platform-specific DataDetectors parameters.

        * Shared/mac/ArgumentCodersMac.h:
        * Shared/mac/ArgumentCodersMac.mm:
        (IPC::typeFromObject):
        (IPC::encode):
        (IPC::decode):
        Add NSURL coders that defer to the CFURL coders.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::dataDetectionContext):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::dataDetectionContext):
        Add APIUIClient methods to retrieve the DataDetectors context dictionary.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::addPlatformLoadParameters):
        Add the DataDetectors context dictionary to the given LoadParameters.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dataDetectionContext):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::dataDetectionContext):
        Store the dataDetectionContext on WebPage, and make it accessible to WebCore
        via the FrameLoaderClient (it is used in FrameLoader when the load completes).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        (WebKit::WebPageProxy::loadPlainTextString):
        (WebKit::WebPageProxy::loadWebArchiveData):
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::loadStringImpl):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadString):
        (WebKit::WebPage::loadAlternateHTMLString):
        (WebKit::WebPage::loadHTMLString): Deleted.
        (WebKit::WebPage::loadPlainTextString): Deleted.
        (WebKit::WebPage::loadWebArchiveData): Deleted.
        * WebProcess/WebPage/WebPage.messages.in:
        Adopt LoadParameters, taking this opportunity to reduce the number of very similar messages.
        We can take this further (we should be able to get it down to just LoadRequest
        and LoadData) in the future. When any load occurs, grab the client's DataDetectorse
        context dictionary and send it along with the load request, storing it in WebPage.

2016-07-06  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Disable ResourceResponse lazy initialization
        https://bugs.webkit.org/show_bug.cgi?id=159497
        <rdar://problem/27209066>

        Reviewed by Alex Christensen.

        Disable ResourceResponse lazy initialization for WebKit2 as
        we always end up initializing all the fields anyway when
        sending the response to the WebContent process via IPC.

        Even worse, we always do a partial lazy initialization (common
        fields only) before the IPC so we always do the initialization
        in 2 steps. This normally would not be an issue but the 2 steps
        actually have some overlap because both call
        CFHTTPMessageCopyAllHeaderFields(), which is expensive (See
        <rdar://problem/26796059>) to first get the common HTTP headers,
        then ALL the HTTP headers.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):

2016-07-06  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Text suggestions should be cleared when form input session is invalidated        
        https://bugs.webkit.org/show_bug.cgi?id=159477

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession invalidate]): Set input delegate's suggestions to nil when a form input session is
        invalidated. This will set the keyboard QuickType suggestions back to their default values.

2016-07-06  Alex Christensen  <achristensen@webkit.org>

        Call continueCanAuthenticateAgainstProtectionSpace when cancelling loads waiting for the callback
        https://bugs.webkit.org/show_bug.cgi?id=159492
        <rdar://problem/26921670>

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/NetworkLoad.h:

2016-07-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [RTL Scrollbars] RTL Scrollbars broken with clients creating Web Views via [WKView initWithFrame:contextRef:pageGroupRef:]
        https://bugs.webkit.org/show_bug.cgi?id=159383
        <rdar://problem/26921117>

        Reviewed by Anders Carlsson.

        The code which consults with the userInterfaceLayoutDirection of the view is
        inside [WKWebView _initializeWithConfiguration:]. However, some clients create
        Web Views via [WKView initWithFrame:contextRef:pageGroupRef:] which doesn't
        call this code. Therefore, this codepath should do the same kind of direction
        consulting.

        * UIProcess/API/mac/WKView.mm:
        (toUserInterfaceLayoutDirection):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):

2016-07-06  Commit Queue  <commit-queue@webkit.org>

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

        This change caused an existing LayoutTest to crash on ios-
        simulator (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "<img> with a wide gamut PDF does not display using a wide
        gamut color space"
        https://bugs.webkit.org/show_bug.cgi?id=158983
        http://trac.webkit.org/changeset/202867

2016-07-06  Enrica Casucci  <enrica@apple.com>

        Limit touch distance for two finger tap.
        https://bugs.webkit.org/show_bug.cgi?id=159476
        rdar://problem/26439052

        Reviewed by Beth Dakin.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        * Platform/spi/ios/UIKitSPI.h

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

        <img> with a wide gamut PDF does not display using a wide gamut color space
        https://bugs.webkit.org/show_bug.cgi?id=158983
        <rdar://problem/25720247>

        Reviewed by Tim Horton.

        ColorSpace parameters have been replaced with CGColorSpaceRef parameters for IOSurface.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::decode):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2016-07-06  Commit Queue  <commit-queue@webkit.org>

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

        didn't reduce coreui memory usage (Requested by kling on
        #webkit).

        Reverted changeset:

        "[Mac] Get rid of the old timey rubber-banding linen pattern."
        https://bugs.webkit.org/show_bug.cgi?id=159329
        http://trac.webkit.org/changeset/202725

2016-07-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Duplicated code in DrawingAreaImpl and CoordinatedDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=159259

        Reviewed by Žan Doberšek.

        It seems that CoordinatedDrawingArea is just a copy paste of DrawingAreaImpl with non-accelerated code path
        removed. There's actually nothing (or very little) specific to coordinated graphics in the
        CoordinatedDrawingArea implementation. This patch renames CoordinatedDrawingArea as AcceleratedDrawingArea and
        makes DrawingAreaImpl inherit from it, so that in case of accelerated compositing the parent class is used, and
        DrawingAreaImpl only adds the non accelerated code path.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebProcess/WebPage/AcceleratedDrawingArea.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp.
        (WebKit::AcceleratedDrawingArea::~AcceleratedDrawingArea):
        (WebKit::AcceleratedDrawingArea::AcceleratedDrawingArea):
        (WebKit::AcceleratedDrawingArea::setNeedsDisplay):
        (WebKit::AcceleratedDrawingArea::setNeedsDisplayInRect):
        (WebKit::AcceleratedDrawingArea::scroll):
        (WebKit::AcceleratedDrawingArea::pageBackgroundTransparencyChanged):
        (WebKit::AcceleratedDrawingArea::setLayerTreeStateIsFrozen):
        (WebKit::AcceleratedDrawingArea::forceRepaint):
        (WebKit::AcceleratedDrawingArea::forceRepaintAsync):
        (WebKit::AcceleratedDrawingArea::setPaintingEnabled):
        (WebKit::AcceleratedDrawingArea::updatePreferences):
        (WebKit::AcceleratedDrawingArea::mainFrameContentSizeChanged):
        (WebKit::AcceleratedDrawingArea::layerHostDidFlushLayers):
        (WebKit::AcceleratedDrawingArea::graphicsLayerFactory):
        (WebKit::AcceleratedDrawingArea::setRootCompositingLayer):
        (WebKit::AcceleratedDrawingArea::scheduleCompositingLayerFlush):
        (WebKit::AcceleratedDrawingArea::scheduleCompositingLayerFlushImmediately):
        (WebKit::AcceleratedDrawingArea::updateBackingStoreState):
        (WebKit::AcceleratedDrawingArea::sendDidUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingArea::suspendPainting):
        (WebKit::AcceleratedDrawingArea::resumePainting):
        (WebKit::AcceleratedDrawingArea::enterAcceleratedCompositingMode):
        (WebKit::AcceleratedDrawingArea::exitAcceleratedCompositingModeSoon):
        (WebKit::AcceleratedDrawingArea::didReceiveCoordinatedLayerTreeHostMessage):
        (WebKit::AcceleratedDrawingArea::viewStateDidChange):
        (WebKit::AcceleratedDrawingArea::attachViewOverlayGraphicsLayer):
        * WebProcess/WebPage/AcceleratedDrawingArea.h: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h.
        (WebKit::AcceleratedDrawingArea::exitAcceleratedCompositingModePending):
        (WebKit::AcceleratedDrawingArea::didUpdateBackingStoreState):
        (WebKit::AcceleratedDrawingArea::exitAcceleratedCompositingMode):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::setNeedsDisplay):
        (WebKit::DrawingAreaImpl::setNeedsDisplayInRect):
        (WebKit::DrawingAreaImpl::scroll):
        (WebKit::DrawingAreaImpl::forceRepaint):
        (WebKit::DrawingAreaImpl::setRootCompositingLayer):
        (WebKit::DrawingAreaImpl::updateBackingStoreState):
        (WebKit::DrawingAreaImpl::didUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::suspendPainting):
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::~DrawingAreaImpl): Deleted.
        (WebKit::DrawingAreaImpl::mainFrameContentSizeChanged): Deleted.
        (WebKit::DrawingAreaImpl::updatePreferences): Deleted.
        (WebKit::DrawingAreaImpl::didUpdate): Deleted.
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode): Deleted.
        (WebKit::DrawingAreaImpl::scheduleDisplay): Deleted.
        (WebKit::DrawingAreaImpl::displayTimerFired): Deleted.
        (WebKit::DrawingAreaImpl::display): Deleted.
        (WebKit::shouldPaintBoundsRect): Deleted.
        (WebKit::DrawingAreaImpl::setNativeSurfaceHandleForCompositing): Deleted.
        * WebProcess/WebPage/DrawingAreaImpl.h:

2016-07-06  Youenn Fablet  <youenn@apple.com>

        Refactor NetworkResourceLoadParameters
        https://bugs.webkit.org/show_bug.cgi?id=159402

        Reviewed by Alex Christensen.

        Making NetworkResourceLoadParameters derive from NetworkLoadParameters.

        * CMakeLists.txt: Removed NetworkLoadParameters.cpp
        * NetworkProcess/NetworkLoadParameters.cpp: Deleted.
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters): Deleted.
        * NetworkProcess/NetworkResourceLoadParameters.h: Making it derive from NetworkLoadParameters.
        * WebKit2.xcodeproj/project.pbxproj:

2016-07-05  Alex Christensen  <achristensen@webkit.org>

        Actually persist changes to cookie accept policy.
        https://bugs.webkit.org/show_bug.cgi?id=159377
        <rdar://problem/22774152>

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::NetworkSession):
        Added logging.
        * UIProcess/mac/WebCookieManagerProxyMac.mm:
        (WebKit::WebCookieManagerProxy::persistHTTPCookieAcceptPolicy):
        When we persist the cookie accept policy, we want to call _saveCookies to actually write the
        change to disk so that when we create a new process which reads from disk to determine its
        cookie accept policy, it will read the new cookie accept policy.  Before this patch it was
        reading the old one in some cases where the changes had not yet been persisted to disk.

2016-07-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Coordinated Graphics] Modernize and cleanup CompositingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=159212

        Reviewed by Žan Doberšek.

        Changes done:

          - Use references instead of pointers when possible.
          - Add missing final/override keywords.
          - Reduce the use of PassRefPtr
          - Move member initializations to the declaration.
          - Use nullptr instead of 0.
          - Use HashMap::ensure() instead of complicated code with iterators.
          - Avoid heap allocation when possible.

        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::paintToSurface):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp:
        (WebKit::ThreadSafeCoordinatedSurface::paintToSurface):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.h:
        * WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.cpp:
        (WebKit::GeneralAreaAllocator::expand):
        (WebKit::GeneralAreaAllocator::splitNode):
        (WebKit::GeneralAreaAllocator::release):
        (WebKit::GeneralAreaAllocator::GeneralAreaAllocator): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.h:
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp:
        (WebKit::CompositingCoordinator::CompositingCoordinator):
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        (WebKit::CompositingCoordinator::createImageBackingIfNeeded):
        (WebKit::CompositingCoordinator::updateImageBacking):
        (WebKit::CompositingCoordinator::notifyFlushRequired):
        (WebKit::CompositingCoordinator::paintContents):
        (WebKit::CompositingCoordinator::createUpdateAtlas):
        (WebKit::CompositingCoordinator::commitScrollOffset):
        (WebKit::CompositingCoordinator::paintToSurface):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::setViewOverlayRootLayer):
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::invalidate):
        (WebKit::CoordinatedLayerTreeHost::forceRepaint):
        (WebKit::CoordinatedLayerTreeHost::sizeDidChange):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::renderNextFrame):
        (WebKit::CoordinatedLayerTreeHost::purgeBackingStores):
        (WebKit::CoordinatedLayerTreeHost::layerFlushTimerFired):
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::CoordinatedLayerTreeHost::graphicsLayerFactory):
        (WebKit::CoordinatedLayerTreeHost::scheduleAnimation):
        (WebKit::CoordinatedLayerTreeHost::commitScrollOffset):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp:
        (WebKit::UpdateAtlas::UpdateAtlas):
        (WebKit::UpdateAtlas::~UpdateAtlas):
        (WebKit::UpdateAtlas::buildLayoutIfNeeded):
        (WebKit::UpdateAtlas::paintOnAvailableBuffer):
        (WebKit::UpdateAtlasSurfaceClient::UpdateAtlasSurfaceClient): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h:

2016-07-04  Brady Eidson  <beidson@apple.com>

        WebProcesses don't handle DatabaseProcess going away uncleanly..
        https://bugs.webkit.org/show_bug.cgi?id=159371

        Reviewed by Alex Christensen.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::terminateDatabaseProcess): Deleted.

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::connectionToServerLost):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::didReceiveMessage):
        (WebKit::WebToDatabaseProcessConnection::didClose): Notify each connection
          that the database server connection dropped.

2016-07-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] Null WebCore::Range dereference in WebEditorClient::updateGlobalSelection
        https://bugs.webkit.org/show_bug.cgi?id=159341

        Reviewed by Carlos Garcia Campos.

        FrameSelection::toNormalizedRange() can return null. Null check is
        needed.

        Tests:
            editing/input/set-value-on-input-and-delete.html
            editing/selection/selection-in-iframe-removed-crash.html
            imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute.html
            imported/w3c/web-platform-tests/html/semantics/forms/textfieldselection/selection-after-content-change.html
            imported/w3c/web-platform-tests/html/semantics/forms/textfieldselection/selection-not-application-textarea.html
            imported/w3c/web-platform-tests/html/semantics/forms/textfieldselection/selection-not-application.html

        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection): Do not update
        global selection if FrameSelection::toNormalizedRange() returns
        null.

2016-07-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] ASSERTION_FAILED: m_key != PTHREAD_KEYS_MAX when defining WEBKIT2_PAUSE_WEB_PROCESS_ON_LAUNCH
        https://bugs.webkit.org/show_bug.cgi?id=158149

        Reviewed by Carlos Garcia Campos.

        WTF::sleep can not be used at the beginning of web process because
        WTF is not initialized at the moment yet.

        * WebProcess/gtk/WebProcessMainGtk.cpp: Use g_usleep instead of WTF::sleep.

2016-07-03  Dan Bernstein  <mitz@apple.com>

        Follow-up to r202789.

        Reviewed by Sam Weinig.

        Ensure that API that isn’t available at all on a platform is declared under an appropriate
        TARGET_OS_* conditional.

        * Shared/API/Cocoa/_WKHitTestResult.h:
        * Shared/API/Cocoa/_WKHitTestResult.mm:
        * Shared/API/Cocoa/_WKHitTestResultInternal.h:
        * UIProcess/API/Cocoa/WKOpenPanelParameters.h:
        * UIProcess/API/Cocoa/WKOpenPanelParameters.mm:
        * UIProcess/API/Cocoa/WKOpenPanelParametersInternal.h:
        * UIProcess/API/Cocoa/WKPreviewActionItemIdentifiers.h:
        * UIProcess/API/Cocoa/WKPreviewActionItemIdentifiers.mm:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2016-07-03  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Adopt modern API availability macros
        https://bugs.webkit.org/show_bug.cgi?id=159378

        Reviewed by Sam Weinig.

        iOS 10 and macOS Sierra introduce new macros for declaring API availability, defined in
        CFAvailability.h, including API_AVAILABLE, API_DEPRECATED, and
        API_DEPRECATED_WITH_REPLACEMENT. Rather than having positional parameters for macOS and iOS
        versions, the new macros take a variable number of function-like parameters, where the
        function specifies the platform to which it applies.

        To have WebKit2’s postprocessed headers use the new macros, we make the following changes:

        - Replace instances of WK_AVAILABLE(_mac, _ios) with WK_API_AVAILABLE(macosx(_mac), ios(_ios)),
          eliding a platform if its current availability is NA.
        - Change instances of WK_CLASS_AVAILABLE(_mac, _ios) to
          WK_CLASS_AVAILABLE(macosx(_mac), ios(_ios)), eliding a platform if its current
          availability is NA.
        - Replace instances of WK_DEPRECATED(_macIntro, _macDep, _iosIntro, _iosDep, ...) with
          WK_API_DEPRECATED_WITH_REPLACEMENT(_replacement, macosx(_macIntro, _macDep), ios(_iosIntro, _iosDep))
          when there is a one-for-one replacement, and with
          WK_API_DEPRECATED(_message, macosx(_macIntro, _macDep), ios(_iosIntro, _iosDep)) when the
          replacement isn’t one-for-one. Again, if the API doesn’t apply to a platform, then it’s
          elided.
        - Replace instances of WK_CLASS_DEPRECATED with WK_CLASS_DEPRECATED_WITH_REPLACEMENT,
          following the same rules.
        - Replace instances of the WK_ENUM_* macros with corresponding WK_API_* macros, now that
          all supported compilers support availability attributes on enum values.

        * Configurations/WebKit.xcconfig: Disable header postprocessing when building for iOS 9.x,
          which doesn’t have the new macros.

        * mac/postprocess-framework-headers.sh: Handle the new WK_* macros: WK_API_AVAILABLE becomes
          API_AVAILABLE; WK_API_DEPRECATED(_WITH_REPLACEMENT) become API_DEPRECATED(_WITH_REPLACEMENT);
          WK_CLASS_AVAILABLE and WK_CLASS_DEPRECATED(_WITH_REPLACEMENT) change to the corresponding
          API_ macros, prefixed with WK_EXTERN.
        * Shared/API/Cocoa/WKFoundation.h: When header postprocessing is disabled, provide
          definitions of the new WK_* macros we use.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h: In addition to the above, changed one
          instance of (iOS) 10_0 to WK_IOS_TBA.

        Made the above changes in the following headers:

        * Shared/API/Cocoa/WKBrowsingContextHandle.h:
        * Shared/API/Cocoa/_WKFrameHandle.h:
        * Shared/API/Cocoa/_WKHitTestResult.h:
        * Shared/API/Cocoa/_WKRemoteObjectInterface.h:
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.h:
        * Shared/API/Cocoa/_WKRenderingProgressEvents.h:
        * Shared/API/Cocoa/_WKSameDocumentNavigationType.h:
        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.h:
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.h:
        * UIProcess/API/Cocoa/WKConnection.h:
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKErrorPrivate.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKFrameInfoPrivate.h:
        * UIProcess/API/Cocoa/WKMenuItemIdentifiersPrivate.h:
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationData.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKOpenPanelParameters.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/WKProcessGroup.h:
        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKSecurityOrigin.h:
        * UIProcess/API/Cocoa/WKTypeRefWrapper.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/API/Cocoa/WKUserScript.h:
        * UIProcess/API/Cocoa/WKUserScriptPrivate.h:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h:
        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:
        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKExperimentalFeature.h:
        * UIProcess/API/Cocoa/_WKFindOptions.h:
        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/API/Cocoa/_WKInputDelegate.h:
        * UIProcess/API/Cocoa/_WKLayoutMode.h:
        * UIProcess/API/Cocoa/_WKOverlayScrollbarStyle.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKSessionState.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.h:
        * UIProcess/API/Cocoa/_WKUserContentWorld.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataSize.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMText.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:

2016-07-01  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Many layout tests are timeout after r202532.
        https://bugs.webkit.org/show_bug.cgi?id=159337

        Reviewed by Gyuyoung Kim.

        WebPageProxy::forceRepaint() wait for the next commit from the web process
        after r202532, but WebPageProxy::callAfterNextPresentationUpdate() is not 
        implemented in CoordinatedDrawingAreaProxy.

        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:
        (WebKit::CoordinatedDrawingAreaProxy::contentsRect):
        (WebKit::CoordinatedDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        (WebKit::CoordinatedDrawingAreaProxy::sizeDidChange):
        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.h:
        (WebKit::CoordinatedDrawingAreaProxy::page):

2016-07-01  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r189668): Notification tests are flakey
        https://bugs.webkit.org/show_bug.cgi?id=159375
        <rdar://problem/22760990>

        Reviewed by Alexey Proskuryakov.

        Implement WKNotificationManagerGetLocalID(). For more information, see the entry in Tools/ChangeLog.

        * UIProcess/API/C/WKNotificationManager.cpp:
        (WKNotificationManagerGetLocalID):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::notificationLocalIDForTesting):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:

2016-07-01  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r201405): Fullscreen video no longer enters low-power mode
        https://bugs.webkit.org/show_bug.cgi?id=159220
        <rdar://problem/26701056>

        Reviewed by Beth Dakin.

        In r201405, we removed the call to setTopContentInset(0) to avoid a flash
        during repainting where the WebProcess still thought it had an inset and
        the UIProcess did not, but the >0 inset breaks low power video playback 
        in fullscreen. So, instead, fix the repaint issue by setting a CALayer
        fence which makes sure both the UIProcess and WebProcess paint simultaneously
        after resizing and changing the top content inset.

        This requires a new message from WebPageProxy -> WebPage: setTopContentInsetFenced().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setTopContentInset):
        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setTopContentInsetFenced):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-07-01  Dan Bernstein  <mitz@apple.com>

        [Mac] Get rid of support for old SDKs
        https://bugs.webkit.org/show_bug.cgi?id=159369

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKFoundation.h: Removed the WK_ARRAY, WK_DICTIONARY, and WK_SET macros,
          which were only needed for pre-10.11 SDKs.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::mouseButtonForEvent): Removed checking for pre-10.10.3 SDKs.
        (WebKit::globalPointForEvent): Ditto.
        (WebKit::pointForEvent): Ditto.
        (WebKit::WebEventFactory::createWebMouseEvent): Ditto.

        * UIProcess/API/Cocoa/WKBackForwardList.h: Replaced WK_ARRAY(...) with NSArray<...>.

        * UIProcess/API/Cocoa/WKPreferences.mm: Ditto.
        (-[WKPreferences _setFixedPitchFontFamily:]):
        (+[WKPreferences _experimentalFeatures]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Ditto.

        * UIProcess/API/Cocoa/WKUIDelegate.h: Ditto.
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Ditto.

        * UIProcess/API/Cocoa/WKUserContentController.h: Ditto.
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h: Ditto.

        * UIProcess/API/Cocoa/WKUserScriptPrivate.h: Ditto.

        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h: Replaced WK_SET(...) with NSSet<...>.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h: Ditto.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: Ditto.
        (-[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        (-[WKWebsiteDataStore _fetchDataRecordsOfTypes:withOptions:completionHandler:]):

        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h: Ditto.

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: Replaced WK_ARRAY(...) with NSArray<...>.

        * UIProcess/API/Cocoa/_WKUserStyleSheet.h: Ditto.
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm: Ditto.
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:]):
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:userContentWorld:]):
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:userContentWorld:]):

        * UIProcess/API/Cocoa/_WKWebsiteDataSize.h: Replaced WK_SET(...) with NSSet<...>.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::pressureChangeWithEvent): Removed checking for pre-10.10.3 SDKs.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h: Replaced WK_ARRAY(...) with
          NSArray<...>.

        * mac/postprocess-framework-headers.sh: Removed sed rules for WK_ARRAY, WK_DICTIONARY and
          WK_SET.

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

        [iOS] Possible null Range dereference under computeAutocorrectionContext()
        https://bugs.webkit.org/show_bug.cgi?id=159328
        <rdar://problem/26766720>

        Reviewed by Benjamin Poulain.

        The code in computeAutocorrectionContext() was checking Editor::hasComposition()
        before dereferencing Editor::compositionRange(). However, compositionRange()
        can also return null in other cases (e.g. compositionStart == compositionEnd).

        Drop the check for hasComposition() and do a null check on the value returned
        by compositionRange() instead.

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

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

        Prevent crash when attempting to copy an image
        https://bugs.webkit.org/show_bug.cgi?id=159288
        <rdar://problem/23507828>

        Reviewed by Brady Eidson.
        
        WebKit could crash if the HTMLImageElement had a null cachedImage member.
        A little investigation showed that the URL we retrieve from the cachedImage
        is never used, so rather than adding a null check, let's just pass a
        default argument. The actual URL gets read from elsewhere in the pasteboard
        processing code.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performActionOnElement): Don't bother passing the
        unused URL argument to the pasteboard method.

2016-07-01  Brady Eidson  <beidson@apple.com>

        Blob content type not preserved when retrieving blobs from IndexedDB.
        <rdar://problem/27057357> and https://bugs.webkit.org/show_bug.cgi?id=159360

        Reviewed by Alex Christensen.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURLOptionallyFileBacked):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURLOptionallyFileBacked):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2016-07-01  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Get rid of WK_NULLABLE_SPECIFIER now that all supported compilers understand _Nullable
        https://bugs.webkit.org/show_bug.cgi?id=159361

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKFoundation.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * mac/postprocess-framework-headers.sh:

2016-07-01  Youenn Fablet  <youennf@gmail.com>

        Add a runtime flag for DOM iterators
        https://bugs.webkit.org/show_bug.cgi?id=159300

        Reviewed by Alex Christensen.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-07-01  Andreas Kling  <akling@apple.com>

        [Mac] Get rid of the old timey rubber-banding linen pattern.
        <https://webkit.org/b/159329>

        Reviewed by Benjamin Poulain.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::updateCustomAppearance):

2016-06-30  Tina Liu  <iting_liu@apple.com>

        Add SPI to allow restoring session state without navigation in WKPage
        https://bugs.webkit.org/show_bug.cgi?id=159326

        Reviewed by Brady Eidson.

        * UIProcess/API/C/WKPage.cpp:
        (restoreFromSessionState):
        Added a helper function that takes a bool parameter to specify whether
        to navigate or not when restoring from the session state.
        (WKPageRestoreFromSessionState):
        Calling restoreFromSessionState, passing navigate = true.
        (WKPageRestoreFromSessionStateWithoutNavigation):
        Ditto but passing navigate = false.
        * UIProcess/API/C/WKPagePrivate.h:

2016-06-30  Chris Dumez  <cdumez@apple.com>

        [iOS] WebContent processes do not exit promptly
        https://bugs.webkit.org/show_bug.cgi?id=159301
        <rdar://problem/26965488>

        Reviewed by Anders Carlsson.

        WebContent processes do not exit promptly, they hang around for 10 seconds
        until the watchdog forcefully calls exit().

        This patch addresses the issue by asking XPC to exit when clean. It also
        fixes 2 XPC transactions that were leaking so that XPC can become clean.

        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseServiceEntryPoint.mm:
        (DatabaseServiceInitializer):
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (NetworkServiceInitializer):
        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (PluginServiceInitializer):
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):
        Add extra priorityBoostMessage parameter which is then passed along to
        ChildProcess via initialization parameters. ChildProcess is now in
        charge of retaining the message for as long as it needs the priority
        boost. In particular, ChildProcess now takes care of releasing the
        boost message before existing to avoid leaking an XPC transaction.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::initialize):
        Retain priorityBoostMessage as a data member.

        (WebKit::ChildProcess::stopRunLoop):
        (WebKit::ChildProcess::platformStopRunLoop):
        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::platformStopRunLoop):
        On iOS, call XPCServiceExit() to exit instead of RunLoop::main().stop()
        which did not work.

        * Shared/ChildProcess.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        Set priorityBoostMessage on ChildProcessInitializationParameters.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceExit):
        Add XPCServiceExit() function which destroys the priority boost
        message, calls xpc_transaction_end() to balance the
        xpc_transaction_begin() in XPCServiceInitializer() and then call
        xpc_transaction_exit_clean() to ask XPC to exit when clean.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler):
        Leaking the "pre-bootstrap" event for priority boosting would cause us to
        leak an XPC transaction, which would prevent XPC from becoming clean and
        exiting. Instead, we now pass it along to the initialization function.
        We then pass it to ChildProcess which manages the lifetime of this message
        instead of leaking it.

2016-06-30  Brian Burg  <bburg@apple.com>

        REGRESSION(r202329): WebInspectorProxy's WKPagePolicyClient callbacks are not being called
        https://bugs.webkit.org/show_bug.cgi?id=159308
        <rdar://problem/27111764>

        Reviewed by Tim Horton.

        Adopt WKPageNavigationClient and ditch WKPolicyClient and WKPageLoaderClient.
        After r202329, it's not possible to set a WKPolicyClient for a WKPage/WebPageProxy that backs a WKWebView.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::isMainOrTestInspectorPage): Take a WebCore::ResourceRequest.
        (WebKit::processDidCrash): Deleted.
        (WebKit::webProcessDidCrash): Rename to match new client callback name.
        (WebKit::decidePolicyForNavigationAction): Rework this to take new argument types.
        (WebKit::WebInspectorProxy::eagerlyCreateInspectorPage):
        Install a WKPageNavigationClient. 

2016-06-30  Chris Dumez  <cdumez@apple.com>

        [iOS] Process suspension is prevented for 30 seconds after closing a tab
        https://bugs.webkit.org/show_bug.cgi?id=159280
        <rdar://problem/27014867>

        Reviewed by Gavin Barraclough.

        When closing a tab, ConnectionTerminationWatchdog takes a background
        assertion on behalf of the WebContent process and only releases it
        after 30 seconds, allowing for the WebContent process to exit cleanly
        without worrying about getting suspended too early.

        However, the child process normally exits much sooner than this and
        we end up holding a process assertion for no reason for a full 30
        seconds anyway. This patch addresses the issue by registering an
        invalidation handler with the BKSProcessAssertion and releasing our
        our assertion in such case. The invalidation handler gets called
        as soon as the child process exits.

        * Platform/spi/ios/AssertionServicesSPI.h:
        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::ProcessAssertion):
        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::validity):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::~ProcessAssertion):
        (WebKit::ProcessAndUIAssertion::updateRunInBackgroundCount):
        (WebKit::ProcessAndUIAssertion::ProcessAndUIAssertion):
        (WebKit::ProcessAssertion::setState): Deleted.

2016-06-30  Tim Horton  <timothy_horton@apple.com>

        Keep track of when a WKWebView is blank before the initial non-empty layout
        https://bugs.webkit.org/show_bug.cgi?id=159217
        <rdar://problem/26071766>

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setIsBlankBeforeFirstNonEmptyLayout:]):
        (-[WKWebView _didFirstVisuallyNonEmptyLayoutForMainFrame]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame):

2016-06-29  Gavin Barraclough  <barraclough@apple.com>

        Cleanup ProcessAssertion RunInBackground management
        https://bugs.webkit.org/show_bug.cgi?id=159284

        Reviewed by Chris Dumez.

        Factor out code that handles taking a background assertion on the UI app into
        ProcessAndUIAssertion::updateRunInBackgroundCount helper.

        This patch just cleanup to enable a futher fix.

        * UIProcess/ProcessAssertion.h:
        (WebKit::ProcessAssertion::state):
            - Added ProcessAndUIAssertion::updateRunInBackgroundCount
            - Added ProcessAndUIAssertion::m_isHoldingBackgroundAssertionOnApp
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAndUIAssertion::updateRunInBackgroundCount):
            - helper to manage calls to incrementNeedsToRunInBackgroundCount/decrementNeedsToRunInBackgroundCount
        (WebKit::ProcessAndUIAssertion::ProcessAndUIAssertion):
            - call updateRunInBackgroundCount
        (WebKit::ProcessAndUIAssertion::~ProcessAndUIAssertion):
            changed to use m_isHoldingBackgroundAssertionOnApp
        (WebKit::ProcessAndUIAssertion::setState):
            - call updateRunInBackgroundCount

2016-06-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Coordinated Graphics] Move CompositingCoordinator from platform to WebKit2 layer
        https://bugs.webkit.org/show_bug.cgi?id=159209

        Reviewed by Žan Doberšek.

        Move CompositingCoordinator and its helper classes to the WebKit2 layer.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.cpp: Renamed from Source/WebCore/platform/graphics/texmap/coordinated/AreaAllocator.cpp.
        (WebKit::AreaAllocator::AreaAllocator):
        (WebKit::AreaAllocator::~AreaAllocator):
        (WebKit::AreaAllocator::expand):
        (WebKit::AreaAllocator::expandBy):
        (WebKit::AreaAllocator::release):
        (WebKit::AreaAllocator::overhead):
        (WebKit::AreaAllocator::roundAllocation):
        (WebKit::GeneralAreaAllocator::GeneralAreaAllocator):
        (WebKit::GeneralAreaAllocator::~GeneralAreaAllocator):
        (WebKit::GeneralAreaAllocator::freeNode):
        (WebKit::GeneralAreaAllocator::expand):
        (WebKit::fitsWithin):
        (WebKit::GeneralAreaAllocator::allocate):
        (WebKit::GeneralAreaAllocator::allocateFromNode):
        (WebKit::GeneralAreaAllocator::splitNode):
        (WebKit::GeneralAreaAllocator::updateLargestFree):
        (WebKit::GeneralAreaAllocator::release):
        (WebKit::GeneralAreaAllocator::overhead):
        * WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.h: Renamed from Source/WebCore/platform/graphics/texmap/coordinated/AreaAllocator.h.
        (WebKit::nextPowerOfTwo):
        (WebKit::AreaAllocator::size):
        (WebKit::AreaAllocator::minimumAllocation):
        (WebKit::AreaAllocator::setMinimumAllocation):
        (WebKit::AreaAllocator::margin):
        (WebKit::AreaAllocator::setMargin):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.cpp: Renamed from Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.cpp.
        (WebKit::CompositingCoordinator::CompositingCoordinator):
        (WebKit::CompositingCoordinator::~CompositingCoordinator):
        (WebKit::CompositingCoordinator::setRootCompositingLayer):
        (WebKit::CompositingCoordinator::setViewOverlayRootLayer):
        (WebKit::CompositingCoordinator::sizeDidChange):
        (WebKit::CompositingCoordinator::flushPendingLayerChanges):
        (WebKit::CompositingCoordinator::timestamp):
        (WebKit::CompositingCoordinator::syncDisplayState):
        (WebKit::CompositingCoordinator::nextAnimationServiceTime):
        (WebKit::CompositingCoordinator::clearPendingStateChanges):
        (WebKit::CompositingCoordinator::initializeRootCompositingLayerIfNeeded):
        (WebKit::CompositingCoordinator::createRootLayer):
        (WebKit::CompositingCoordinator::syncLayerState):
        (WebKit::CompositingCoordinator::createImageBackingIfNeeded):
        (WebKit::CompositingCoordinator::createImageBacking):
        (WebKit::CompositingCoordinator::updateImageBacking):
        (WebKit::CompositingCoordinator::clearImageBackingContents):
        (WebKit::CompositingCoordinator::removeImageBacking):
        (WebKit::CompositingCoordinator::flushPendingImageBackingChanges):
        (WebKit::CompositingCoordinator::notifyAnimationStarted):
        (WebKit::CompositingCoordinator::notifyFlushRequired):
        (WebKit::CompositingCoordinator::paintContents):
        (WebKit::CompositingCoordinator::createGraphicsLayer):
        (WebKit::CompositingCoordinator::deviceScaleFactor):
        (WebKit::CompositingCoordinator::pageScaleFactor):
        (WebKit::CompositingCoordinator::createUpdateAtlas):
        (WebKit::CompositingCoordinator::removeUpdateAtlas):
        (WebKit::CompositingCoordinator::visibleContentsRect):
        (WebKit::CompositingCoordinator::mainContentsLayer):
        (WebKit::CompositingCoordinator::setVisibleContentsRect):
        (WebKit::CompositingCoordinator::deviceOrPageScaleFactorChanged):
        (WebKit::CompositingCoordinator::detachLayer):
        (WebKit::CompositingCoordinator::commitScrollOffset):
        (WebKit::CompositingCoordinator::renderNextFrame):
        (WebKit::CompositingCoordinator::purgeBackingStores):
        (WebKit::CompositingCoordinator::paintToSurface):
        (WebKit::CompositingCoordinator::scheduleReleaseInactiveAtlases):
        (WebKit::CompositingCoordinator::releaseInactiveAtlasesTimerFired):
        * WebProcess/WebPage/CoordinatedGraphics/CompositingCoordinator.h: Renamed from Source/WebCore/platform/graphics/texmap/coordinated/CompositingCoordinator.h.
        (WebKit::CompositingCoordinator::clearRootLayer):
        (WebKit::CompositingCoordinator::rootLayer):
        (WebKit::CompositingCoordinator::state):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp: Renamed from Source/WebCore/platform/graphics/texmap/coordinated/UpdateAtlas.cpp.
        (WebKit::UpdateAtlasSurfaceClient::UpdateAtlasSurfaceClient):
        (WebKit::UpdateAtlas::UpdateAtlas):
        (WebKit::UpdateAtlas::~UpdateAtlas):
        (WebKit::UpdateAtlas::buildLayoutIfNeeded):
        (WebKit::UpdateAtlas::didSwapBuffers):
        (WebKit::UpdateAtlas::paintOnAvailableBuffer):
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h: Renamed from Source/WebCore/platform/graphics/texmap/coordinated/UpdateAtlas.h.
        (WebKit::UpdateAtlas::size):
        (WebKit::UpdateAtlas::supportsAlpha):
        (WebKit::UpdateAtlas::addTimeInactive):
        (WebKit::UpdateAtlas::isInactive):
        (WebKit::UpdateAtlas::isInUse):

2016-06-29  Hunseop Jeong  <hs85.jeong@samsung.com>

        Unreviewed, CMake build fix.

        * PlatformMac.cmake:

2016-06-29  Beth Dakin  <bdakin@apple.com>

        Add media_icon to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=159273
        -and corresponding-
        rdar://problem/27087714

        Reviewed by Dean Jackson.

        * Resources/mediaIcon.pdf: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2016-06-29  Anders Carlsson  <andersca@apple.com>

        Rename addressFields to contactFields
        https://bugs.webkit.org/show_bug.cgi?id=159271
        rdar://problem/27086955

        Reviewed by Beth Dakin.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<PaymentRequest>::encode):
        (IPC::ArgumentCoder<PaymentRequest>::decode):
        (IPC::ArgumentCoder<PaymentRequest::ContactFields>::encode):
        (IPC::ArgumentCoder<PaymentRequest::ContactFields>::decode):
        (IPC::ArgumentCoder<PaymentRequest::AddressFields>::encode): Deleted.
        (IPC::ArgumentCoder<PaymentRequest::AddressFields>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toPKAddressField):
        (WebKit::toPKPaymentRequest):

2016-06-29  Jer Noble  <jer.noble@apple.com>

        Adopt MediaRemote.
        https://bugs.webkit.org/show_bug.cgi?id=159250

        Reviewed by Eric Carlson.

        Add a sandbox exception allowing access to the mediaremoted XPC service.

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

2016-06-29  Alex Christensen  <achristensen@webkit.org>

        WKWebView should ask WKNavigationDelegate about bad ssl certificates
        https://bugs.webkit.org/show_bug.cgi?id=159176
        rdar://problem/26864882

        Reviewed by Sam Weinig.

        This can be tested manually by visiting a site in MiniBrowser that has invalid ssl certificates, but we don't have proper ssl testing yet.
        Before this change, we would just open the site as if nothing were invalid, now we call the WKNavigationDelegate's didReceiveAuthenticationChallenge
        like we did before using NSURLSession, and we do not open the page, also like we did before using NSURLSession.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        When using NSURLConnection and responding to canAuthenticateAgainstProtectionSpace with YES,
        we get an NSURLAuthenticationChallenge when a bad ssl certificate is encountered in the handshake.
        When using NSURLSession, we want to call webView:didReceiveAuthenticationChallenge:completionHandler: in this case.
        The default implementation of NavigationState::NavigationClient::canAuthenticateAgainstProtectionSpace returns true
        if there is an implementation of webView:didReceiveAuthenticationChallenge:completionHandler: in its WKNavigationDelegate.
        Internal clients can implement _webView:canAuthenticateAgainstProtectionSpace: 
        and Safari uses canHandleHTTPSServerTrustEvaluation, so it will be unaffected.

2016-06-29  Beth Dakin  <bdakin@apple.com>

        Delete WKElementInfo since it's not used
        https://bugs.webkit.org/show_bug.cgi?id=159265

        Reviewed by Sam Weinig.

        * Shared/API/Cocoa/WebKit.h:
        * UIProcess/API/Cocoa/WKElementInfo.h: Removed.
        * UIProcess/API/Cocoa/WKElementInfo.mm: Removed.
        * UIProcess/API/Cocoa/WKElementInfoInternal.h: Removed.
        * UIProcess/API/Cocoa/WKPreviewElementInfo.h:
        * UIProcess/API/Cocoa/WKPreviewElementInfo.mm:
        (-[WKPreviewElementInfo _initWithLinkURL:]):
        (-[WKPreviewElementInfo copyWithZone:]):
        (-[WKPreviewElementInfo linkURL]):
        * UIProcess/API/Cocoa/WKPreviewElementInfoInternal.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.mm:
        (-[_WKContextMenuElementInfo copyWithZone:]):
        * WebKit2.xcodeproj/project.pbxproj:

2016-06-29  Jeremy Jones  <jeremyj@apple.com>

        Replace MPAudioVideoRoutingActionSheet with MPAVRoutingSheet.
        https://bugs.webkit.org/show_bug.cgi?id=159161
        <rdar://problem/26017691>

        Reviewed by Sam Weinig.

        MPAudioVideoRoutingActionSheet is being replaced by MPAVRoutingSheet,
        with only minor changes to the interface.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker dealloc]):
        (-[WKAirPlayRoutePicker showAirPlayPickerIPhone:]):

2016-06-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Too much duplicated code in LayerTreeHosts implementations
        https://bugs.webkit.org/show_bug.cgi?id=159144

        Reviewed by Žan Doberšek.

        There's some code common and duplicated in all current LayerTreeHosts implementations (Gtk, Coordinated, and
        ThreadedCoordinated). The thing is even worse in the case of ThreadedCoordinated and Coordinated, where the
        former is actually a special case of the later, and it seems like code was copy pasted and then modified to add
        ThreadedCoordinated specific code. The problem of that approach, apart from the code duplication, is that common
        parts end up diverging too. This patch moves the common parts to the base class LayerTreeHost and makes
        ThreadedCoordinatedLayerTreeHost inherit from CoordinatedLayerTreeHost, to share the common code and simply add
        the specific one.

        * PlatformGTK.cmake:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::scheduleLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::setViewOverlayRootLayer):
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::invalidate):
        (WebKit::CoordinatedLayerTreeHost::sizeDidChange):
        (WebKit::CoordinatedLayerTreeHost::layerFlushTimerFired):
        (WebKit::CoordinatedLayerTreeHost::commitSceneState):
        (WebKit::CoordinatedLayerTreeHost::createCoordinatedSurface):
        (WebKit::CoordinatedLayerTreeHost::cancelPendingLayerFlush): Deleted.
        (WebKit::CoordinatedLayerTreeHost::forceRepaint): Deleted.
        (WebKit::CoordinatedLayerTreeHost::forceRepaintAsync): Deleted.
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer): Deleted.
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged): Deleted.
        (WebKit::CoordinatedLayerTreeHost::pageBackgroundTransparencyChanged): Deleted.
        (WebKit::CoordinatedLayerTreeHost::graphicsLayerFactory): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost):
        (WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::ThreadedCoordinatedLayerTreeHost::sizeDidChange):
        (WebKit::ThreadedCoordinatedLayerTreeHost::setVisibleContentsRect):
        (WebKit::ThreadedCoordinatedLayerTreeHost::commitSceneState):
        (WebKit::ThreadedCoordinatedLayerTreeHost::create): Deleted.
        (WebKit::ThreadedCoordinatedLayerTreeHost::scrollNonCompositedContents): Deleted.
        (WebKit::ThreadedCoordinatedLayerTreeHost::contentsSizeChanged): Deleted.
        (WebKit::ThreadedCoordinatedLayerTreeHost::didChangeViewportProperties): Deleted.
        (WebKit::ThreadedCoordinatedLayerTreeHost::didScaleFactorChanged): Deleted.
        (WebKit::ThreadedCoordinatedLayerTreeHost::setNativeSurfaceHandleForCompositing): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::layerHostDidFlushLayers):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::~LayerTreeHost):
        (WebKit::LayerTreeHost::setLayerFlushSchedulingEnabled):
        (WebKit::LayerTreeHost::pauseRendering):
        (WebKit::LayerTreeHost::resumeRendering):
        (WebKit::LayerTreeHost::invalidate):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::layerTreeContext):
        (WebKit::LayerTreeHost::setShouldNotifyAfterNextScheduledLayerFlush):
        (WebKit::LayerTreeHost::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHost::setNonCompositedContentsNeedDisplayInRect):
        (WebKit::LayerTreeHost::scrollNonCompositedContents):
        (WebKit::LayerTreeHost::graphicsLayerFactory):
        (WebKit::LayerTreeHost::contentsSizeChanged):
        (WebKit::LayerTreeHost::didChangeViewportProperties):
        (WebKit::LayerTreeHost::setNativeSurfaceHandleForCompositing):
        (WebKit::LayerTreeHost::setViewOverlayRootLayer):
        (WebKit::LayerTreeHost::forceRepaintAsync): Deleted.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::invalidate):
        (WebKit::LayerTreeHostGtk::setViewOverlayRootLayer):
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk): Deleted.
        (WebKit::LayerTreeHostGtk::setRootCompositingLayer): Deleted.
        (WebKit::LayerTreeHostGtk::setNonCompositedContentsNeedDisplay): Deleted.
        (WebKit::LayerTreeHostGtk::scrollNonCompositedContents): Deleted.
        (WebKit::LayerTreeHostGtk::setNativeSurfaceHandleForCompositing): Deleted.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2016-06-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r202586 and r202595.
        https://bugs.webkit.org/show_bug.cgi?id=159247

        These changes broke the iOS build (Requested by ryanhaddad on
        #webkit).

        Reverted changesets:

        "Keep track of when a WKWebView is blank before the initial
        non-empty layout"
        https://bugs.webkit.org/show_bug.cgi?id=159217
        http://trac.webkit.org/changeset/202586

        "Try to fix the build."
        http://trac.webkit.org/changeset/202595

2016-06-28  Commit Queue  <commit-queue@webkit.org>

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

        Caused all WKTR tests to fail on GuardMalloc and Production
        only for unknown reasons, investigating offline. (Requested by
        brrian on #webkit).

        Reverted changeset:

        "RunLoop::Timer should use constructor templates instead of
        class templates"
        https://bugs.webkit.org/show_bug.cgi?id=159153
        http://trac.webkit.org/changeset/202580

2016-06-28  Commit Queue  <commit-queue@webkit.org>

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

        broke the build. (Requested by keith_miller on #webkit).

        Reverted changeset:

        "Try to fix the build."
        http://trac.webkit.org/changeset/202598

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

        Try to fix the build.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (convertSystemLayoutDirection):
        (-[WKWebView _setIsBlankBeforeFirstNonEmptyLayout:]):
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:

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

        Try to fix the build.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:

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

        Keep track of when a WKWebView is blank before the initial non-empty layout
        https://bugs.webkit.org/show_bug.cgi?id=159217
        <rdar://problem/26071766>

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setIsBlankBeforeFirstNonEmptyLayout:]):
        (-[WKWebView _didFirstVisuallyNonEmptyLayoutForMainFrame]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame):

2016-06-28  Anders Carlsson  <andersca@apple.com>

        PaymentMerchantSession should wrap a PKPaymentMerchantSession
        https://bugs.webkit.org/show_bug.cgi?id=159218
        rdar://problem/26872118

        Reviewed by Tim Horton.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:
        (IPC::ArgumentCoder<WebCore::PaymentMerchantSession>::encode):
        (IPC::ArgumentCoder<WebCore::PaymentMerchantSession>::decode):
        Use NSCoder.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h:
        PaymentMerchantSession is now a class.

        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in:
        PaymentMerchantSession is now a class.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::WebPaymentCoordinatorProxy::platformCompleteMerchantValidation):
        Just get the underlying PKPaymentMerchantSession from the PaymentMerchantSession object.
        (WebKit::toPKPaymentMerchantSession): Deleted.

2016-06-28  Brian Burg  <bburg@apple.com>

        RunLoop::Timer should use constructor templates instead of class templates
        https://bugs.webkit.org/show_bug.cgi?id=159153

        Reviewed by Alex Christensen.

        Remove the RunLoop::Timer class template argument, and pass its constructor
        a reference to `this` instead of a pointer to `this`.

        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog):
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        * PluginProcess/PluginProcess.h:
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::ChildProcess):
        * Shared/ChildProcess.h:
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * UIProcess/API/Cocoa/APISerializedScriptValueCocoa.mm:
        (API::SharedJSContext::SharedJSContext):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate::_WebKitWebViewBasePrivate):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::PluginInfoCache):
        * UIProcess/Plugins/gtk/PluginInfoCache.h:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::ProcessThrottler):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::ResponsivenessTimer):
        * UIProcess/ResponsivenessTimer.h:
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::SnapshotRemovalTracker):
        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::VisitedLinkStore):
        * UIProcess/VisitedLinkStore.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_hiddenPageThrottlingTimer):
        * UIProcess/WebProcessPool.h:
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::DragGesture::DragGesture):
        (WebKit::GestureController::ZoomGesture::ZoomGesture):
        * UIProcess/gtk/GestureController.h:
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::WebPopupMenuProxyGtk):
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:
        * UIProcess/mac/ViewGestureController.h:
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::WebLoaderStrategy):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::NPRuntimeObjectMap):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin):
        (WebKit::NetscapePlugin::Timer::Timer):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::NetscapePluginStream):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::CoordinatedDrawingArea):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost):
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::RenderFrameScheduler::RenderFrameScheduler):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):

2016-06-28  Chris Dumez  <cdumez@apple.com>

        [WK2] Add some logging related to NetworkProcess suspension
        https://bugs.webkit.org/show_bug.cgi?id=159178

        Reviewed by Andreas Kling.

        Add some logging related to NetworkProcess suspension to help debug
        suspension issues.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::cancelPrepareToSuspend):
        (WebKit::NetworkProcess::processDidResume):

2016-06-28  Chris Dumez  <cdumez@apple.com>

        Add some more UIProcess-side logging related to process assertions
        https://bugs.webkit.org/show_bug.cgi?id=159188

        Reviewed by Andreas Kling.

        Add some more UIProcess-side logging related to process assertions
        to help debug process suspension issues.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertionNow):
        (WebKit::ProcessThrottler::updateAssertion):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityToken):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::WebProcessProxy::didSetAssertionState):

2016-06-28  Chris Dumez  <cdumez@apple.com>

        [WK2] Do not suppress navigation snapshotting on session restore if we are not navigating right away
        https://bugs.webkit.org/show_bug.cgi?id=159216
        <rdar://problem/27058360>

        Reviewed by Andreas Kling.

        Do not suppress navigation snapshotting on session restore if we are not navigating
        right away. The snapshot we already have may be outdated by the time we actually
        navigate (e.g. Because the user scrolled) so we don't want to suppress snapshotting
        in this case.

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

2016-06-27  Anders Carlsson  <andersca@apple.com>

        WebKit::WebPaymentCoordinator leak
        https://bugs.webkit.org/show_bug.cgi?id=159168
        rdar://problem/26929772

        Reviewed by Beth Dakin.

        Update for WebCore changes.

        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
        (WebKit::WebPaymentCoordinator::paymentCoordinatorDestroyed):
        (WebKit::WebPaymentCoordinator::mainFrameDestroyed): Deleted.
        * WebProcess/ApplePay/WebPaymentCoordinator.h:

2016-06-27  Simon Fraser  <simon.fraser@apple.com>

        Fix TestWebKitAPI crash introduced in r202532.

        WebPageProxy::forceRepaint() could trigger a call to the didForceRepaintCallback()
        after the WebPageProxy had been invalidated, causing a null de-ref of m_drawingArea.
        Fix by checking for error and isValid().

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

2016-06-27  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Make DumpRenderTree and WebKitTestRunner in the simulator use render server snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=159077

        Reviewed by Tim Horton.

        Fix WebPageProxy::forceRepaint() to correctly wait for the next commit from the web process,
        which is necessary for UI-side compositing.

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

2016-06-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: When modifying sessionStorage, localStorage gets updated
        https://bugs.webkit.org/show_bug.cgi?id=159181
        <rdar://problem/27043447>

        Reviewed by Timothy Hatcher.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        This should be dispatching storage events.

2016-06-27  Alex Christensen  <achristensen@webkit.org>

        Fix flakiness on Sierra after r202511
        https://bugs.webkit.org/show_bug.cgi?id=159071

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::clearCredentials):
        Replacing the NSURLSessions immediately caused assertions because the tasks are not always all stopped immediately when tearing down a test.
        Stopping an NSURLSession needs to be done asynchronously.  I'll try a different testing technique for r202511.

2016-06-27  Alex Christensen  <achristensen@webkit.org>

        Send canAuthenticateAgainstProtectionSpace calls from NetworkProcess directly to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=159071

        Reviewed by Brady Eidson.

        When CFNetwork asks the NetworkProcess if we can authenticate against this protection space, we used to ask
        the WebProcess, which would call ResourceLoader::canAuthenticateAgainstProtectionSpace which would ask the FrameLoaderClient,
        which would synchronously ask the UIProcess.  Going directly from the NetworkProcess to the UIProcess gives us many advantages:
        1. It reduces IPC because we ask fewer loads.
        2. It reduces synchronous IPC because we are not using the same code path as WebKit1 any more.
        3. It allows us to check if the NetworkProcess is still valid in sendToNetworkingProcess, possibly fixing rdar://problem/26825408
        4. It allows us to ask the UIProcess when we get authentication challenges for synchronous xhr.

        I added a new test http/tests/xmlhttprequest/sync-delegate-callbacks.html to verify the change in behavior of synchronous xhr.
        In order to make this test not flaky on platforms using NSURLSession, we clear the NSURLSessions used by WebKitTestRunner
        to make sure that the TLS session cache is cleared so we get NSURLAuthenticationChallenges corresponding to the NSURLConnection
        canAuthenticateAgainstProtectionSpace callback when we initiate the first HTTPS connection to 127.0.0.1 with this session. 

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        (WebKit::NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearCachedCredentials):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        (WebKit::NetworkProcess::cancelDownload):
        (WebKit::NetworkProcess::canAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkProcess::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkProcess::continueCanAuthenticateAgainstProtectionSpaceDownload):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkResourceLoader.messages.in:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::networkStorageSession):
        (WebKit::NetworkSession::clearCredentials):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::canAuthenticateAgainstProtectionSpace):
        (WebKit::DownloadProxy::willSendRequest):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::logSampledDiagnosticMessageWithValue):
        (WebKit::NetworkProcessProxy::canAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkProcessProxy::sendProcessWillSuspendImminently):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::backForwardClear):
        (WebKit::WebPageProxy::canAuthenticateAgainstProtectionSpace):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge):
        (WebKit::WebPageProxy::canAuthenticateAgainstProtectionSpaceInFrame): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResource):
        (WebKit::WebResourceLoader::isAlwaysOnLoggingAllowed):
        (WebKit::WebResourceLoader::canAuthenticateAgainstProtectionSpace): Deleted.
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::canAuthenticateAgainstProtectionSpace):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearCachedCredentials):
        (WebKit::WebProcess::focusedWebPage):

2016-06-27  Anders Carlsson  <andersca@apple.com>

        Discounted items are displayed with positive values
        https://bugs.webkit.org/show_bug.cgi?id=159160
        rdar://problem/26980772

        Reviewed by Dean Jackson.

        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
        (WebKit::toDecimalNumber):
        Add new helper function. Correctly compute the mantissa.

        (WebKit::toPKPaymentSummaryItem):
        (WebKit::toPKShippingMethod):
        Use toDecimalNumber.

2016-06-27  Miguel Gomez  <magomez@igalia.com>

        [GTK][EFL] Build with threaded compositor enabled is broken
        https://bugs.webkit.org/show_bug.cgi?id=159138

        Reviewed by Carlos Garcia Campos.

        Replace the usage of NoncopyableFunction with Function, to follow the changes in r202439.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::performTask):
        (WebKit::CompositingRunLoop::performTaskSync):
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:

2016-06-24  Brian Burg  <bburg@apple.com>

        REGRESSION(r201171): CRASH at WebKit::WebInspectorProxy::open() + 31 when running inspector layout tests
        https://bugs.webkit.org/show_bug.cgi?id=159070
        <rdar://problem/26768628>

        Reviewed by Joseph Pecoraro.

        We have been seeing a few crashes underneath WebInspectorProxy::bringToFront() on the bots.
        Previously, this code didn't use m_inspectorPage so there was nothing to null-dereference.

        However, it doesn't make sense that we would hit the null dereference here:

         - The only caller of bringToFront() on the WebProcess side is InspectorController::show().
           It only tries to bring to front if there is already a local frontend connection, which
           shouldn't be the case if m_inspectorPage is null.

         - It's guarded by m_underTest, which should have been set to true in createInspectorPage().

        These clues lead me to believe that we may be improperly tearing down the inspector between tests.
        For example, it seems possible that a local frontend connection is not being torn down, so
        InspectorController never asks to create a inspector page when the next test calls showWebInspector.

        Since this crash is not easy to reproduce, we don't have much to go on. For now, this patch
        adds an early return in the case where m_inspectorPage is null when calling open().

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::open):

2016-06-24  Jer Noble  <jer.noble@apple.com>

        Vimeo.com videos do not get playback controls
        https://bugs.webkit.org/show_bug.cgi?id=159082
        <rdar://problem/26586630>

        Reviewed by Eric Carlson.

        When the HasAudioOrVideo media state changes, let the video controls recalculate
        by calling videoControlsManagerDidChange().

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

2016-06-24  Beth Dakin  <bdakin@apple.com>

        Include enclosingListType in EditorState
        https://bugs.webkit.org/show_bug.cgi?id=159102
        -and corresponding-
        rdar://problem/26932490

        Reviewed by Enrica Casucci.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):

2016-06-24  Anders Carlsson  <andersca@apple.com>

        Inline more of the Apple Pay source code
        https://bugs.webkit.org/show_bug.cgi?id=159099

        Reviewed by Andreas Kling.

        * Shared/Cocoa/WebCoreArgumentCodersCocoa.h: Removed.
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _applePayCapabilityDisclosureAllowed]):
        (-[WKPreferences _setApplePayCapabilityDisclosureAllowed:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _applePayEnabled]):
        (-[WKWebViewConfiguration _setApplePayEnabled:]):
        (-[WKWebViewConfiguration _paymentsEnabled]):
        (-[WKWebViewConfiguration _setPaymentsEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):
        (WebKit::WebPage::updatePreferences):

2016-06-21  Anders Carlsson  <andersca@apple.com>

        Rename NoncopyableFunction to Function
        https://bugs.webkit.org/show_bug.cgi?id=158354

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::clearDiskCacheEntries):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::traverse):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::runTaskInQueue):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2016-06-22  Anders Carlsson  <andersca@apple.com>

        Move WebKit2 Apple Pay code to the open source repository
        https://bugs.webkit.org/show_bug.cgi?id=159041

        Reviewed by Sam Weinig.

        * DerivedSources.make:
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.h: Added.
        * Shared/Cocoa/WebCoreArgumentCodersCocoa.mm: Added.
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp: Added.
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h: Added.
        * UIProcess/ApplePay/WebPaymentCoordinatorProxy.messages.in: Added.
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h: Added.
        * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm: Added.
        * UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm: Added.
        * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm: Added.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/ApplePay/WebPaymentCoordinator.cpp: Added.
        * WebProcess/ApplePay/WebPaymentCoordinator.h: Added.
        * WebProcess/ApplePay/WebPaymentCoordinator.messages.in: Added.

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

        [WK2] PageConfiguration.m_relatedPage keeps WebPageProxy alive after its WebView has been destroyed
        https://bugs.webkit.org/show_bug.cgi?id=159080
        <rdar://problem/26982642>

        Reviewed by Anders Carlsson.

        PageConfiguration.m_relatedPage keeps WebPageProxy alive after its WebView has been destroyed.
        This leads to WebPageProxy object leaks when the client keeps chaining related views.

        In this patch, we null our the PageConfiguration's relatedPage in WebPageProxy::close()
        to break the chain and make sure we only keep alive 1 relatedPage rather than a chain of
        them.

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

2016-06-24  Jer Noble  <jer.noble@apple.com>

        Playback controls refer to wrong element when playing multiple items in a page.
        https://bugs.webkit.org/show_bug.cgi?id=159076
        <rdar://problem/26953532>

        Reviewed by Beth Dakin.

        clearPlaybackControlsManager() no longer takes a parameter.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::clearPlaybackControlsManager):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/cocoa/WebPlaybackSessionManager.h:
        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionManager::setUpPlaybackControlsManager): Make sure to removeClientForContext()
            if the old context refers to a live media element.
        (WebKit::WebPlaybackSessionManager::clearPlaybackControlsManager):

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

        IDB tests crashing attempting to register sandbox extensions for blob files.
        https://bugs.webkit.org/show_bug.cgi?id=159094.

        Reviewed by Sam Weinig.
        
        Already tested by storage/indexeddb/modern/handle-user-delete.html

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::preregisterSandboxExtensionsIfNecessary): Check whether the IDBResultData actually contains
          a getResult before trying to access it.

2016-06-23  Brady Eidson  <beidson@apple.com>

        Retrieving Blobs from IndexedDB using cursors fails in WK2 (Sandboxing)
        https://bugs.webkit.org/show_bug.cgi?id=158991

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::getSandboxExtensionsForBlobFiles):
        (WebKit::DatabaseProcess::didGetSandboxExtensionsForBlobFiles):
        * DatabaseProcess/DatabaseProcess.h:
        
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::handleGetResult): Handle creation of sandbox extensions
          for any result that might contain blob values.
        (WebKit::WebIDBConnectionToClient::didGetRecord):
        (WebKit::WebIDBConnectionToClient::didOpenCursor):
        (WebKit::WebIDBConnectionToClient::didIterateCursor):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        
        * Shared/Databases/IndexedDB/WebIDBResult.cpp: Added.
        (WebKit::WebIDBResult::encode):
        (WebKit::WebIDBResult::decode):
        * Shared/Databases/IndexedDB/WebIDBResult.h: Added.
        (WebKit::WebIDBResult::WebIDBResult):
        (WebKit::WebIDBResult::resultData):
        (WebKit::WebIDBResult::handles):
        
        * Shared/SandboxExtension.h: Make SandboxExtension handles moveable.
                
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::preregisterSandboxExtensionsIfNecessary): Register sandbox extensions with the
          Networking process for any result that might contain blob values.
        (WebKit::WebIDBConnectionToServer::didGetRecord):
        (WebKit::WebIDBConnectionToServer::didOpenCursor):
        (WebKit::WebIDBConnectionToServer::didIterateCursor):
        (WebKit::WebIDBConnectionToServer::didGetRecordWithSandboxExtensions): Deleted.
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

2016-06-23  Alex Christensen  <achristensen@webkit.org>

        Remove unused didCancelAuthenticationChallenge
        https://bugs.webkit.org/show_bug.cgi?id=158819

        Reviewed by David Kilzer.

        * NetworkProcess/Downloads/mac/DownloadMac.mm:
        (-[WKDownloadAsDelegate download:didCancelAuthenticationChallenge:]): Deleted.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didCancelAuthenticationChallenge): Deleted.
        * NetworkProcess/NetworkLoad.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCancelAuthenticationChallenge): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2016-06-23  Benjamin Poulain  <benjamin@webkit.org>

        Specialize synchronous event tracking per event type
        https://bugs.webkit.org/show_bug.cgi?id=158826

        Reviewed by Simon Fraser.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<EventTrackingRegions>::encode):
        (IPC::ArgumentCoder<EventTrackingRegions>::decode):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::eventTrackingTypeForPoint):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::mergeTrackingTypes):
        (WebKit::WebPageProxy::updateTouchEventTracking):
        (WebKit::WebPageProxy::touchEventTrackingType):
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        (WebKit::WebPageProxy::handleTouchEventAsynchronously):
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::TouchEventTracking::isTrackingAnything):
        (WebKit::WebPageProxy::TouchEventTracking::reset):

2016-06-23  Said Abou-Hallawa  <sabouhallawa@apple.com>

        requestFrameAnimation() callback timestamp should be very close to Performance.now() 
        https://bugs.webkit.org/show_bug.cgi?id=159038

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/Cocoa/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::didUpdateLayers):

2016-06-23  Chris Dumez  <cdumez@apple.com>

        [iOS] A WebPageProxy in closed state should not be allowed to hold a process assertion
        https://bugs.webkit.org/show_bug.cgi?id=159068
        <rdar://problem/17665473>

        Reviewed by Tim Horton.

        A WebPageProxy in closed state should not be allowed to hold a process assertion. It
        currently happens that WebPageProxy::close() gets called but that the WebPageProxy is
        kept alive by Safari (e.g. In case of top-hit preloading). In such cases, we fail to
        release the foreground process assertion that the WebPageProxy holds.

        We should clear the foreground process assertion that the WebPageProxy holds as soon
        as WebPageProxy::close() is called.

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

2016-06-23  Brent Fulgham  <bfulgham@apple.com>

        [OS X][WK2] Expand sandbox for new mach endpoints
        https://bugs.webkit.org/show_bug.cgi?id=159040
        <rdar://problem/25238336>

        Reviewed by Alexey Proskuryakov.

        Grant the WebContent and Networking processes the mach lookup capability for
        various Security-related mach endpoints..

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

2016-06-23  Commit Queue  <commit-queue@webkit.org>

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

        Not needed for iOS (Requested by bfulgham on #webkit).

        Reverted changeset:

        "[OS X][WK2] Expand sandbox for new mach endpoints"
        https://bugs.webkit.org/show_bug.cgi?id=157919
        http://trac.webkit.org/changeset/201194

2016-06-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.13.2 release.

        * gtk/NEWS: Add release notes for 2.13.2.

2016-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r201880): WebSockets based remote inspector is broken since r201880
        https://bugs.webkit.org/show_bug.cgi?id=158613

        Reviewed by Michael Catanzaro.

        In r201880 SocketStreamHandleClient was modified to receive references instead of
        pointers. WebSocketServerConnection also implements SocketStreamHandleClient but since it's doesn't use
        override, it was unnoticed and not updated, so we ended up using the default empty implementation instead of
        the WebSocketServerConnection one.

        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::WebSocketServerConnection):
        (WebKit::WebSocketServerConnection::setSocketHandle):
        (WebKit::WebSocketServerConnection::shutdownNow):
        (WebKit::WebSocketServerConnection::didCloseSocketStream):
        (WebKit::WebSocketServerConnection::didReceiveSocketStreamData):
        (WebKit::WebSocketServerConnection::didUpdateBufferedAmount):
        (WebKit::WebSocketServerConnection::didFailSocketStream): Deleted.
        * UIProcess/InspectorServer/WebSocketServerConnection.h:

2016-06-22  Brent Fulgham  <bfulgham@apple.com>

        [iOS][WK2] Expand sandbox to read voice services preferences
        https://bugs.webkit.org/show_bug.cgi?id=159046
        <rdar://problem/26926722>

        Reviewed by Alexey Proskuryakov.

        Expand the sandbox to permit read-only access to voice services preferences.

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

2016-06-22  Sam Weinig  <sam@webkit.org>

        Add SPI to allow creating a WKCertificateInfoRef from a SecTrustRef
        https://bugs.webkit.org/show_bug.cgi?id=159025

        Reviewed by Tim Horton.

        * Shared/API/c/mac/WKCertificateInfoMac.h:
        * Shared/API/c/mac/WKCertificateInfoMac.mm:
        (WKCertificateInfoCreateWithServerTrust):

2016-06-22  Brady Eidson  <beidson@apple.com>

        DatabaseProcess doesn't handle WebProcesses going away uncleanly.
        https://bugs.webkit.org/show_bug.cgi?id=158894

        Reviewed by Alex Christensen.

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::didClose):
        
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::disconnectedFromWebProcess): Actually unregister this connection
          from the IDBServer so it can clean up.
        (WebKit::WebIDBConnectionToClient::~WebIDBConnectionToClient):
        
2016-06-22  Chris Dumez  <cdumez@apple.com>

        Stop using PassRefPtr in ShareableResource
        https://bugs.webkit.org/show_bug.cgi?id=159043

        Reviewed by Alex Christensen.

        Stop using PassRefPtr in ShareableResource.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::initializeShareableResourceHandleFromStorageRecord):
        * Shared/ShareableResource.cpp:
        (WebKit::shareableResourceDeallocate):
        (WebKit::ShareableResource::wrapInSharedBuffer):
        (WebKit::ShareableResource::Handle::tryWrapInSharedBuffer):
        (WebKit::ShareableResource::create):
        (WebKit::ShareableResource::map):
        (WebKit::ShareableResource::ShareableResource):
        * Shared/ShareableResource.h:

2016-06-17  Dean Jackson  <dino@apple.com>

        REGRESSION: Double tap to zoom does not work on yahoo finance
        https://bugs.webkit.org/show_bug.cgi?id=158886
        <rdar://problem/24917760>

        Reviewed by Simon Fraser.

        We shouldn't enable fast click on pages that have
        had to shrink to fit. In other words, we should enable
        double-tap-to-zoom if the page has already zoomed.

        Test: fast/events/ios/viewport-shrink-to-fit-allows-double-tap.html

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

2016-06-22  Brian Burg  <bburg@apple.com>

        Web Automation: Automation.inspectBrowsingContext should have an option to enable timeline auto-capturing
        https://bugs.webkit.org/show_bug.cgi?id=159004
        <rdar://problem/26931269>

        Reviewed by Joseph Pecoraro.

        Automation.inspectBrowsingContext was added to make it easier to hit breakpoints inside of
        code evaluated using Automation.evaluateJavaScriptFunction. I recently changed the behavior
        of this command to automatically start profiling the page as soon as the inspector attached
        so that a full timeline recording could be obtained. However, starting a timeline recording
        turns off the debugger, so this command is not so useful for debugging right now.

        Add a new option, enableAutoCapturing, to the inspectBrowsingContext command. Don't toggle
        profiling automatically unless this optional flag is present and set to true.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::inspectBrowsingContext):
        (WebKit::WebAutomationSession::inspectorFrontendLoaded): Deleted.
        * UIProcess/Automation/WebAutomationSession.h:

2016-06-22  Tim Horton  <timothy_horton@apple.com>

        Mail snapshot has black webview in multitasking switcher
        https://bugs.webkit.org/show_bug.cgi?id=159036
        <rdar://problem/25972938>

        Reviewed by Simon Fraser.

        There is a window of time between an application going into the background
        and SpringBoard's snapshotting mechanism completing where it is possible
        (though difficult, timing-wise) for RemoteLayerBackingStoreCollection to
        make still-needed surfaces volatile (and, even worse, for them to get emptied).

        UIKit suggested instead waiting for the window context teardown notification,
        which does indeed seem to fire after the snapshotting is complete.
        This may have the convenient side effect of making the volatility timer
        repeat fewer times in general, because it is now started closer to the
        last time that the surfaces will be in-use.

        * UIProcess/ApplicationStateTracker.h:
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        (WebKit::ApplicationStateTracker::~ApplicationStateTracker):
        (WebKit::ApplicationStateTracker::applicationDidFinishSnapshottingAfterEnteringBackground):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didMoveToWindow]):
        (-[WKContentView _applicationDidFinishSnapshottingAfterEnteringBackground]):
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView didMoveToWindow]):
        (-[WKPDFView _applicationDidFinishSnapshottingAfterEnteringBackground]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidFinishSnapshottingAfterEnteringBackground):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationDidEnterBackground):
        (WebKit::WebPage::applicationDidFinishSnapshottingAfterEnteringBackground):

2016-06-22  Chris Dumez  <cdumez@apple.com>

        Add logging related to process assertions to help debug process suspension issues
        https://bugs.webkit.org/show_bug.cgi?id=159001

        Reviewed by Antti Koivisto.

        Add logging related to process assertions to help debug process suspension issues.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::didChangeIsLoading):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityToken):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles):

2016-06-21  Sam Weinig  <sam@webkit.org>

        WKWebView with no WKNavigationDelegate does not follow universal links
        <rdar://problem/24374110>
        https://bugs.webkit.org/show_bug.cgi?id=158997

        Reviewed by Dan Bernstein.

        API Test:
             WKWebView.DefaultNavigationDelegate

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        When initializing the WKWebView, set a default navigation client.

2016-06-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r202296.

        Broke basic browsing in Safari

        Reverted changeset:

        "WKWebView with no WKNavigationDelegate does not follow
        universal links"
        https://bugs.webkit.org/show_bug.cgi?id=158997
        http://trac.webkit.org/changeset/202296

2016-06-21  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Configurations/FeatureDefines.xcconfig:

2016-06-21  Anders Carlsson  <andersca@apple.com>

        Begin moving the Apple Pay code to the open source repository
        https://bugs.webkit.org/show_bug.cgi?id=158998

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE_APPLE_PAY.

2016-06-21  Said Abou-Hallawa  <sabouhallawa@apple,com>

        Add system tracing points for requestAnimationFrame() workflow
        https://bugs.webkit.org/show_bug.cgi?id=158723

        Reviewed by Simon Fraser.

        Add trace points for requestAnimationFrame().

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::buildTransaction):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::didUpdate):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::flush):

2016-06-21  Sam Weinig  <sam@webkit.org>

        WKWebView with no WKNavigationDelegate does not follow universal links
        <rdar://problem/24374110>
        https://bugs.webkit.org/show_bug.cgi?id=158997

        Reviewed by Dan Bernstein.

        API Test:
             WKWebView.DefaultNavigationDelegate

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        When initializing the WKWebView, set a default navigation client.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setLoaderClient):
        Be sure to clear out a navigation client, if present, when setting a loader client,
        as they are mutually exclusive.

2016-06-20  Simon Fraser  <simon.fraser@apple.com>

        Focus event dispatched in iframe causes parent document to scroll incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=158629
        rdar://problem/26521616

        Reviewed by Tim Horton.

        Pass SelectionRevealMode::Reveal in existing code.

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

2016-06-21  Said Abou-Hallawa  <sabouhallawa@apple,com>

        [iOS][WK2] When an animation frame is missed, the UI process should immediately notify the Web process once a frame is committed
        https://bugs.webkit.org/show_bug.cgi?id=158933

        Reviewed by Simon Fraser.

        When a frame is committed, the UI process schedules a CADisplayLink and waits until
        the next didRefreshDisplay event is fired. This causes more delay in the scenario
        where there are frames are dropped. didRefreshDisplay() should be called immediately
        when commitLayerTree message is received and the last frame was dropped.

        The fix is to have the CADisplayLink active all the times. It should be paused
        only when we detect at least one frame is dropped. In this case we should not
        send a message to the UI process since it has not sent the last requested LayerTree.
        Also we should not waste the CPU time by scheduling a new CADisplayLink since we
        have not processed the last event. We should resume CADisplayLink timer once a
        commitLayerTree message is received.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[WKOneShotDisplayLinkHandler pause]):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        (-[WKOneShotDisplayLinkHandler displayLinkFired:]):

2016-06-21  Amir Alavi  <aalavi@apple.com>

        Upstream WKHTTPCookiesForURL from WebKitSystemInterface to OpenSource
        https://bugs.webkit.org/show_bug.cgi?id=158967

        Reviewed by Brent Fulgham.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.

2016-06-21  Dan Bernstein  <mitz@apple.com>

        Inlined some picture-in-picture code.
        https://bugs.webkit.org/show_bug.cgi?id=158977

        Reviewed by Eric Carlsson.

        This code was written primarily by Ada Chan, and originally reviewed by Alex Christensen,
        Anders Carlsson, Conrad Shultz, Dan Bernstein, Eric Carlson, Jer Noble, Jeremy Jones,
        Jon Lee, Remy Demarest, and Zach Li.

        * Shared/WebPreferencesStoreDefaultsAdditions.cpp:
          Define and use DEFAULT_ALLOWS_PICTURE_IN_PICTURE_MEDIA_PLAYBACK.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::defaults): Removed include of WebPreferencesStoreDefaultsAdditions.cpp now that the
          default is defined correctly in WebPreferencesStoreDefaultsAdditions.cpp.

        * UIProcess/API/C/WKPreferences.cpp: Inlined WKPreferencesAdditions.cpp.
        * UIProcess/API/C/WKPreferencesRefPrivate.h: Ditto.

        * WebProcess/cocoa/WebVideoFullscreenManager.mm: Inlined WebVideoFullscreenManagerSupportsVideoFullscreenMac.mm.

2016-06-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web view is not redrawn when reparented in force compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=158689

        Reviewed by Žan Doberšek.

        When the web view is reparented in accelerated compositing mode, the UI process always exits the accelerated
        mode when the view is unrealized, because the native surface handle for compositing is destroyed, but it doesn't
        enter again when the view is realized and a new native surface handle for compositing is used. This happens
        because the UI and Web processes are not in sync regarding whether the page is in accelerated compositing or
        not. The Web process never exits accelerated mode when compositing mode is forced, but the UI process doesn't
        check that setting at all.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseResizeRedirectedWindow): Helper function to ensure the redirected window size is properly updated.
        (webkitWebViewBaseRealize): Resize the redirected window if the view is already in AC mode when realized.
        (webkitWebViewRenderAcceleratedCompositingResults): Use webkitWebViewBaseResizeRedirectedWindow().
        (webkitWebViewBaseSizeAllocate): Ditto.
        (webkitWebViewBaseWillEnterAcceleratedCompositingMode): Ditto.
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::alwaysUseCompositing): Return true in force compositing mode.
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode): Update assert.
        (WebKit::DrawingAreaProxyImpl::exitAcceleratedCompositingMode): Do not exit AC mode compositing mode is always enabled.
        * UIProcess/DrawingAreaProxyImpl.h:
        (WebKit::DrawingAreaProxyImpl::isInAcceleratedCompositingMode): Return true also in force compositing mode.
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::RedirectedXCompositeWindow::surface): Ensure we never return an uninitialized surface to prevent
        rendering artifacts in in force compositing mode when waiting for the first update on the redirected window.

2016-06-20  Commit Queue  <commit-queue@webkit.org>

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

        Broke Windows build and iOS tests (Requested by ap on
        #webkit).

        Reverted changeset:

        "Focus event dispatched in iframe causes parent document to
        scroll incorrectly"
        https://bugs.webkit.org/show_bug.cgi?id=158629
        http://trac.webkit.org/changeset/202243

2016-06-20  Brent Fulgham  <bfulgham@apple.com>

        Allow Spotlight suggestions to be read by any process
        https://bugs.webkit.org/show_bug.cgi?id=158950
        <rdar://problem/26865374>

        Reviewed by Alexey Proskuryakov.

        Extend sandbox to allow all web processes to read Spotlight results.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2016-06-20  Simon Fraser  <simon.fraser@apple.com>

        Focus event dispatched in iframe causes parent document to scroll incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=158629
        rdar://problem/26521616

        Reviewed by Tim Horton.

        Pass SelectionRevealMode::Reveal in existing code.

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

2016-06-20  Keith Rollin  <krollin@apple.com>

        Remove RefPtr::release() and change calls sites to use WTFMove()
        https://bugs.webkit.org/show_bug.cgi?id=158369

        Reviewed by Chris Dumez.

        RefPtr::release() releases its managed pointer awkwardly. It's more
        direct and clearer to use WTFMove to transfer ownership of the managed
        pointer.

        As part of this cleanup, also change a lot of explicit data types to
        'auto'.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::createDatabaseToWebProcessConnection):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::initializeShareableResourceHandleFromStorageRecord):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::allocate):
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::map):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection):
        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (encodeToObjectStream):
        * Shared/API/c/WKImage.cpp:
        (WKImageCreate):
        * Shared/API/c/WKNumber.cpp:
        (WKBooleanCreate):
        (WKDoubleCreate):
        (WKUInt64Create):
        * Shared/API/c/WKSecurityOriginRef.cpp:
        (WKSecurityOriginCreate):
        * Shared/API/c/WKSerializedScriptValue.cpp:
        (WKSerializedScriptValueCreate):
        (WKSerializedScriptValueCreateWithInternalRepresentation):
        * Shared/API/c/cairo/WKImageCairo.cpp:
        (WKImageCreateFromCairoSurface):
        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateFromCGImage):
        * Shared/API/c/mac/WKCertificateInfoMac.mm:
        (WKCertificateInfoCreateWithCertficateChain):
        * Shared/API/c/mac/WKObjCTypeWrapperRef.mm:
        (WKObjCTypeWrapperCreate):
        * Shared/API/c/mac/WKWebArchive.cpp:
        (WKWebArchiveCreate):
        (WKWebArchiveCreateWithData):
        (WKWebArchiveCreateFromRange):
        (WKWebArchiveCopyMainResource):
        (WKWebArchiveCopySubresources):
        (WKWebArchiveCopySubframeArchives):
        * Shared/API/c/mac/WKWebArchiveResource.cpp:
        (WKWebArchiveResourceCreate):
        * Shared/APIWebArchive.mm:
        (API::WebArchive::WebArchive):
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::getOrCreate):
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create):
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::map):
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (IPC::ArgumentCoder<DragData>::decode):
        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewCreate):
        * UIProcess/API/C/WKBatteryStatus.cpp:
        (WKBatteryStatusCreate):
        * UIProcess/API/C/WKGeolocationPosition.cpp:
        (WKGeolocationPositionCreate_b):
        * UIProcess/API/C/WKGrammarDetail.cpp:
        (WKGrammarDetailCreate):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):
        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupCreateWithIdentifier):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCreate):
        (WKPreferencesCreateWithIdentifier):
        (WKPreferencesCreateCopy):
        * UIProcess/API/C/WKSessionRef.cpp:
        (WKSessionCreate):
        * UIProcess/API/C/WKSessionStateRef.cpp:
        (WKSessionStateCopyData):
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextCopyPlugInInfoForBundleIdentifier):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadRequest:]):
        (-[WKWebView loadFileURL:allowingReadAccessToURL:]):
        (-[WKWebView loadData:MIMEType:characterEncodingName:baseURL:]):
        (-[WKWebView goToBackForwardListItem:]):
        (-[WKWebView goBack]):
        (-[WKWebView goForward]):
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]):
        (-[WKWebView _reloadWithoutContentBlockers]):
        (-[WKWebView _sessionStateData]):
        (-[WKWebView _restoreSessionState:andNavigate:]):
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (EwkDatabaseManager::createOriginList):
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (EwkStorageManager::createOriginList):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewCreateNewPage):
        (webkitWebViewPrintFrame):
        (getContentsAsMHTMLDataCallback):
        * UIProcess/Cocoa/SessionStateCoding.mm:
        (WebKit::encodeSessionState):
        * UIProcess/GenericCallback.h:
        (WebKit::CallbackMap::take):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::createRequest):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp:
        (WebKit::NotificationPermissionRequestManagerProxy::createRequest):
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getOrCreatePluginProcess):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::setItem):
        (WebKit::StorageManager::StorageArea::removeItem):
        (WebKit::StorageManager::createLocalStorageMap):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::clear):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::installViewStateChangeCompletionHandler):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::createWithLegacyDefaults):
        (WebKit::WebPreferences::copy):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::recordSnapshot):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _webHitTestResult]):
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _askPageToComputePageRects]):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setDragImage):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame hitTest:]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.mm:
        (-[WKWebProcessPlugInHitTestResult nodeHandle]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (+[WKWebProcessPlugInNodeHandle nodeHandleWithJSValue:inContext:]):
        (-[WKWebProcessPlugInNodeHandle htmlIFrameElementContentFrame]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm:
        (+[WKWebProcessPlugInScriptWorld world]):
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundlePostSynchronousMessage):
        * WebProcess/InjectedBundle/API/c/WKBundleDOMWindowExtension.cpp:
        (WKBundleDOMWindowExtensionCreate):
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultCopyNodeHandle):
        (WKBundleHitTestResultCopyURLElementHandle):
        * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp:
        (WKBundleNavigationActionCopyHitTestResult):
        (WKBundleNavigationActionCopyFormElement):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCreate):
        (WKBundleNodeHandleCopyDocument):
        (WKBundleNodeHandleCopySnapshotWithOptions):
        (WKBundleNodeHandleCopyVisibleRange):
        (WKBundleNodeHandleCopyHTMLTableCellElementCellAbove):
        (WKBundleNodeHandleCopyDocumentFrame):
        (WKBundleNodeHandleCopyHTMLFrameElementContentFrame):
        (WKBundleNodeHandleCopyHTMLIFrameElementContentFrame):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCreateSnapshotWithOptions):
        (WKBundlePageCreateSnapshotInViewCoordinates):
        (WKBundlePageCreateSnapshotInDocumentCoordinates):
        (WKBundlePageCreateScaledSnapshotInDocumentCoordinates):
        (WKBundlePagePostSynchronousMessageForTesting):
        * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp:
        (WKBundleRangeHandleCreate):
        (WKBundleRangeHandleCopySnapshotWithOptions):
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        (WKBundleScriptWorldCreateWorld):
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode _copyBundleNodeHandleRef]):
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange _copyBundleRangeHandleRef]):
        * WebProcess/InjectedBundle/DOM/InjectedBundleCSSStyleDeclarationHandle.cpp:
        (WebKit::InjectedBundleCSSStyleDeclarationHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):
        (WebKit::InjectedBundleNodeHandle::renderedImage):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::create):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::loadURL):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::createScrollbar):
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::applyChange):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toFormData):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        (WebKit::WebFrameLoaderClient::recreatePlugin):
        (WebKit::WebFrameLoaderClient::createJavaAppletWidget):
        (WebKit::WebFrameLoaderClient::createNetworkingContext):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::getOrCreate):
        (WebKit::VisitedLinkTableController::setVisitedLinkTable):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createWithCoreMainFrame):
        (WebKit::WebFrame::createSubframe):
        (WebKit::WebFrame::create):
        (WebKit::WebFrame::createSelectionSnapshot):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::snapshotAtSize):
        (WebKit::WebPage::snapshotNode):
        (WebKit::WebPage::willPerformLoadDragDestinationAction):
        (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad):
        (WebKit::WebPage::SandboxExtensionTracker::didCommitProvisionalLoad):
        (WebKit::WebPage::drawRectToImage):
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::create):
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::Properties::decode):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::create):
        (WebKit::PlatformCALayerRemote::clone):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::create):
        (WebKit::PlatformCALayerRemoteCustom::clone):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::createDisplayRefreshMonitor):

2016-06-20  Commit Queue  <commit-queue@webkit.org>

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

        The test either fails or times out 100% of the time (Requested
        by ap on #webkit).

        Reverted changeset:

        "REGRESSION: Double tap to zoom does not work on yahoo
        finance"
        https://bugs.webkit.org/show_bug.cgi?id=158886
        http://trac.webkit.org/changeset/202179

2016-06-20  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r191499): Tab content "jumps" down when focusing tabs that load in the background
        https://bugs.webkit.org/show_bug.cgi?id=158904
        <rdar://problem/26025831>

        Reviewed by Sam Weinig.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        During the large refactor that was r191499, we somehow ended up with two
        different members for the same thing - one that got written, and one that
        got read. We should only have one.

2016-06-20  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOS build after r202142 and r202224.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):

2016-06-19  Simon Fraser  <simon.fraser@apple.com>

        Fix erroneously commented line added in r202142.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):

2016-06-16  Enrica Casucci  <enrica@apple.com>

        Support configurable autocapitalization.
        https://bugs.webkit.org/show_bug.cgi?id=158860
        rdar://problem/26231403

        Reviewed by Tim Horton.

        The behavior of spellchecker should be configurable to avoid
        unwanted autocapitalization.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy):
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::initialCapitalizationEnabled):
        (API::PageConfiguration::setInitialCapitalizationEnabled):
        * UIProcess/API/C/WKPageConfigurationRef.cpp:
        (WKPageConfigurationSetIntialCapitalizationEnabled):
        * UIProcess/API/C/WKPageConfigurationRef.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _initialCapitalizationEnabled]):
        (-[WKWebViewConfiguration _setInitialCapitalizationEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/TextChecker.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::checkTextOfParagraph):
        (WebKit::WebPageProxy::getGuessesForWord):
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::checkTextOfParagraph):
        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):

2016-06-17  Chris Dumez  <cdumez@apple.com>

        Use WTF::NoncopyableFunction in NetworkDataTaskClient
        https://bugs.webkit.org/show_bug.cgi?id=158887

        Reviewed by Alex Christensen.

        Use WTF::NoncopyableFunction in NetworkDataTaskClient instead of std::function
        and consistently move it around. This avoids some unnecessary copying.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::willDecidePendingDownloadDestination):
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::willPerformHTTPRedirection):
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::didReceiveChallenge):
        (WebKit::NetworkDataTask::didReceiveResponse):
        (WebKit::NetworkDataTask::willPerformHTTPRedirection):
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::addChallengeToChallengeMap):
        (WebKit::AuthenticationManager::coalesceChallengesMatching):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        (WebKit::AuthenticationManager::tryUseCertificateInfoForChallenge):
        (WebKit::AuthenticationManager::useCredentialForSingleChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/mac/AuthenticationManager.mac.mm:
        (WebKit::AuthenticationManager::tryUseCertificateInfoForChallenge):

2016-06-17  Antoine Quint  <graouts@apple.com>

        Web video playback controls should have RTL volume slider
        https://bugs.webkit.org/show_bug.cgi?id=158856
        <rdar://problem/25971769>

        Reviewed by Tim Horton.

        We now call setUserInterfaceLayoutDirection() on WebCore::Page to propagate
        the user interface layout direction down to the Web content. To facilitate this,
        the UserInterfaceLayoutDirection enum is now defined in WebCore.

        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (convertSystemLayoutDirection):
        (toUserInterfaceLayoutDirection):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::toUserInterfaceLayoutDirection):
        (WebKit::WebViewImpl::userInterfaceLayoutDirection):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::userInterfaceLayoutDirection):
        (WebKit::WebPageProxy::setUserInterfaceLayoutDirection):
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebView.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::userInterfaceLayoutDirection):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::userInterfaceLayoutDirection):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanBecomeSwipe):
        (WebKit::ViewGestureController::isPhysicallySwipingLeft):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):
        (WebKit::WebPage::setUserInterfaceLayoutDirection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performNonEditingBehaviorForSelector):

2016-06-17  Dean Jackson  <dino@apple.com>

        REGRESSION: Double tap to zoom does not work on yahoo finance
        https://bugs.webkit.org/show_bug.cgi?id=158886
        <rdar://problem/24917760>

        Reviewed by Simon Fraser.

        We shouldn't enable fast click on pages that have
        had to shrink to fit. In other words, we should enable
        double-tap-to-zoom if the page has already zoomed.

        Test: fast/events/ios/viewport-shrink-to-fit-allows-double-tap.html

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

2016-06-16  Chris Dumez  <cdumez@apple.com>

        No need to ref connection in lambda inside NetworkResourceLoader::tryStoreAsCacheEntry()
        https://bugs.webkit.org/show_bug.cgi?id=158862

        Reviewed by Darin Adler.

        No need to ref connection in lambda inside NetworkResourceLoader::tryStoreAsCacheEntry().
        We already ref the NetworkResourceLoader which hold a ref to the connection. Also update
        the lambda capture to use Ref<> for the NetworkResourceLoader instead of RefPtr<>.
        Switch callback type from std::function to WTF::NoncopyableFunction so we can capture a
        Ref<>.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::WriteOperation::WriteOperation):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2016-06-16  Chris Dumez  <cdumez@apple.com>

        [WK2] Improve serialization of SubresourcesEntry to network disk cache
        https://bugs.webkit.org/show_bug.cgi?id=158851

        Reviewed by Antti Koivisto.

        Improve serialization of SubresourcesEntry to network disk cache:
        - Do not bother serializing SubresourceInfo's first party for cookies
          and HTTP headers data members if the resource is transient. This is
          because those are never used for transient resources. This patch also
          makes it so that we do not even bother initializing those data members
          if the transient flag is set.
        - Update SubresourceInfo::encode() / decode() to encode and decode
          the HTTPHeaderMap data member with the right NetworkCache::Coder
          template specialization instead of using directly HTTPHeaderMap::decode()
          and HTTPHeaderMap::encode(). HTTPHeaderMap::decode() / encode() is
          unsafe in the disk cache case (see r200394).

        Also update entry types as so:
        - "resource" -> "Resource"
        - "subresources" -> "SubResources"

        These entry types are used a folder names in the disk cache and other
        folder names were capitalized. Antti suggested this was a good time
        to harmonize since we're bumping the cache version.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode):
        (WebKit::NetworkCache::SubresourceInfo::decode):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):
        (WebKit::NetworkCache::SubresourceInfo::isTransient):
        (WebKit::NetworkCache::SubresourceInfo::firstPartyForCookies):
        (WebKit::NetworkCache::SubresourceInfo::requestHeaders):

2016-06-16  Anders Carlsson  <andersca@apple.com>

        Fix macOS Sierra build
        https://bugs.webkit.org/show_bug.cgi?id=158849

        Reviewed by Tim Horton.

        Add WebCore:: qualifiers for IOSurface, to avoid conflicts with the IOSurface Objective-C class
        and adopt IOSurface::asLayerContents().

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::decode):
        (WebKit::RemoteLayerBackingStore::bytesPerPixel):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        (WebKit::RemoteLayerBackingStore::setBufferVolatility):
        (WebKit::RemoteLayerBackingStore::Buffer::discard):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::asLayerContents):

2016-06-16  Brady Eidson  <beidson@apple.com>

        When a WebsiteDataStore finds no ProcessPools and creates one from scratch, it should represent the data store's config.
        rdar://problem/26586991 and https://bugs.webkit.org/show_bug.cgi?id=158844

        Reviewed by Anders Carlsson.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration):
        * UIProcess/API/APIProcessPoolConfiguration.h:

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::processPools):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2016-06-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location
        https://bugs.webkit.org/show_bug.cgi?id=158828

        Reviewed by Enrica Casucci.
        
        WebPage::getAssistedNodeInformation() unconditionally set information.selectionRect()
        to a 1x1 rect at the last interaction location. This caused -[WKWebView _zoomToFocusRect:...]
        to early return under the !forceScroll clause if the last interaction rect was visible, but
        the elementRect was not. This would happen, for example, if a click in a <button> focussed
        an input on some other portion of the page. This behavior is iPad-only, because forceScroll
        is only NO there.
        
        Fix by making getAssistedNodeInformation() only set the selectionRect to the last interaction
        location if that is inside of the elementRect (this caters to the case where a tap is inside
        an input which is larger than the screen). Otherwise, set it to the empty rect.
        
        Make this testable by allowing a test to opt into the iPad-style scrolling/zooming behavior
        in this code path (essentially, making forceScroll NO for testing), via testing SPI on WKWebView,
        plumbed through to WKContentView.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView forceIPadStyleZoomOnInputFocus]):
        (-[WKWebView setForceIPadStyleZoomOnInputFocus:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView requiresAccessoryView:]):
        (-[WKContentView inputAccessoryView]):
        (-[WKContentView forceIPadStyleZoomOnInputFocus]):
        (-[WKContentView setForceIPadStyleZoomOnInputFocus:]):
        (-[WKContentView requiresAccessoryView]): Remove redundant returns, and allow testing to
        override the "isIPad" condition.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2016-06-15  Sam Weinig  <sam@webkit.org>

        Forward/Back keyboard shortcuts need to flip for RTL
        https://bugs.webkit.org/show_bug.cgi?id=158823
        <rdar://problem/25975359>

        Reviewed by Darin Adler.

        Pipe the UserInterfaceLayoutDirection down to the WebContentProcess on initialization
        and when it changes, and use it to flip the behavior of command-left and command-right
        when in RTL mode.

        Tests:
            WebKit2_CommandBackForwardTestWKView.LTR
            WebKit2_CommandBackForwardTestWKView.RTL
            WebKit2_CommandBackForwardTestWKWebView.LTR
            WebKit2_CommandBackForwardTestWKWebView.RTL

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webViewPrintFormatter]):
        (-[WKWebView setSemanticContentAttribute:]):
        (-[WKWebView _printOperationWithPrintInfo:forFrame:]):
        (-[WKWebView setUserInterfaceLayoutDirection:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView setUserInterfaceLayoutDirection:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::windowIsFrontWindowUnderMouse):
        (WebKit::toUserInterfaceLayoutDirection):
        (WebKit::WebViewImpl::userInterfaceLayoutDirection):
        (WebKit::WebViewImpl::setUserInterfaceLayoutDirection):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::userInterfaceLayoutDirection):
        (WebKit::WebPageProxy::setUserInterfaceLayoutDirection):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::hasHadSelectionChangesFromUserInteraction):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_userInterfaceLayoutDirection):
        (WebKit::WebPage::setResourceCachingDisabled):
        (WebKit::WebPage::setUserInterfaceLayoutDirection):
        (WebKit::m_shouldDispatchFakeMouseMoveEvents): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performNonEditingBehaviorForSelector):

2016-06-15  Tim Horton  <timothy_horton@apple.com>

        Expose _shouldExpandContentToViewHeightForAutoLayout SPI on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=158824
        <rdar://problem/23713857>

        Reviewed by Simon Fraser.

        Test: TestWebKitAPI/WebKit2.AutoLayoutIntegration

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _shouldExpandContentToViewHeightForAutoLayout]):
        (-[WKWebView _setShouldExpandContentToViewHeightForAutoLayout:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        This property exists on WKView; expose it on WKWebView.

2016-06-15  Alex Christensen  <achristensen@webkit.org>

        Revert part of r196034
        https://bugs.webkit.org/show_bug.cgi?id=158805
        rdar://problem/26788138

        Reviewed by Dan Bernstein.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::~NetworkLoad):
        If the WebResourceLoader was destroyed and received a canAuthenticateAgainstProtectionSpace
        but did not send a continueCanAuthenticateAgainstProtectionSpace answer because there's no
        core loader, then the NetworkLoad will be destroyed.  When this happens, we still need to call
        the callback for the challenge.
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::canAuthenticateAgainstProtectionSpace):
        If there's no core loader, we can't send IPC.

2016-06-13  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Make it possible to test the Next/Previous buttons in the keyboard accessory bar
        https://bugs.webkit.org/show_bug.cgi?id=158714

        Reviewed by Enrica Casucci.

        Add UIScriptController.keyboardAccessoryBar{Next,Previous} and hook it up to the WKContentView
        method that gets called from UIKit.

        Add a test that exercises it.

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

2016-06-15  Dean Jackson  <dino@apple.com>

        RTL <select> forms are misplaced
        https://bugs.webkit.org/show_bug.cgi?id=158810
        <rdar://problem/24847541>

        Reviewed by Eric Carlson.

        AppKit made a change in Sierra that causes popup menus
        to snap to a different point when the system language is RTL.
        We need to be more explicit about what directionality
        we want, and override the location of the popup based
        on the text direction.

        I also made a small tweak to the fudge offsets we use
        in order to make button text and menu text to be
        more consistent.

        Unfortunately since this is just about the location
        of the popup menu, it's unable to be tested in our
        current infrastructure.

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):

2016-06-15  Chris Dumez  <cdumez@apple.com>

        Drop some unnecessary header includes
        https://bugs.webkit.org/show_bug.cgi?id=158788

        Reviewed by Alexey Proskuryakov.

        Drop some unnecessary header includes in headers to speed up build time.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        * WebProcess/Plugins/PDF/PDFPluginPasswordField.mm:
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebPage/WebPage.cpp:

2016-06-15  Romain Bellessort  <romain.bellessort@crf.canon.fr>

        Enabling Shadow DOM for all platforms
        https://bugs.webkit.org/show_bug.cgi?id=158738

        Reviewed by Ryosuke Niwa.

        Removed Shadow DOM from options (enabled by default)
        (comprises removal of corresponding preprocessor directives)

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/WebPage/WebPage.cpp:

2016-06-15  Antti Koivisto  <antti@apple.com>

        Vary:Cookie validation doesn't work in private browsing
        https://bugs.webkit.org/show_bug.cgi?id=158616
        <rdar://problem/26755067>

        Reviewed by Andreas Kling.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):

            Implement SessionID version of the function.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2016-06-14  Chris Dumez  <cdumez@apple.com>

        Avoid constructing a AuthenticationChallenge unnecessarily in the NetworkLoad constructor
        https://bugs.webkit.org/show_bug.cgi?id=158746

        Reviewed by Darin Adler.

        Avoid constructing a AuthenticationChallenge unnecessarily in the
        NetworkLoad constructor by using WTF::Optional<> for this data
        member.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/NetworkLoad.h:

2016-06-14  Chris Dumez  <cdumez@apple.com>

        Add missing WTFMove() in NetworkResourceLoader::didReceiveResponse()
        https://bugs.webkit.org/show_bug.cgi?id=158745

        Reviewed by Darin Adler.

        Add missing WTFMove() in NetworkResourceLoader::didReceiveResponse()
        to avoid copying the ResourceResponse.

        * NetworkProcess/NetworkResourceLoader.cpp:

2016-06-14  Chris Dumez  <cdumez@apple.com>

        Reduce copying of NetworkLoadParameters
        https://bugs.webkit.org/show_bug.cgi?id=158744

        Reviewed by Alex Christensen.

        Reduce copying of NetworkLoadParameters by moving it around instead.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):

2016-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [ThreadedCompositor] Opening the inspector in a window causes a crash.
        https://bugs.webkit.org/show_bug.cgi?id=154444

        Reviewed by Žan Doberšek.

        The threaded compositor doesn't handle the case of changing or removing the native surface handle. When the web
        view is reparented, the current native surface handle is destroyed when the view is removed from the parent, and
        a new one is created when added to the new parent. We need to handle this case in the threaded compositor.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::stopUpdateTimer): Allow users to stop the update timer.
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing): Use performTaskSync because this is called
        from a synchronous IPC message and right after it returns, the current native surface is destroyed by the UI
        process. So we need to ensure we finish all pending operations for the current native surface in the compositing
        thread before it's destroyed. Then we enable or disable the scene depending on whether the native surface has
        been created or destroyed and destroy the current context in case the new handle is 0.
        (WebKit::ThreadedCompositor::tryEnsureGLContext): Just renamed to make it clear that it can fail.
        (WebKit::ThreadedCompositor::glContext):
        (WebKit::ThreadedCompositor::renderLayerTree): Return early if scene is not active.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::setNativeSurfaceHandleForCompositing): Schedule a new layer flush
        after the native surface handle changed.

2016-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Modernize and simplify threaded compositor code
        https://bugs.webkit.org/show_bug.cgi?id=158615

        Reviewed by Žan Doberšek.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::performTask): Use NoncopyableFunction.
        (WebKit::CompositingRunLoop::performTaskSync): Ditto.
        (WebKit::CompositingRunLoop::startUpdateTimer): Just renamed to start instead of set.
        (WebKit::CompositingRunLoop::run): Expose run/stop methods instead of the internal RunLoop object.
        (WebKit::CompositingRunLoop::stop): Also stop the update timer instead of relying on the caller to do it.
        (WebKit::CompositingRunLoop::setUpdateTimer): Deleted.
        (WebKit::CompositingRunLoop::stopUpdateTimer): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing): Protects this directly in lambda capture.
        (WebKit::ThreadedCompositor::setDeviceScaleFactor): Ditto.
        (WebKit::ThreadedCompositor::didChangeViewportSize): Ditto.
        (WebKit::ThreadedCompositor::didChangeViewportAttribute): Ditto.
        (WebKit::ThreadedCompositor::didChangeContentsSize): Ditto.
        (WebKit::ThreadedCompositor::scrollTo): Ditto.
        (WebKit::ThreadedCompositor::scrollBy): Ditto.
        (WebKit::ThreadedCompositor::updateViewport): Use startUpdateTimer().
        (WebKit::ThreadedCompositor::scheduleDisplayImmediately): Ditto.
        (WebKit::ThreadedCompositor::didChangeVisibleRect): Improve lambda captures.
        (WebKit::ThreadedCompositor::renderLayerTree): Use m_viewportController directly.
        (WebKit::ThreadedCompositor::createCompositingThread): Use createThread() version that receives a function.
        (WebKit::ThreadedCompositor::runCompositingThread): Use run method and don't stop the update timer when the run
        loop finishes.
        (WebKit::ThreadedCompositor::terminateCompositingThread): Use stop method.
        (WebKit::ThreadedCompositor::ThreadedCompositor): Deleted.
        (WebKit::ThreadedCompositor::compositingThreadEntry): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        (WebKit::ThreadedCompositor::viewportController): Deleted.

2016-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Flickering and rendering artifacts when resizing the web view
        https://bugs.webkit.org/show_bug.cgi?id=154070

        Reviewed by Žan Doberšek.

        Resizing the web view is expected to be a sync operation, the UI process creates a new backing store state ID,
        sends UpdateBackingStoreState message with the flag RespondImmediately to the web process and waits up to 500ms
        for the reply (DidUpdateBackingStoreState message). When using the threaded compositor, we schedule a task in
        the compositing thread to update the viewport size, and return immediately, so that we reply to the UI process
        before the compositing thread has actually updated its size. There's a moment in which sizes are out of sync
        causing the flickering and rendering artifacts, the UI process continues rendering at the new size, while the
        web process is still rendering at the previous size. We can prevent this from happening just by making the
        resize task synchronous in the threaded compositor.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::performTaskSync): Add sync version of performTask().
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::didChangeViewportSize): Use performTaskSync().

2016-06-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix Soup downloads after r201943.

        This is a follow up of r201943. The DownloadClient used in DownloadSoup was not updated to the new API of the
        ResourceHandleClient because it was not using override on the virtual methods, so it was unnoticed. That broke
        the downloads soup implementation, because didReceiveResponse is no longer used in the DownloadClient. This
        patch updates the DownloadClient to the new ResourceHandleClient API adding also override to all the virtual
        methods to prevent this from happening in the future.

        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::DownloadClient::DownloadClient):
        (WebKit::DownloadClient::downloadFailed):
        (WebKit::DownloadClient::didReceiveResponse):
        (WebKit::DownloadClient::didReceiveData):
        (WebKit::DownloadClient::didFinishLoading):
        (WebKit::DownloadClient::didFail):
        (WebKit::DownloadClient::wasBlocked): Deleted.
        (WebKit::DownloadClient::cannotShowURL): Deleted.
        (WebKit::DownloadClient::cancel):
        (WebKit::DownloadClient::handleResponse):

2016-06-13  Dan Bernstein  <mitz@apple.com>

        [Mac] Web Content service with a restricted entitlement may load arbitrary dylibs
        https://bugs.webkit.org/show_bug.cgi?id=156668
        <rdar://problem/26714558>

        Reviewed by Anders Carlsson.

        * Configurations/WebContentService.xcconfig: Enable library validation when the Web Content
          service is given the XPC domain extension entitlement when targeting macOS Sierra or later.

2016-06-13  Alex Christensen  <achristensen@webkit.org>

        Add WebSocketProvider stub
        https://bugs.webkit.org/show_bug.cgi?id=158702

        Reviewed by Brady Eidson.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebSocketProvider.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):

2016-06-10  Ada Chan  <adachan@apple.com>

        Use the video element's video box when getting the inline video rect in WebVideoFullscreenManager
        https://bugs.webkit.org/show_bug.cgi?id=158351
        <rdar://problem/26567938>

        Reviewed by Darin Adler.

        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::inlineVideoFrame):
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement):
        (WebKit::WebVideoFullscreenManager::exitVideoFullscreenForVideoElement):
        (WebKit::WebVideoFullscreenManager::fullscreenMayReturnToInline):
        (WebKit::WebVideoFullscreenManager::setVideoLayerFrameFenced):
        (WebKit::clientRectForElement): Deleted.

2016-06-10  Benjamin Poulain  <bpoulain@apple.com>

        Add support for passive event listeners on touch events
        https://bugs.webkit.org/show_bug.cgi?id=158601

        Reviewed by Simon Fraser.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        (WebKit::dump):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<EventTrackingRegions>::encode):
        (IPC::ArgumentCoder<EventTrackingRegions>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::eventTrackingTypeForPoint):
        (WebKit::RemoteScrollingCoordinatorProxy::isPointInNonFastScrollableRegion): Deleted.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::touchEventTrackingType):
        The type is the most restrictive type of all the touch points.
        If any touch point needs synchronous tracking, everything has to be synchronous.

        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        This is a very unfortunate design.

        The upper layer dealing with UIKit knows about gesture and when something
        can be dispatched asynchrnously because a gesture has started.
        This layer knows about tracking and can use that extra inforamtion
        to dispatch an event asynchrnously anyway.

        In the future, we should refactor this to let WebPageProxy
        always decide of the dispatch type. I am just concerned changing
        the upper layer while we are stabilizing WebKit.

        (WebKit::WebPageProxy::handleTouchEventAsynchronously):
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::WebPageProxy): Deleted.
        (WebKit::WebPageProxy::shouldStartTrackingTouchEvents): Deleted.
        * UIProcess/WebPageProxy.h:

2016-06-10  Beth Dakin  <bdakin@apple.com>

        Add requestExitFullScreen to WKFullScreenWindowController
        https://bugs.webkit.org/show_bug.cgi?id=158633
        -and corresponding-
        rdar://problem/26564036

        Reviewed by Tim Horton.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController requestExitFullScreen]):

2016-06-10  Alex Christensen  <achristensen@webkit.org>

        Reduce ResourceResponse copying
        https://bugs.webkit.org/show_bug.cgi?id=158232

        Reviewed by Darin Adler.

        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueDidReceiveResponse):
        (WebKit::NetworkLoad::sharedDidReceiveResponse):
        (WebKit::NetworkLoad::sharedWillSendRedirectedRequest):
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        (WebKit::NetworkLoad::didReceiveResponseAsync):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::abort):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/cache/NetworkCacheCoders.h:
        (WebKit::NetworkCache::Coder<Optional<T>>::encode):
        (WebKit::NetworkCache::Coder<Optional<T>>::decode):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::didCompleteWithError):
        (WebKit::NetworkDataTask::didReceiveResponse):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::url):
        (WebKit::WebFrame::certificateInfo):
        (WebKit::WebFrame::innerText):

2016-06-09  Ryosuke Niwa  <rniwa@webkit.org>

        Add SPI to disable spellchecking on auto-fillable text fields
        https://bugs.webkit.org/show_bug.cgi?id=158611

        Reviewed by Anders Carlsson.

        Added WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled to disable spellchecking on a text field.

        This is used by WebKit2 client which desires to disable spellchecking and notably autocorrection on
        login forms, etc... where such feature would interfere with user's actions.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled): Added.
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementSpellcheckEnabled): Added.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2016-06-10  Alex Christensen  <achristensen@webkit.org>

        Introduce WTF::UniqueRef
        https://bugs.webkit.org/show_bug.cgi?id=158596

        Reviewed by Brady Eidson.

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

2016-06-10  Anders Carlsson  <andersca@apple.com>

        Remove CommandLine class
        https://bugs.webkit.org/show_bug.cgi?id=158628

        Reviewed by Tim Horton.

        * Shared/CommandLine.h: Removed.
        (WebKit::CommandLine::operator[]): Deleted.
        * Shared/posix/CommandLinePOSIX.cpp: Removed.
        (WebKit::CommandLine::parse): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2016-06-10  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Rare RELEASE_ASSERT under RemoteLayerTreeDrawingArea::flushLayers()
        https://bugs.webkit.org/show_bug.cgi?id=158622
        rdar://problem/26609452

        Reviewed by Tim Horton.
        
        It's possible for a CADisplayLink to fire after being paused sometimes, possibly
        when an app is running another CADisplayLink whose callback takes some time. When
        this happens, RemoteLayerTreeDrawingAreaProxy could erroneously send a second
        didUpdate() to the web process between commits, which would clear the m_waitingForBackingStoreSwap
        flag too early, and allow a subsequent RemoteLayerTreeDrawingArea::flushLayers()
        to proceed when the m_pendingBackingStoreFlusher was still flushing.

        Fix by preventing two didUpdates from being sent from the UI process between
        commits.
        
        Not easily testable.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):

2016-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Content and viewport sizes are mixed
        https://bugs.webkit.org/show_bug.cgi?id=158564

        Reviewed by Žan Doberšek.

        Make ThreadedCoordinatedLayerTreeHost::sizeDidChange() update the viewport size for consistency with all other
        LayerTreeHost implementations and rename viewportSizeChanged() as contentsSizeChanged() and update the contents
        size.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged): Remove ifdefed code here, the drawing area is notified two lines below.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::mainFrameContentSizeChanged): Update the viewport size to the contents size
        only when using a fixed layout here instead of in cross-platform code.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::contentsSizeChanged):
        (WebKit::ThreadedCoordinatedLayerTreeHost::sizeDidChange):
        (WebKit::ThreadedCoordinatedLayerTreeHost::viewportSizeChanged): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::mainFrameContentSizeChanged): Call LayerTreeHost::contentsSizeChanged().
        (WebKit::DrawingAreaImpl::updateBackingStoreState): Remove ifdefed code for the threadecd compositor since it's
        now consistent with all other LayerTreeHost implementations.
        * WebProcess/WebPage/LayerTreeHost.h:

2016-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Make it clear that compositing thread operations are always scheduled from the main thread
        https://bugs.webkit.org/show_bug.cgi?id=158562

        Reviewed by Žan Doberšek.

        The code is written as if the compositor thread could also call callOnCompositingRunLoop() which makes the code
        confusing. This patch no longer checks if the task was scheduled in the compositing thread, and instead it adds
        an ASSERT to ensure it's always called from the main thread as expected. It also adds some more ASSERTS to ensure
        and clarify the methods are called from the expected thread.

        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
        (WebKit::CompositingRunLoop::performTask):
        (WebKit::CompositingRunLoop::callOnCompositingRunLoop): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing):
        (WebKit::ThreadedCompositor::setDeviceScaleFactor):
        (WebKit::ThreadedCompositor::didChangeViewportSize):
        (WebKit::ThreadedCompositor::didChangeViewportAttribute):
        (WebKit::ThreadedCompositor::didChangeContentsSize):
        (WebKit::ThreadedCompositor::scrollTo):
        (WebKit::ThreadedCompositor::scrollBy):
        (WebKit::ThreadedCompositor::glContext):
        (WebKit::ThreadedCompositor::didChangeVisibleRect):
        (WebKit::ThreadedCompositor::renderLayerTree):
        (WebKit::ThreadedCompositor::updateSceneState):
        (WebKit::ThreadedCompositor::callOnCompositingThread): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:

2016-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Browser plugins crash under Wayland
        https://bugs.webkit.org/show_bug.cgi?id=157605

        Reviewed by Michael Catanzaro.

        Fail the initialization of windowed plugins if we don't have a platform implementation.

        * WebProcess/Plugins/Netscape/unix/NetscapePluginUnix.cpp:
        (WebKit::NetscapePlugin::platformPostInitialize):

2016-06-09  Antoine Quint  <graouts@apple.com>

        [iOS] -webkit-overflow-scrolling: touch; ignores pointer-events: none;
        https://bugs.webkit.org/show_bug.cgi?id=119839
        <rdar://problem/9671514>

        Reviewed by Simon Fraser.

        Propagate a "userInteractionEnabled" flag from the Web process which is used to turn off
        user interaction on a UIScrollView created for -webkit-overflow-scrolling: touch.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::userInteractionEnabled):
        (WebKit::PlatformCALayerRemote::setUserInteractionEnabled):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2016-06-09  Anders Carlsson  <andersca@apple.com>

        Remove OriginAndDatabases.cpp, it's unused
        https://bugs.webkit.org/show_bug.cgi?id=158595

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * Shared/OriginAndDatabases.cpp: Removed.
        (WebKit::OriginAndDatabases::encode): Deleted.
        (WebKit::OriginAndDatabases::decode): Deleted.
        * Shared/OriginAndDatabases.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2016-06-09  Alex Christensen  <achristensen@webkit.org>

        Clean up EditorClient lifetime
        https://bugs.webkit.org/show_bug.cgi?id=158588

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::generateTextCheckingRequestID):
        (WebKit::WebEditorClient::shouldDeleteRange):
        (WebKit::WebEditorClient::pageDestroyed): Deleted.
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        (WebKit::WebEditorClient::WebEditorClient):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):

2016-06-09  Andy Estes  <aestes@apple.com>

        WKWebView does not render PDF pages in AirPrint
        https://bugs.webkit.org/show_bug.cgi?id=151386
        rdar://problem/22499157

        Reviewed by Tim Horton.

        _WKWebViewPrintFormatter originally attempted to handle PDFs, but the code path was never
        properly tested since Safari prints PDFs by setting a printingItem on the
        UIPrintInteractionController instead of going through a print formatter. The existing code
        almost worked, if it weren't for CGContextScaleCTM() scaling each page into oblivion due to
        _totalScaleFactor equaling 0.

        This patch properly implements -[_WKWebViewPrintFormatter drawInRect:forPageAtIndex:] to
        handle drawing both PDFs generated by WebKit and PDFs loaded in the main frame. It also
        takes the opportunity to clean up a number of issues in the existing code:

        - Handling of -[_WKWebViewPrintFormatter startPage] is now correct. I had previously assumed
          this property represented the first page of output to print, but it actually represents
          the first page in the overall print job that the print formatter renders. In other words,
          regardless of -startPage, the print formatter should always print all its pages.
        - Code specific to webpage and PDF printing was factored out into WKContentView and
          WKPDFView, respectively. Each conforms to @protocol(_WKWebViewPrintProvider), and
          _WKWebViewPrintFormatter accesses the provider via -[WKWebView _printProvider].
        - Instead of piping the printed PDF data from WebPageProxy to WKWebView via PageClient, use
          the GenericCallback mechanism to have WebPageProxy call a lambda specified by
          WKContentView when the printed PDF is available.
        - Removed _totalScaleFactor and used CGPDFPageGetDrawingTransform() to transform both
          webpages and PDFs. For webpages, _totalScaleFactor will always equal the ratio of the
          paper width to the PDF page width, so CGPDFPageGetDrawingTransform() will apply the same
          scaling as CGContextScaleCTM(_totalScaleFactor, _totalScaleFactor) would.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _printProvider]): Added. Returns _currentContentView if it conforms to
        @protocol(_WKWebViewPrintProvider).
        (-[WKWebView _computePageCountAndStartDrawingToPDFForFrame:printInfo:firstPage:computedTotalScaleFactor:]):
        Moved code to _wk_pageCountForPrintFormatter in WKContentView and WKPDFView.
        (-[WKWebView _endPrinting]): Deleted.
        (-[WKWebView _printedDocument]): Deleted.
        (-[WKWebView _setPrintedDocument:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h: Declared the _printProvider property.
        * UIProcess/PageClient.h: Removed didFinishDrawingPagesToPDF().
        * UIProcess/WebPageProxy.h: Declared computePagesForPrintingAndDrawToPDF() and
        drawToPDFCallback().
        * UIProcess/WebPageProxy.messages.in: Renamed DidFinishDrawingPagesToPDF to
        DrawToPDFCallback.
        * UIProcess/_WKWebViewPrintFormatter.mm: Backed the frameToPrint property with a RetainPtr
        ivar so that it doesn't need to be released manually in -dealloc; removed _totalScaleFactor
        and _printInfo ivars and added a _printedDocument ivar; removed the property declaration for
        webView.
        (-[_WKWebViewPrintFormatter frameToPrint]): Added a custom getter for the frameToPrint
        property.
        (-[_WKWebViewPrintFormatter setFrameToPrint:]): Added a custom setter for the frameToPrint
        property.
        (-[_WKWebViewPrintFormatter _webView]): Renamed from webView; added an underscore since this
        is a private method.
        (-[_WKWebViewPrintFormatter _recalcPageCount]): Retrieved the page count from the print
        provider and clamped its value to NSIntegerMax.
        (-[_WKWebViewPrintFormatter drawInRect:forPageAtIndex:]): Retrieved the printed document
        from the print provider if needed; modified the CTM transformations to work for both
        webpages and PDFs.
        (-[_WKWebViewPrintFormatter dealloc]): Deleted.
        (-[_WKWebViewPrintFormatter webView]): Renamed to _webView.
        (-[_WKWebViewPrintFormatter rectForPageAtIndex:]): Deleted.
        * UIProcess/_WKWebViewPrintFormatterInternal.h: Added. Moved a UIPrintFormatter internal
        method declaration to here and defined the _WKWebViewPrintProvider protocol.
        * UIProcess/ios/PageClientImplIOS.h: Removed didFinishDrawingPagesToPDF().
        * UIProcess/ios/PageClientImplIOS.mm: Ditto.
        (WebKit::PageClientImpl::didFinishDrawingPagesToPDF): Deleted.
        * UIProcess/ios/WKContentView.mm: Conformed to @protocol(_WKWebViewPrintProvider).
        (-[WKContentView _wk_pageCountForPrintFormatter:]): Moved the code to compute page count
        from WKWebView to here.
        (-[WKContentView _wk_printedDocument]): Moved the code to get the printed document from
        WKWebView to here.
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _wk_pageCountForPrintFormatter:]): Moved the code to compute the page count
        from WKWebView to here; added a call to CGPDFDocumentAllowsPrinting(), returning 0 if
        printing is not allowed.
        (-[WKPDFView _wk_printedDocument]): Moved the code to get the printed document from
        WKWebView to here.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computePagesForPrintingAndDrawToPDF): Registered the callback with
        m_callbacks and sent Messages::WebPage::ComputePagesForPrintingAndDrawToPDF; returned the
        synchronously-returned page count.
        (WebKit::WebPageProxy::drawToPDFCallback): Added to perform the callback when drawing to PDF
        is complete.
        (WebKit::WebPageProxy::didFinishDrawingPagesToPDF): Deleted.
        * WebKit2.xcodeproj/project.pbxproj: Added _WKWebViewPrintFormatterInternal.h.
        * WebProcess/WebPage/WebPage.h: Renamed computePagesForPrintingAndStartDrawingToPDF() to
        computePagesForPrintingAndDrawToPDF().
        * WebProcess/WebPage/WebPage.messages.in: Renamed
        ComputePagesForPrintingAndStartDrawingToPDF to ComputePagesForPrintingAndDrawToPDF. Removed
        the startPage parameter and added a callbackID.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::computePagesForPrintingAndDrawToPDF): Renamed from
        computePagesForPrintingAndStartDrawingToPDF(). Added a call to endPrinting() after sending
        Messages::WebPageProxy::DrawToPDFCallback.
        (WebKit::WebPage::computePagesForPrintingAndStartDrawingToPDF): Renamed to
        computePagesForPrintingAndDrawToPDF.

2016-06-09  Alex Christensen  <achristensen@webkit.org>

        Clean up WebSocket code
        https://bugs.webkit.org/show_bug.cgi?id=158551

        Reviewed by Darin Adler.

        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2016-06-09  David Kilzer  <ddkilzer@apple.com>

        Update properties for UIWKTextInteractionAssistant
        <https://webkit.org/b/158559>

        Reviewed by Darin Adler.

        * Platform/spi/ios/UIKitSPI.h:
        (UIWKTextInteractionAssistant.loupeGesture):
        (UIWKTextInteractionAssistant.singleTapGesture):
        Change from retain to assign since UIWKTextInteractionAssistant
        is not responsible for their lifetime.  Sort alphabetically.

2016-06-09  Michael Saboff  <msaboff@apple.com>

        WebKitTestRunner and DumpRenderTree do not handle dangling surrogate characters
        https://bugs.webkit.org/show_bug.cgi?id=154863

        Reviewed by Alexey Proskuryakov.

        Added a non-strict verions of WKStringGetUTF8CString() that will handle dangling
        surrogates called WKStringGetUTF8CStringNonStrict().

        * Shared/API/c/WKString.cpp:
        (WKStringGetUTF8CStringImpl):
        (WKStringGetUTF8CString):
        (WKStringGetUTF8CStringNonStrict):
        * Shared/API/c/WKString.h:

2016-06-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Many layout tests crash when threaded compositor is enabled
        https://bugs.webkit.org/show_bug.cgi?id=158560

        Reviewed by Žan Doberšek.

        This is because CoordinatedGraphicsLayer::notifyFlushRequired() assumes it has a valid compositor when it's
        called. But the compositor is only present when GraphicsLayer::create() is called with a
        GraphicsLayerFactory. When running the layout tests, layers are created without a factory because DrawingAreaImpl
        is not entering AC mode as expected and the layer tree host is not created, making
        DrawingAreaImpl::graphicsLayerFactory() always return nullptr. This happens because DrawingAreaImpl is checking
        acceleratedDrawingEnabled setting to decide whether to always use compositing mode or not, and WTR sets that
        setting to false (changing its default value). The thing is that acceleratedDrawingEnabled setting doesn't have
        any effect in non-Mac ports, what we really want to check there is whether acceleratedCompositingEnabled is true
        or false.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updatePreferences):

2016-06-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Threaded Compositor] Remove ThreadedCompositor::setNeedsDisplay()
        https://bugs.webkit.org/show_bug.cgi?id=158523

        Reviewed by Michael Catanzaro.

        ThreadedCompositor::setNeedsDisplay() is always called from the main thread and schedules a task to the
        compositing thread to schedule an immediate update. But RunLoop::Timer is thread-safe so we don't really need to
        schedule a task to the update the timer in the compositing thread, we can do that directly in the main
        thread. And that's exactly what scheduleDisplayImmediately() does, so we can use it instead of setNeedsDisplay().

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::setNeedsDisplay(): Deleted.
        (WebKit::ThreadedCompositor::updateSceneState):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:

2016-06-08  Antti Koivisto  <antti@apple.com>

        Increase disk cache capacity when there is lots of free space
        https://bugs.webkit.org/show_bug.cgi?id=158526

        Reviewed by Chris Dumez.

        Our maximum disk cache capacity has been 175MB for a very long time. Meanwhile the average resource size has grown
        massively. 175MB is now enough for cacheable resources of a few dozen sites at most. Using bigger caches when there is
        room for it can reduce network traffic, reduce disk writes, save battery and speed up page loading.

        This patch changes cache size for PrimaryWebBrowser cache model

        >=16GB free: 175MB -> 500MB
        8-16GB free: 150MB -> 250MB

        and modestly for DocumentBrowser

        >=16GB free: 50MB -> 75MB

        Note that if system (on Cocoa platforms) really needs disk space it will wipe out caches so this doesn't reduce
        available disk space in scenarios like software installation.

        * Shared/CacheModel.cpp:
        (WebKit::calculateCacheSizes):

2016-06-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Introduce ResourceErrorBase::type
        https://bugs.webkit.org/show_bug.cgi?id=158299

        Reviewed by Alex Christensen.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceError>::decodePlatformData):

2016-06-08  Beth Dakin  <bdakin@apple.com>

        _web_didAddMediaControlsManager should take a controlsManager as a parameter 
        https://bugs.webkit.org/show_bug.cgi?id=158545

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebViewImpl.h:

2016-06-06  Antti Koivisto  <antti@apple.com>

        WebKit memory cache doesn't respect Vary header
        https://bugs.webkit.org/show_bug.cgi?id=71509
        <rdar://problem/26651033>

        Reviewed by Sam Weinig.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeCacheKey):
        (WebKit::NetworkCache::cachePolicyAllowsExpired):
        (WebKit::NetworkCache::makeUseDecision):
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::storeRedirect):
        (WebKit::NetworkCache::Cache::update):
        (WebKit::NetworkCache::headerValueForVary): Deleted.
        (WebKit::NetworkCache::collectVaryingRequestHeaders): Deleted.
        (WebKit::NetworkCache::verifyVaryingRequestHeaders): Deleted.

            These move to WebCore.

2016-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build with threaded compositor enabled after r201802.

        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::create):

2016-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        LayerTreeHost should be created with a WebPage reference instead of a pointer
        https://bugs.webkit.org/show_bug.cgi?id=158520

        Reviewed by Žan Doberšek.

        We are indeed creating the LayerTreeHost always from a WebPage reference but getting its address to pass it to
        the LayerTreeHost create() function.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::enterAcceleratedCompositingMode):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::create):
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):
        (WebKit::CoordinatedLayerTreeHost::performScheduledLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::commitSceneState):
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::create):
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost):
        (WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::ThreadedCoordinatedLayerTreeHost::compositorDidFlushLayers):
        (WebKit::ThreadedCoordinatedLayerTreeHost::didScaleFactorChanged):
        (WebKit::ThreadedCoordinatedLayerTreeHost::setVisibleContentsRect):
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        (WebKit::LayerTreeHost::LayerTreeHost):
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::create):
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk):
        (WebKit::LayerTreeHostGtk::makeContextCurrent):
        (WebKit::LayerTreeHostGtk::deviceOrPageScaleFactorChanged):
        (WebKit::LayerTreeHostGtk::paintContents):
        (WebKit::LayerTreeHostGtk::deviceScaleFactor):
        (WebKit::LayerTreeHostGtk::pageScaleFactor):
        (WebKit::LayerTreeHostGtk::flushPendingLayerChanges):
        (WebKit::LayerTreeHostGtk::flushAndRenderLayers):
        (WebKit::LayerTreeHostGtk::pageBackgroundTransparencyChanged):
        (WebKit::LayerTreeHostGtk::initialize): Deleted.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2016-06-07  Sam Weinig  <sam@webkit.org>

        Fix 10.10 build.

        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::addAnimationToLayer):

2016-06-06  Alex Christensen  <achristensen@webkit.org>

        Modernize loading code
        https://bugs.webkit.org/show_bug.cgi?id=158332

        Reviewed by Darin Adler.

        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::client):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        (WebKit::NetworkLoad::didReceiveData):
        (WebKit::NetworkLoad::didReceiveBuffer):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didReceiveBuffer):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::didReceiveResponse):
        (WebKit::NetworkDataTask::didReceiveData):
        * Shared/WebHitTestResultData.cpp:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResource):

2016-06-05  Sam Weinig  <sam@webkit.org>

        Add experimental support for spring based CSS animations
        https://bugs.webkit.org/show_bug.cgi?id=158403

        Reviewed by Dean Jackson.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<StepsTimingFunction>::decode):
        (IPC::ArgumentCoder<SpringTimingFunction>::encode):
        (IPC::ArgumentCoder<SpringTimingFunction>::decode):
        (IPC::ArgumentCoder<FloatPoint>::encode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::Properties::encode):
        (WebKit::PlatformCAAnimationRemote::Properties::decode):
        (WebKit::addAnimationToLayer):
        Pipe through support for the Spring animation.

2016-06-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Hide GTK+ 2 plugins if GTK+ 2 plugin process was built but is not installed
        https://bugs.webkit.org/show_bug.cgi?id=158419

        Reviewed by Carlos Garcia Campos.

        Patch by Alberto Garcia <berto@igalia.com>

        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::getPluginInfo):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):

2016-06-06  Antoine Quint  <graouts@apple.com>

        Position of WebGL <canvas> on iOS is incorrect with CSS borders
        https://bugs.webkit.org/show_bug.cgi?id=156790

        Reviewed by Simon Fraser.

        WebGL layers on iOS are hosted by a WKRemoteView, which applies a transform scaling
        its content by the inverse of the device pixel ratio, which affects how positions are
        applied to the WebGL layer. The container layer of the layer hosted by a WKRemoteView
        then has an inverse transform applied to it in the PlatformCALayerRemoteCustom
        constructor. However, the position of a CALayer is not affected by its transform.

        The fix for <rdar://problem/18316542> should be specific to video, so we only apply the
        scaling in the case of a LayerTypeAVPlayerLayer.

        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (-[WKRemoteView initWithFrame:contextID:]):
        (WebKit::RemoteLayerTreeHost::createLayer):
        (-[WKRemoteView initWithFrame:contextID:hostingDeviceScaleFactor:]): Deleted.
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):

2016-06-06  Brady Eidson  <beidson@apple.com>

        Fix build after r201717

        Unreviewed.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::grantSandboxExtensionsToDatabaseProcessForBlobs):
        * NetworkProcess/NetworkProcess.h:
        
2016-06-06  Brady Eidson  <beidson@apple.com>

        Modern IDB: Crash seen in IDBConnectionProxy::putOrAdd on GuardMalloc bot
        https://bugs.webkit.org/show_bug.cgi?id=158124

        Reviewed by Darin Adler.
        
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::writeBlobsToTemporaryFiles):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles):
        * WebProcess/Network/NetworkProcessConnection.h:

2016-06-06  Commit Queue  <commit-queue@webkit.org>

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

        This change broke the Yosemite build and its LayoutTest is
        failing on Mac and iOS testers (Requested by ryanhaddad on
        #webkit).

        Reverted changeset:

        "Add experimental support for spring based CSS animations"
        https://bugs.webkit.org/show_bug.cgi?id=158403
        http://trac.webkit.org/changeset/201706

2016-06-06  Alex Christensen  <achristensen@webkit.org>

        Reduce ResourceRequest copying in loading code
        https://bugs.webkit.org/show_bug.cgi?id=158251

        Reviewed by Darin Adler.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::DownloadManager::continueWillSendRequest):
        (WebKit::DownloadManager::willDecidePendingDownloadDestination):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::PendingDownload):
        (WebKit::PendingDownload::willSendRedirectedRequest):
        (WebKit::PendingDownload::continueWillSendRequest):
        (WebKit::PendingDownload::canAuthenticateAgainstProtectionSpaceAsync):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::firstRequest):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::cancel):
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::sharedDidReceiveResponse):
        (WebKit::NetworkLoad::sharedWillSendRedirectedRequest):
        (WebKit::NetworkLoad::setPendingDownload):
        (WebKit::NetworkLoad::willPerformHTTPRedirection):
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didFail):
        (WebKit::NetworkLoad::willSendRequestAsync):
        * NetworkProcess/NetworkLoad.h:
        (WebKit::NetworkLoad::currentRequest):
        (WebKit::NetworkLoad::clearCurrentRequest):
        (WebKit::NetworkLoad::pendingDownloadID):
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkProcess::continueWillSendRequest):
        (WebKit::NetworkProcess::pendingDownloadCanceled):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/PingLoad.h:
        (WebKit::PingLoad::PingLoad):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::~SpeculativeLoad):
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::didBecomeDownload):
        (WebKit::NetworkDataTask::willPerformHTTPRedirection):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::detachFromCoreLoader):
        (WebKit::WebResourceLoader::willSendRequest):
        * WebProcess/Network/WebResourceLoader.h:

2016-06-05  Sam Weinig  <sam@webkit.org>

        Add experimental support for spring based CSS animations
        https://bugs.webkit.org/show_bug.cgi?id=158403

        Reviewed by Dean Jackson.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<StepsTimingFunction>::decode):
        (IPC::ArgumentCoder<SpringTimingFunction>::encode):
        (IPC::ArgumentCoder<SpringTimingFunction>::decode):
        (IPC::ArgumentCoder<FloatPoint>::encode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::Properties::encode):
        (WebKit::PlatformCAAnimationRemote::Properties::decode):
        (WebKit::addAnimationToLayer):
        Pipe through support for the Spring animation.

2016-06-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Change ProxyObject.[[Get]] not to use custom accessor
        https://bugs.webkit.org/show_bug.cgi?id=157080

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2016-06-05  Brady Eidson  <beidson@apple.com>

        Unreviewed, rolling out r201694.

        201693

        Reverted changeset:

        "Fix the build after r201693."
        https://bugs.webkit.org/show_bug.cgi?id=158394
        http://trac.webkit.org/changeset/201694

2016-06-05  Brady Eidson  <beidson@apple.com>

        Fix the build after r201693.
        https://bugs.webkit.org/show_bug.cgi?id=158394

        Reviewed by NOBODY (Build fix).

        r201693 landed without the Source/WebKit2 changes, and I didn't have EWS/CQ available to check myself. *sigh*
        
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::writeBlobsToTemporaryFiles):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles):
        * WebProcess/Network/NetworkProcessConnection.h:

2016-06-03  Commit Queue  <commit-queue@webkit.org>

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

        Broke the Windows build (Requested by andersca on #webkit).

        Reverted changeset:

        "Rename NoncopyableFunction to Function"
        https://bugs.webkit.org/show_bug.cgi?id=158354
        http://trac.webkit.org/changeset/201663

2016-06-03  Anders Carlsson  <andersca@apple.com>

        Rename NoncopyableFunction to Function
        https://bugs.webkit.org/show_bug.cgi?id=158354

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::clearDiskCacheEntries):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::traverse):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::runTaskInQueue):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2016-06-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r196633 as it broke PageCache on iOS for WebKit.org
        <rdar://problem/26521101>

        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::setVisitedLinkTable):
        (WebKit::VisitedLinkTableController::visitedLinkStateChanged):
        (WebKit::VisitedLinkTableController::allVisitedLinkStateChanged):
        (WebKit::VisitedLinkTableController::removeAllVisitedLinks):

2016-06-03  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(INDEXED_DATABASE) build after r201575
        https://bugs.webkit.org/show_bug.cgi?id=158346

        Reviewed by Brady Eidson.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::fetchWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):

2016-06-02  Chris Dumez  <cdumez@apple.com>

        Crash under WebProcess::registerWithStateDumper()
        https://bugs.webkit.org/show_bug.cgi?id=158304
        <rdar://problem/25329276>

        Reviewed by Anders Carlsson.

        The issue is that the block in registerWithStateDumper() was executed in
        a background thread and is iterating over m_pageMap HashMap. The crash
        occurs when a page gets removed from the m_pageMap HashMap while the
        block is iterating over this same HashMap in another thread.

        The solution proposed is to execute the registerWithStateDumper()'s
        block in the main thread.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::registerWithStateDumper):

2016-06-02  Brady Eidson  <beidson@apple.com>

        Overhaul cross-thread use of ResourceRequest, ResourceResponse, and ResourceError.
        https://bugs.webkit.org/show_bug.cgi?id=158293

        Reviewed by Darin Adler.

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):

2016-06-02  Chris Dumez  <cdumez@apple.com>

        Modernize various lambda captures
        https://bugs.webkit.org/show_bug.cgi?id=158292

        Reviewed by Brady Eidson.

        Modernize various lambda captures, especially the ones unnecessarily
        allocating objects on the heap and destroying them in the lambda.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::clearDiskCacheEntries):
        (WebKit::NetworkProcess::fetchWebsiteData): Deleted.
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::traverse):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::TraverseOperation::TraverseOperation):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2016-06-02  Chris Dumez  <cdumez@apple.com>

        Speculative revalidated request returns 200 instead of 304
        https://bugs.webkit.org/show_bug.cgi?id=158256

        Reviewed by Antti Koivisto and Carlos Garcia Campos.

        Already conditional requests coming from WebCore should bypass the
        SpeculativeLoadManager. This is because the validation is requested
        by WebCore (usually the memory cache) and not our network cache. As
        a result, we need to pipe the revalidation response (e.g. 304 status
        code) back to WebCore instead of resolving it as disk cache level.

        This should fix the /webkit2/WebKitWebResource/response unit test.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::requestsHeadersMatch):

2016-06-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Use more references in ResourceLoader related code
        https://bugs.webkit.org/show_bug.cgi?id=158222

        Reviewed by Darin Adler.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource):
        (WebKit::WebLoaderStrategy::schedulePluginStreamLoad):
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::scheduleInternallyFailedLoad):
        (WebKit::WebLoaderStrategy::startLocalLoad):
        (WebKit::WebLoaderStrategy::networkProcessCrashed):
        * WebProcess/Network/WebLoaderStrategy.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::create):
        (WebKit::WebResourceLoader::WebResourceLoader):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::start):

2016-06-01  Yongjun Zhang  <yongjun_zhang@apple.com>

        Notify client immediately if network session doesn't exist for a synchronous XHR load.
        https://bugs.webkit.org/show_bug.cgi?id=158239
        <rdar://problem/26344251>

        Reviewed by Brady Eidson.

        For a synchronous XHR load, if the network session doesn't exist, we should notify NetworkLoadClient.
        Otherwise the Web process could hang when waiting for the synchronous load to finish.

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

2016-05-31  Brian Burg  <bburg@apple.com>
  
        REGRESSION(r191907): Can't enter combining diacritic marks in Web Inspector fields
        https://bugs.webkit.org/show_bug.cgi?id=158227
        <rdar://problem/26232464>

        Reviewed by Darin Adler and Alexey Proskuryakov.

        Web Inspector uses a WKWebView subclass for the inspector frontend interface.
        Since r191907, WKWebView does not have an inner WKView, and instead shares
        a WebViewImpl to implement the same methods as WKView. So, WKView is no longer
        involved at all when delivering keystrokes to the Web Inspector interface.

        This caused a subtle regression where some keystrokes were not being interpreted
        in the same way by AppKit because WKWebView does not conform to NSTextInputClient
        but WKView does. AppKit won't automatically create a NSTextInputContext for a NSView
        unless the subclass is declared as conforming to NSTextInputClient. Thus, the keystroke
        never goes through NSTextInputContext machinery which converts the keystroke into
        a combining diacritic character.

        This regression is covered by a new API test.

        * UIProcess/API/Cocoa/WKWebView.mm: mark WKWebView as conforming to NSTextInputClient.

2016-06-01  Dan Bernstein  <mitz@apple.com>

        Try to fix ENABLE(IOS_TOUCH_EVENTS) builds.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::touchEvent):

2016-05-31  Darin Adler  <darin@apple.com>

        Audit RenderObject casts and fix problems and style issues found
        https://bugs.webkit.org/show_bug.cgi?id=158221

        Reviewed by Chris Dumez.

        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::WebRenderObject): Tightened up the code that
        builds the tree of objects; fewer local variables.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::invalidateRect): Cast to RenderEmbeddedObject since
        that is the class used for plug-ins.
        (WebKit::PluginView::pluginProcessCrashed): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): Ditto.
        (WebKit::WebPage::plugInIsPrimarySize): Check the renderer for null here.
        Did not change this to RenderEmbeddedObject, though, because I wasn't
        absolute certain this is only called with that type of renderer.

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

2016-06-01  Brady Eidson  <beidson@apple.com>

        Modernize lambda usage for all callers of RunLoop::dispatch() (take 2).
        https://bugs.webkit.org/show_bug.cgi?id=158277

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::deleteDumpFile):

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::removeWorkQueueMessageReceiver):
        (IPC::Connection::invalidate):
        (IPC::Connection::sendMessage):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::postConnectionDidCloseOnConnectionWorkQueue):

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker):

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit::StorageManager::destroySessionStorageNamespace):
        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::cloneSessionStorageNamespace):
        (WebKit::StorageManager::processDidCloseConnection):

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::readDataFromDiskIfNeeded):

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):

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

        [iOS] Regression(r200972): Crash under WebKit::WebPage::selectTextWithGranularityAtPoint()
        https://bugs.webkit.org/show_bug.cgi?id=158284
        <rdar://problem/26573954>

        Reviewed by Ryosuke Niwa.

        range can be null but r200972 started dereferencing it without null
        check. This patch adds a null check for range and uses the pre-r200972
        code path if range is null.

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

2016-06-01  Brady Eidson  <beidson@apple.com>

        Modernize lambda usage for all callers of RunLoop::dispatch().
        https://bugs.webkit.org/show_bug.cgi?id=158265

        Reviewed by Chris Dumez.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::fetchWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
        
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::NetworkProcess::fetchWebsiteData):
        
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::remove):
        (WebKit::NetworkCache::retrieveFromMemory):
        
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::enqueueIncomingMessage):
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::receiveSourceEventHandler):
        
        * Shared/mac/CookieStorageShim.mm:
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::UserContentExtensionStore::lookupContentExtension):
        (API::UserContentExtensionStore::compileContentExtension):
        (API::UserContentExtensionStore::removeContentExtension):
        
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::ProcessLauncher):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::getLocalStorageOriginDetails):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isWebProcessResponsive):
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::isResponsive):
        
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pluginThreadAsyncCall):
        
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::unprotectPluginFromDestruction):
        
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        (WebKit::EventDispatcher::gestureEvent):
        (WebKit::EventDispatcher::touchEvent):
        
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):

2016-05-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, roll out r201481, r201523: 0.3% regression in Octane code-load
        https://bugs.webkit.org/show_bug.cgi?id=158249

        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2016-05-31  Beth Dakin  <bdakin@apple.com>

        Add two optional items to WebViewImplDelegate
        https://bugs.webkit.org/show_bug.cgi?id=158242
        -and corresponding-
        rdar://problem/26473095

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebViewImpl.h:

2016-05-31  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r201405): trailers.apple.com HUD is missing in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=158156
        <rdar://problem/26519589>

        Reviewed by Darin Adler.

        Only increase the frame of the webView (to account for top content inset) in one dimension.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):

2016-05-31  Chris Dumez  <cdumez@apple.com>

        [iOS] Better deal with WebProcess suspension due to screen locking
        https://bugs.webkit.org/show_bug.cgi?id=158229
        <rdar://problem/17665473>
        <rdar://problem/26554699>

        Reviewed by Tim Horton.

        When locking the screen while MobileSafari is front-most, we would try keep
        trying to mark IOSurfaces as volatile until the 30 seconds timeout was
        reached. This patch deals more cleanly with this situation by only trying
        to mark IOSurfaces as volatile once if the suspension is due to screen
        locking. In such case, it is apparently expected that some IOSurfaces cannot
        be marked as volatile so it is enough to try once and let ourselves get
        suspended.

        This patch also reduces the timeout from 30 seconds to ~3 seconds in the
        other suspension cases (e.g. homing out of MobileSafari). If we fail to mark
        them as purgeable for 3 seconds for a reason or another, it is no use in
        retrying, it is simply not going to happen and there is no reason to delay
        process suspension any further.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::callVolatilityCompletionHandlers):
        (WebKit::WebPage::layerVolatilityTimerFired):
        (WebKit::WebPage::markLayersVolatileImmediatelyIfPossible):
        (WebKit::WebPage::markLayersVolatile):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::markLayersVolatile):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationDidEnterBackground):
        (WebKit::WebPage::applicationWillEnterForeground):

2016-05-31  Brady Eidson  <beidson@apple.com>

        Make createCrossThreadTask() functions return on the stack instead of the heap.
        https://bugs.webkit.org/show_bug.cgi?id=158215

        Reviewed by Darin Adler.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::postDatabaseTask):
        (WebKit::DatabaseProcess::performNextDatabaseTask):
        (WebKit::DatabaseProcess::fetchWebsiteData):
        * DatabaseProcess/DatabaseProcess.h:

2016-05-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.13.1 release.

        * gtk/NEWS: Add release notes for 2.13.1.

2016-05-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ clean build after r201504.

        * DatabaseProcess/DatabaseProcess.cpp: Add missing include.

2016-05-30  Brady Eidson  <beidson@apple.com>

        Move CrossThreadCopier/CrossThreadTask to WTF.
        https://bugs.webkit.org/show_bug.cgi?id=158207

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:

        * DatabaseProcess/DatabaseProcess.cpp:
        * DatabaseProcess/DatabaseProcess.h:

        * Shared/WebCrossThreadCopier.cpp: Removed.
        * Shared/WebCrossThreadCopier.h: Removed.

2016-05-28  Chris Dumez  <cdumez@apple.com>

        Templatize NoncopyableFunction class similarly to std::function
        https://bugs.webkit.org/show_bug.cgi?id=158185

        Reviewed by Darin Adler.

        Templatize NoncopyableFunction class similarly to std::function, so
        that it can be used as a std::function replacement in more places.

        Previously, NoncopyableFunction could only support "void()" lambdas.

        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::runTaskInQueue):

2016-05-28  Alexey Proskuryakov  <ap@apple.com>

        Fix the build with newer clang and other custom configuration options
        https://bugs.webkit.org/show_bug.cgi?id=158161

        Reviewed by Dan Bernstein.

        * NetworkProcess/ios/NetworkProcessIOS.mm: -setAllowsSpecificHTTPSCertificate:forHost:
        is now in CFNetworkSPI.h
        * NetworkProcess/mac/NetworkProcessMac.mm: Ditto.
        * Shared/mac/CookieStorageShimLibrary.cpp:
        (WebKit::WebKitCookieStorageShimInitialize): Use more portable std::call_once.

2016-05-28  Chris Dumez  <cdumez@apple.com>

        Modernize lambda captures in the network disk cache implementation
        https://bugs.webkit.org/show_bug.cgi?id=158179

        Reviewed by Darin Adler.

        Modernize lambda captures in the network disk cache implementation.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::traverse):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::inputStreamReadReadyCallback):
        (WebKit::NetworkCache::outputStreamWriteReadyCallback):
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::initialize):
        (WebKit::NetworkCache::Statistics::shrinkIfNeeded):
        (WebKit::NetworkCache::Statistics::queryWasEverRequested):
        * NetworkProcess/cache/NetworkCacheStatistics.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::updateFileModificationTime):
        (WebKit::NetworkCache::Storage::clear):

2016-05-27  Caitlin Potter  <caitp@igalia.com>

        [JSC] implement async functions proposal
        https://bugs.webkit.org/show_bug.cgi?id=156147

        Reviewed by Yusuke Suzuki.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2016-05-27  Chris Dumez  <cdumez@apple.com>

        Improve lambda capture in NetworkCache::Storage::synchronize()
        https://bugs.webkit.org/show_bug.cgi?id=158176

        Reviewed by Brady Eidson.

        Improve lambda capture in NetworkCache::Storage::synchronize(). We can
        now capture the std::unique_ptr<> variables directly thanks to:
        1. C++14's support for initializer's in lambda captures
        2. RunLoop::dispatch() now takes a NoncopyableFunction in instead of
           a std::function, allowing us to capture non-copyable variables.

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

2016-05-27  Jeremy Jones  <jeremyj@apple.com>

        Decrease flicker when changing video presentation mode.
        https://bugs.webkit.org/show_bug.cgi?id=158148
        rdar://problem/24476949

        Reviewed by Tim Horton.

        Prevent flicker by using setVideoFullscreenLayer with a completion handler to delay 
        enter fullscreen and cleanup fullscreen until the video layer has completely been
        installed or removed.

        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::didSetupFullscreen):
        (WebKit::WebVideoFullscreenManager::didExitFullscreen):

2016-05-27  Chris Dumez  <cdumez@apple.com>

        WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables
        https://bugs.webkit.org/show_bug.cgi?id=158111

        Reviewed by Darin Adler.

        WorkQueue::dispatch() / RunLoop::dispatch() should not copy captured lambda variables.
        These are often used cross-thread and copying the captured lambda variables can be
        dangerous (e.g. we do not want to copy a String after calling isolatedCopy() upon
        capture).

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::clearDiskCacheEntries):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::clear):
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::runTaskInQueue):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::processIncomingMessage):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::getLocalStorageOriginDetails):
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
        * UIProcess/Storage/StorageManager.h:

2016-05-27  Alex Christensen  <achristensen@webkit.org>

        Expose content extension failure error codes in SPI
        https://bugs.webkit.org/show_bug.cgi?id=158095
        rdar://problem/26475651

        Reviewed by Anders Carlsson.

        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::UserContentExtensionStore::synchronousRemoveAllContentExtensions):
        (API::UserContentExtensionStore::invalidateContentExtensionVersion):
        Added for testing.
        (API::userContentExtensionStoreErrorCategory):
        * UIProcess/API/APIUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        Added the new enum, _WKUserContentExtensionStoreErrorCode.
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        Sometimes the error code returned by UserContentExtensionStore::compileContentExtension has the error code from compileRuleList.
        When this happens, we want to get the message from the internal compiler error, but we want the NSError's code to always be CompileFailed.
        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
        (-[_WKUserContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):
        (-[_WKUserContentExtensionStore _removeAllContentExtensions]):
        (-[_WKUserContentExtensionStore _invalidateContentExtensionVersionForIdentifier:]):
        * UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h:
        Added new invalidator for testing.

2016-05-27  Zalan Bujtas  <zalan@apple.com>

        Regression(r200972): Webcore::Range::collectSelectionsRects() asserts in startContainer() while selecting text.
        https://bugs.webkit.org/show_bug.cgi?id=158155
        <rdar://problem/26502712>

        Reviewed by Chris Dumez.

        This patch ensures that we still have a valid paragraphRange after returning from enclosingTextUnitOfGranularity().

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

2016-05-26  Brady Eidson  <beidson@apple.com>

        Certain NetworkResourceLoader callbacks can deref a null m_networkLoad.
        https://bugs.webkit.org/show_bug.cgi?id=158134

        Reviewed by Alex Christensen.

        It's legit for m_networkLoad to be null in these callbacks.
        
        We need null checks, just like we have in many other callbacks in this class.
        
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::continueCanAuthenticateAgainstProtectionSpace):

2016-05-26  Darin Adler  <darin@apple.com>

        Media queries and platform screen modernization and streamlining
        https://bugs.webkit.org/show_bug.cgi?id=158067

        Reviewed by Alex Christensen.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::screenForWindow): Deleted.
        (WebKit::flipScreenPoint): Deleted.
        (WebKit::globalPoint): Deleted.
        (WebKit::globalPointForEvent): Use globalPoint function from WebCore so we don't need
        copies of everything in here.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::windowDidChangeScreen): Removed unneeded type cast.
        (WebKit::WebViewImpl::draggedImage): Added type cast since globalPoint now returns an
        NSPoint rather than an IntPoint.

        * UIProcess/WebPageProxy.h: Use pragma once. Add a WebCore prefix to a use of
        PlatformDisplayID, since that is now inside the WebCore namespace.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto.
        * WebProcess/WebPage/Cocoa/RemoteLayerTreeDisplayRefreshMonitor.h: Ditto.
        * WebProcess/WebPage/DrawingArea.h: Ditto.
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h: Ditto.

2016-05-26  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr in Modules/battery
        https://bugs.webkit.org/show_bug.cgi?id=157062

        Reviewed by Darin Adler.

        Use RefPtr<>& to reduce uses of PassRefPtr in WebKit.

        * WebProcess/Battery/WebBatteryManager.cpp:
        (WebKit::WebBatteryManager::didChangeBatteryStatus):
        (WebKit::WebBatteryManager::updateBatteryStatus):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):

2016-05-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Build fix

        Rubber stamped by Lucas Forschler.

        * Configurations/DebugRelease.xcconfig:

2016-05-25  Jer Noble  <jer.noble@apple.com>

        Flashiness and jumpiness when entering fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=158087

        Reviewed by Beth Dakin.

        Multiple independant sources of jumpiness and flashiness are addressed here:

        - Setting the top content inset on the WKView cause a vertical jump during fullscreen
        transition. Instead of setting the content inset to 0, take the existing inset into account
        when placing the WKView in the NSWindow.

        - The enter fullscreen transition causes a white flash due to the NSWindow needing
        display before ordering onscreen. Ensure the window has a backing by calling -displayIfNeeded
        before entering fullscreen mode.

        - The exit fullscreen transition causes a white background color flash for an unknown
        reason, but is solved by not making the window's content view layer-backed. Rather than
        directly animating the contentView's background color, create a specific background view
        and animate it's background color instead.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:page:]):
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::saveScrollPosition): Deleted.
        (WebKit::WebFullScreenManager::restoreScrollPosition): Deleted.

2016-05-25  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * PlatformMac.cmake:

2016-05-25  Chris Dumez  <cdumez@apple.com>

        Simplify a few lambda captures in the network cache code
        https://bugs.webkit.org/show_bug.cgi?id=158076

        Reviewed by Antti Koivisto.

        Simplify a few lambda captures in the network cache code by WTFMoving
        upon capture.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieve):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveSubresourcesEntry):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::bootstrapFromNetworkCache):
        (WebKit::NetworkCache::Statistics::recordNotUsingCacheForRequest):
        (WebKit::NetworkCache::Statistics::recordRetrievalFailure):
        (WebKit::NetworkCache::Statistics::writeTimerFired):
        (WebKit::NetworkCache::Statistics::addHashesToDatabase):
        (WebKit::NetworkCache::Statistics::addStoreDecisionsToDatabase):
        * NetworkProcess/cache/NetworkCacheStatistics.h:

2016-05-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Unix] Potential buffer overrun of m_fileDescriptors in readBytesFromSocket of ConnectionUnix.cpp
        https://bugs.webkit.org/show_bug.cgi?id=158058

        Reviewed by Carlos Garcia Campos.

        Memcpy does not check the boundary of m_fileDescriptors in
        readBytesFromSocket of ConnectionUnix.cpp.  This is not a problem
        in normal cases, but in the case when Web process is hijacked and
        malicious IPC packets were sent.  WTF::Vector already has two
        members m_capacity and m_size.  There is no need to have a
        separate member m_fileDescriptorsSize to remember the number of
        remaining data.

        * Platform/IPC/Connection.h: Remove members m_readBufferSize and
        m_fileDescriptorsSize.
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::platformInitialize): Removed initialization of
        m_readBufferSize and m_fileDescriptorsSize.  Reserve initial
        capacity for m_readBuffer and m_fileDescriptors.
        (IPC::Connection::processMessage): Replace m_readBufferSize and
        m_fileDescriptorsSize with m_readBuffer.size() and
        m_fileDescriptors.size().  Use Vector::shrink() to reset the
        number of remaining data in the buffers.
        (IPC::readBytesFromSocket) : Change argument types to WTF::Vector
        instead of pointers and sizes.
        (IPC::Connection::readyReadHandler): Call new readBytesFromSocket

2016-05-25  Chris Dumez  <cdumez@apple.com>

        Update constructRevalidationRequest() to stop returning a unique_ptr<ResourceRequest>
        https://bugs.webkit.org/show_bug.cgi?id=158046

        Reviewed by Darin Adler.

        Update constructRevalidationRequest() to stop returning a unique_ptr<ResourceRequest>
        and to return a ResourceRequest instead. There is no reason for it to return a
        pointer.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::PreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::revalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::addPreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:

2016-05-25  Antoine Quint  <graouts@apple.com>

        Elements with backdrop-filter cannot be clipped with clip-path or mask
        https://bugs.webkit.org/show_bug.cgi?id=142662
        <rdar://problem/20150192>

        Reviewed by Dean Jackson.

        Ensure layer clones are set up with the same shape path as their original layer.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::updateClonedLayerProperties):

2016-05-24  Chris Dumez  <cdumez@apple.com>

        Simplify a couple of lambda captures in the network cache code
        https://bugs.webkit.org/show_bug.cgi?id=158053

        Reviewed by Brady Eidson.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        Just capture subResourceInfo instead of allocating a new copy
        on the heap. There is no reason we cannot simply capture
        subResourceInfo here.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::clear):
        Use new C++14 capture with initialization to make the code a
        bit nicer.

2016-05-24  Conrad Shultz  <conrad_shultz@apple.com>

        _WKThumbnailView should expose its snapshot size
        https://bugs.webkit.org/show_bug.cgi?id=158049

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView _didTakeSnapshot:]):
        Update the new snapshotSize property in a KVO-compliant manner.

2016-05-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r201349.

        This change caused compositing tests to assert on iOS
        simulator

        Reverted changeset:

        "Elements with backdrop-filter cannot be clipped with clip-
        path or mask"
        https://bugs.webkit.org/show_bug.cgi?id=142662
        http://trac.webkit.org/changeset/201349

2016-05-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r201341.

        This change may have caused LayoutTests to crash on Mac and
        iOS

        Reverted changeset:

        "Use lambda capture with initializer instead of StringCapture"
        https://bugs.webkit.org/show_bug.cgi?id=158010
        http://trac.webkit.org/changeset/201341

2016-05-24  Alex Christensen  <achristensen@webkit.org>

        Fix null pointer dereferencing in WebViewImpl::inputContext
        https://bugs.webkit.org/show_bug.cgi?id=158026
        rdar://problem/25994093

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView inputContext]):
        this was null sometimes in WebViewImpl::inputContext.

2016-05-24  Antoine Quint  <graouts@apple.com>

        Elements with backdrop-filter cannot be clipped with clip-path or mask
        https://bugs.webkit.org/show_bug.cgi?id=142662
        <rdar://problem/20150192>

        Reviewed by Dean Jackson.

        Ensure layer clones are set up with the same shape path as their original layer.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::updateClonedLayerProperties):

2016-05-24  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Allow clients to override the type of an input field
        https://bugs.webkit.org/show_bug.cgi?id=157995

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession textContentType]): Getter for textContentType.
        (-[WKFormInputSession setTextContentType:]): Set the textContentType and reload
        input views.
        (contentTypeFromFieldName): Factor out switch statement to get text content type
        from autofill field name into its own function.
        (-[WKContentView textInputTraits]): If the client has set a text content type,
        set the traits' content type to that. Otherwise, set the text content type if
        there is one based on the assisted node information's autofill field name. If
        neither the form input session nor the assisted node info yields a text content
        type, set the text content type to nil, its default value.

2016-05-24  Chris Dumez  <cdumez@apple.com>

        Use lambda capture with initializer instead of StringCapture
        https://bugs.webkit.org/show_bug.cgi?id=158010

        Reviewed by Antti Koivisto.

        Use lambda capture with initializer instead of StringCapture now that 
        we support C++14.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::deleteDumpFile):
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::initialize):
        (WebKit::NetworkCache::Statistics::shrinkIfNeeded):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::updateFileModificationTime):
        (WebKit::NetworkCache::Storage::clear):
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::UserContentExtensionStore::lookupContentExtension):
        (API::UserContentExtensionStore::compileContentExtension):
        (API::UserContentExtensionStore::removeContentExtension):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):

2016-05-24  Chris Dumez  <cdumez@apple.com>

        Use auto for some of our lambda function parameters
        https://bugs.webkit.org/show_bug.cgi?id=158001

        Reviewed by Darin Adler.

        Use auto for some of our lambda function parameters now that we build with c++14.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didGetRecord):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::clearDiskCacheEntries):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveSubresourcesEntry):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::removeFromPendingWriteOperations):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (-[_WKRemoteObjectInterface debugDescription]):
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetCacheOrigins):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _fetchDataRecordsOfTypes:withOptions:completionHandler:]):
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::removeAllUserScripts):
        (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
        (WebKit::WebUserContentControllerProxy::removeAllUserMessageHandlers):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::removeAnimationForKey):

2016-05-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        Assertion failure for Reflect.get with Proxy and primitive value as explicit receiver
        https://bugs.webkit.org/show_bug.cgi?id=157080

        Reviewed by Saam Barati.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2016-05-23  Chris Dumez  <cdumez@apple.com>

        Generate bindings code for EventTarget.addEventListener() / removeEventListener()
        https://bugs.webkit.org/show_bug.cgi?id=157882

        Reviewed by Darin Adler.

        Generate bindings code for EventTarget.addEventListener() / removeEventListener()
        instead of hardcoding them in the bindings generator.

        * WebProcess/Plugins/PDF/PDFPluginAnnotation.h:
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        (WebKit::PDFPluginAnnotation::attach):
        (WebKit::PDFPluginAnnotation::~PDFPluginAnnotation):
        * WebProcess/Plugins/PDF/PDFPluginPasswordField.mm:
        (WebKit::PDFPluginPasswordField::~PDFPluginPasswordField):
        (WebKit::PDFPluginPasswordField::createAnnotationElement):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::~PDFPluginTextAnnotation):
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement):

2016-05-23  Beth Dakin  <bdakin@apple.com>

        Need SPI for clients to require a user action to get an editing controls 
        manager
        https://bugs.webkit.org/show_bug.cgi?id=157992
        -and corresponding-
        rdar://problem/26379927

        Reviewed by Tim Horton.

        New SPI _setRequiresUserActionForEditingControlsManager. The SPI defaults to 
        False, which means that by default there is no user action requirement to 
        have an editing controls manager. The SPI is on WKViewPrivate and 
        WKWebViewConfigurationPrivate, and it’s implemented in WebViewImpl.
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _requiresUserActionForEditingControlsManager]):
        (-[WKWebViewConfiguration _setRequiresUserActionForEditingControlsManager:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _requiresUserActionForEditingControlsManager]):
        (-[WKView _setRequiresUserActionForEditingControlsManager:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::setRequiresUserActionForEditingControlsManager):
        (WebKit::WebViewImpl::requiresUserActionForEditingControlsManager):

        New message allows the WebProcess to tell the UI process whether the current 
        web page has had any selection changes based on user interaction.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setHasHadSelectionChangesFromUserInteraction):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::hasHadSelectionChangesFromUserInteraction):
        * UIProcess/WebPageProxy.messages.in:

        m_userIsInteracting m_hasFocusedDueToUserInteraction used to be iOS only, but 
        now we want to track them for Mac as well.
        * WebProcess/WebPage/WebPage.cpp:

        Handling mouse events and key events will toggle m_userIsInteracting.
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::keyEvent):

        m_userIsInteracting is no longer iOS-only.
        (WebKit::WebPage::setInitialFocus):

        Send a message to the UI process on page transition to re-set 
        hasHadSelectionChangesFromUserInteraction to false.
        (WebKit::WebPage::didStartPageTransition):

        Send a message to the UI process if this is the first selection change to 
        happen as a result of a user action.
        (WebKit::WebPage::didChangeSelection):
        * WebProcess/WebPage/WebPage.h:

2016-05-23  Alex Christensen  <achristensen@webkit.org>

        Add logging for NSURLSession calls
        https://bugs.webkit.org/show_bug.cgi?id=157996

        Reviewed by Brady Eidson.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toNSURLSessionResponseDisposition):
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:willCacheResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        * Platform/Logging.h:

2016-05-23  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: when bringing focus to a text field we may zoom the page even if author wanted max scale = 1
        https://bugs.webkit.org/show_bug.cgi?id=157771

        Reviewed by Tim Horton.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2016-05-23  Miguel Gomez  <magomez@igalia.com>

        [ThreadedCompositor] Ensure that the BitmapTexture used by CoordinatedBackingStoreTile matches the opacity of the painted surface
        https://bugs.webkit.org/show_bug.cgi?id=157942

        Reviewed by Žan Doberšek.

        * Shared/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStoreTile::swapBuffers):
        Reset the BitmapTexture if it doesn't match the opacity required by the surface
        that's being painted.

2016-05-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Disk cache: enable speculative revalidation
        https://bugs.webkit.org/show_bug.cgi?id=157125

        Reviewed by Sergio Villar Senin.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * config.h:

2016-05-22  Brady Eidson  <beidson@apple.com>

        Move to C++14.
        https://bugs.webkit.org/show_bug.cgi?id=157948

        Reviewed by Michael Catanzaro.

        * Configurations/Base.xcconfig:

        Replace time literal suffixes that have underscores to the forms without
        (e.g. 0_ms becomes 0ms):
        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::responseHasExpired):
        (WebKit::NetworkCache::responseNeedsRevalidation):
        (WebKit::NetworkCache::makeStoreDecision):

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::responseNeedsRevalidation):

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::computeRecordWorth):

        * Shared/mac/RemoteLayerBackingStoreCollection.mm:

        * UIProcess/ViewGestureController.cpp:

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime):

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlushImmediately):
        (WebKit::RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlush):

2016-05-21  Andy Estes  <aestes@apple.com>

        REGRESSION (r188642): All pages are blank when printing a webpage in iOS Safari
        https://bugs.webkit.org/show_bug.cgi?id=157924
        rdar://problem/22524550

        Reviewed by Sam Weinig.

        When UIPrintInteractionController asks WKWebView to print a webpage, it does so in several phases. First we're
        asked to compute the page count, followed later by a series of messages asking us to draw each page into a
        provided CGContext.

        When asked for the page count, we send a message to the Web process instructing it to compute and
        return the page count synchronously and then immediately start drawing the page for printing. If the drawing has
        finished by the time we're asked to print the first page, then we can do so without waiting. But if it hasn't
        then we block by calling Connection::waitForMessage(), passing std::chromo::milliseconds::max() as the relative
        timeout.
        
        Prior to r188642, Connection::waitForMessage() called std::condition_variable::wait_for(), which takes a
        relative timeout value. r188642 replaced this with WTF::Condition::waitUntil(), which takes an absolute timeout
        instead. To convert from relative to absolute, this line was added to Connection::waitForMessage():

            Condition::Clock::time_point absoluteTimeout = Condition::Clock::now() + timeout;

        std::chrono will convert both operands to a common duration type before performing the addition. When timeout
        equals something very large, like milliseconds::max(), this conversion results in signed integer overflow,
        giving absoluteTimeout a value less than Clock::now() and making waitForMessage time out immediately.
        
        To fix this, compute how many milliseconds remain on our clock, and add the smaller of that and the timeout
        value to Clock::now() to arrive at an absolute timeout.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForMessage):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _printedDocument]): Removed an unnecessary nanoseconds-to-milliseconds conversion.

2016-05-20  Enrica Casucci  <enrica@apple.com>

        Drag cannot start if no drag data or custom data is available in the Pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=157911
        rdar://problem/24577706

        Reviewed by Tim Horton.

        We need to make sure there is always one item in common between source and target
        of the drag and drop operation.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::dragImageForView):

2016-05-20  John Wilander  <wilander@apple.com>

        Remove unnecessary PageOverlay client function pageOverlayDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=157388
        <rdar://problem/25471523>

        Reviewed by Tim Horton.

        Remove dead PageOverlay code. Almost all of these overrides were empty and
        never called. In the case of WebPageOverlay it was never called but had a
        function body, causing confusion. There was a fear of dangling pointers in
        WebPageOverlay's static hash map between PageOverlays and WebPageOverlays.
        Only WebPageOverlay's constructor creates its PageOverlay object and adds it
        to the hash map. Its client object is kept in a unique pointer member which
        is automatically deleted when the WebPageOverlay object itself is deleted.
        This explains why PageOverlayClientImpl::pageOverlayDestroyed in
        WKBundlePageOverlay can safely be removed. Finally, WebPageOverlay's
        destructor clears the hash map entry for its PageOverlay object. Thus, there
        is no need to call WebPageOverlay::pageOverlayDestroyed nor a need for
        WebPageOverlay's destructor to call pageOverlayDestroyed on its client.

        No new tests. I tried to come up with a WebKit API test for this but I
        wasn't able to test presence/absence of WebPageOverlay's map entries since
        the map is not exposed.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WebKit::PageOverlayClientImpl::pageOverlayDestroyed): Deleted.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::HUD::pageOverlayDestroyed): Deleted.
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        (WebKit::WebInspectorClient::pageOverlayDestroyed): Deleted.
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/FindController.h:
        (WebKit::FindController::pageOverlayDestroyed): Deleted.
        * WebProcess/WebPage/WebPageOverlay.cpp:
        * WebProcess/WebPage/WebPageOverlay.h:
        (WebKit::WebPageOverlay::pageOverlayDestroyed): Deleted.
        * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h:
        (WebKit::FindIndicatorOverlayClientIOS::pageOverlayDestroyed): Deleted.

2016-05-19  Chris Dumez  <cdumez@apple.com>

        Improve compile-time assertions in is<>() / downcast<>()
        https://bugs.webkit.org/show_bug.cgi?id=157817

        Reviewed by Darin Adler.

        Add missing includes.

        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebPage.cpp:

2016-05-19  Tim Horton  <timothy_horton@apple.com>

        Mail crashes under TiledCoreAnimationDrawingAreaProxy::createFenceForGeometryUpdate() when the Web process crashes
        https://bugs.webkit.org/show_bug.cgi?id=157927
        <rdar://problem/24793374>

        Reviewed by Dean Jackson.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence):
        With just the right combination of layout mechanisms and Web Content process
        crash timing, it is possible to get a frame change underneath WebPageProxy::processDidCrash,
        before the DrawingArea has been nulled out but after the Connection has.
        This can lead to a null dereference. I had a lot of trouble writing a API
        test for this, though I'm certain it's possible.

2016-05-16  Enrica Casucci  <enrica@apple.com>

        No candidate punctuation when typing punctuation in WK2 text field.
        https://bugs.webkit.org/show_bug.cgi?id=157773
        rdar://problem/23084603

        Reviewed by Sam Weinig.

        We need to adopt the new addInputString:withFlags:withInputManagerHint function
        for this to work propertly.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):

2016-05-19  Brady Eidson  <beidson@apple.com>

        Finishing off: Modern IDB: Website data store management.
        https://bugs.webkit.org/show_bug.cgi?id=157626

        Reviewed by Alex Christensen.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
        (WebKit::removeAllDatabasesForOriginPath): Deleted.
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesForOrigins): Deleted.
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesModifiedSince): Deleted.
        * DatabaseProcess/DatabaseProcess.h:

2016-05-19  Brent Fulgham  <bfulgham@apple.com>

        [OS X][WK2] Expand sandbox for new mach endpoints
        https://bugs.webkit.org/show_bug.cgi?id=157919
        <rdar://problem/25238336>

        Reviewed by Alexey Proskuryakov.

        Grant the WebContent and Networking processes the mach lookup capability for
        various Security-related mach endpoints..

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

2016-05-19  Brian Burg  <bburg@apple.com>

        Web Inspector: CRASH when closing a page while element selection mode is enabled via Develop menu
        https://bugs.webkit.org/show_bug.cgi?id=157925
        <rdar://problem/26259618>

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::elementSelectionChanged):
        Null-check m_page->inspector() since it will return nullptr if the page
        is closed but not yet destructed. This is triggered by teardown code
        in InspectorDOMAgent::willDestroyFrontendAndBackend.

2016-05-19  Enrica Casucci  <enrica@apple.com>

        Drag cannot start if no drag data is available in the Pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=157911
        rdar://problem/24577706

        Reviewed by Tim Horton.

        Setting dummy data to allow drag to start.

        * Shared/mac/PasteboardTypes.h:
        * Shared/mac/PasteboardTypes.mm:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::registerDraggedTypes):
        (WebKit::WebViewImpl::dragImageForView):

2016-05-19  Jer Noble  <jer.noble@apple.com>

        [IOS] Add setting to allow playback to continue inline after exiting fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=157912

        Reviewed by Eric Carlson.

        Add a preference and configuration property to control whether media should be allowed to continue
        playing inline when exiting fullscreen.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _allowsInlineMediaPlaybackAfterFullscreen]):
        (-[WKWebViewConfiguration _setAllowsInlineMediaPlaybackAfterFullscreen:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (disableScreenUpdates):
        (enableScreenUpdates):
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController exitFullScreen]):
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-05-19  Brian Burg  <bburg@apple.com>

        Web Inspector: timelines should not update via requestAnimationFrame unless Web Inspector is visible
        https://bugs.webkit.org/show_bug.cgi?id=157897
        <rdar://problem/26330802>

        Reviewed by Timothy Hatcher.

        The UIProcess needs to notify the Inspector frontend when it is truly visible.
        The frontend can't use document.visibilityState because it doesn't seem to work
        if the inspector frontend's WKWebView is created but not attached to a window.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::open):
        (WebKit::WebInspectorProxy::didClose):
        Send visibility updates to the inspector process when the inspector becomes
        "visible" or "not visible". It becomes visible if it is attached to the
        inspected page's window, or gets its own native window.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::frontendLoaded):
        (WebKit::WebInspectorUI::setDockingUnavailable):
        (WebKit::WebInspectorUI::setIsVisible):
        Call InspectorFrontendAPI.updateVisibilityState to let the frontend know.

        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.messages.in:
        Add new message.

2016-05-19  Brian Burg  <bburg@apple.com>

        Web Inspector: use a consistent prefix for injected scripts
        https://bugs.webkit.org/show_bug.cgi?id=157715
        <rdar://problem/26287188>

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebProcess/Automation/WebAutomationSessionProxy.js:

2016-05-18  Anders Carlsson  <andersca@apple.com>

        Add WKPreferencesRef getter/setter pair to set RTL mode
        https://bugs.webkit.org/show_bug.cgi?id=157873
        rdar://problem/26329970

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetUserInterfaceDirectionPolicy):
        (WKPreferencesGetUserInterfaceDirectionPolicy):
        * UIProcess/API/C/WKPreferencesRef.h:

2016-05-18  Alex Christensen  <achristensen@webkit.org>

        Clean up CSS code
        https://bugs.webkit.org/show_bug.cgi?id=157808

        Reviewed by Chris Dumez.

        * UIProcess/Cocoa/WebViewImpl.mm:

2016-05-18  Jer Noble  <jer.noble@apple.com>

        Disable default user gesture requirement for audio playback on Mac
        https://bugs.webkit.org/show_bug.cgi?id=157820

        Reviewed by Sam Weinig.

        Disable the WebPreferences and matching WKWebViewConfiguration.mediaTypesRequiringUserActionForPlayback
        settings on Mac (and other non-iOS ports).

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):

2016-05-18  Alex Christensen  <achristensen@webkit.org>

        Build fix when not using CredentialStorage with NetworkSession.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::clearCredentials):

2016-05-18  Brady Eidson  <beidson@apple.com>

        Fix null-deref crash sporadically seen after http://trac.webkit.org/changeset/201098

        No review.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::deleteWebsiteData): Don't access m_idbServer directly, as calling
          the idbServer() accessor is how you actually get your IDBServer created for you.

2016-05-18  Brian Burg  <bburg@apple.com>

        Web Inspector: InspectorFrontendAPI.setTimelineProfilingEnabled should not implicitly show Timelines tab
        https://bugs.webkit.org/show_bug.cgi?id=157846

        Reviewed by Timothy Hatcher.

        Add a separate ShowTimelines message to WebInspector and WebInspectorUI. Have the
        start/stop profiling methods in public APIs explicitly call showTimelines() rather than
        relying on InspectorFrontendAPI to do it.

        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorTogglePageProfiling):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::showTimelines):
        * UIProcess/WebInspectorProxy.h:
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        (WKBundleInspectorSetPageProfilingEnabled):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::showTimelines):
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::showTimelines):
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.messages.in:

2016-05-18  Brady Eidson  <beidson@apple.com>

        Modern IDB: Add support for server side closing of open database connections.
        https://bugs.webkit.org/show_bug.cgi?id=157843

        Reviewed by Alex Christensen.

        - Implement the required IDB delegate code.
        - Make DatabaseProcess::deleteWebsiteData call the right method in IDB server.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::deleteWebsiteData):

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didGetRecord):
        (WebKit::WebIDBConnectionToClient::didCloseFromServer):
        (WebKit::WebIDBConnectionToClient::confirmDidCloseFromServer):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::confirmDidCloseFromServer):
        (WebKit::WebIDBConnectionToServer::didStartTransaction):
        (WebKit::WebIDBConnectionToServer::didCloseFromServer):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

2016-05-18  Brady Eidson  <beidson@apple.com>

        Modern IDB: Make TestRunner.clearAllDatabases also delete IndexedDB databases (once doing so is supported).
        https://bugs.webkit.org/show_bug.cgi?id=157823

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreRemoveAllIndexedDatabases):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:

2016-05-18  Brian Burg  <bburg@apple.com>

        REGRESSION(r200959): "Start Timeline Recording" menu item doesn't start recording
        https://bugs.webkit.org/show_bug.cgi?id=157821
        <rdar://problem/26335429>

        Reviewed by Timothy Hatcher.

        In r200959, WebInspectorProxy started sending start/stop profiling
        messages directly to the frontend process to avoid the inspected page
        process from implicitly showing the frontend. To compensate, the WebKit
        API layer was changed to call show() in togglePageProfiling().

        Unfortunately, this fix was not quite right, because the ordering of
        the Show and StartPageProfiling messages is undefined. The latter has to bounce
        from UI to inspected to inspector processes, so the frontend may try
        to start profiling before the frontend is shown, causing it to be ignored.

        This patch takes a different approach: just remove all implicit show()
        calls in the inspected page processes, and bounce both the Show and
        StartPageProfiling messages through the inspected page process to ensure
        they are handled in order by the frontend process.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::togglePageProfiling):
        Revert to sending to the inspected page process.

        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        (WKBundleInspectorSetPageProfilingEnabled):
        Add a call to show() now that the implementation doesn't do it implicitly.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::startPageProfiling):
        (WebKit::WebInspector::stopPageProfiling):
        Don't implicitly show the inspector. These methods are only called
        through the WKBundleInspector API and via IPC from WebInspectorProxy.

2016-05-17  Beth Dakin  <bdakin@apple.com>

        Make handleAcceptedCandidate a public function
        https://bugs.webkit.org/show_bug.cgi?id=157763
        -and corresponding-
        rdar://problem/26206397

        Reviewed by Tim Horton.

        This patch makes handleAcceptedCandidate a public member of WebViewImpl 
        instead of a private member. 
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::createWeakPtr):

2016-05-17  Dean Jackson  <dino@apple.com>

        Remove ES6_GENERATORS flag
        https://bugs.webkit.org/show_bug.cgi?id=157815
        <rdar://problem/26332894>

        Reviewed by Geoffrey Garen.

        This flag isn't needed. Generators are enabled everywhere and
        part of a stable specification.

        * Configurations/FeatureDefines.xcconfig:

2016-05-17  Dean Jackson  <dino@apple.com>

        Temporarily enable Experimental Features
        https://bugs.webkit.org/show_bug.cgi?id=157810
        <rdar://problem/26330804>

        Reviewed by Anders Carlsson.

        We currently don't have good UI for enabling these features,
        which would mean Safari Technology Preview users would
        never be able to turn them on… unless we enable them by
        default temporarily.

        * Shared/WebPreferencesDefinitions.h:

2016-05-17  Filip Pizlo  <fpizlo@apple.com>

        WTF should know about Language
        https://bugs.webkit.org/show_bug.cgi?id=157756

        Reviewed by Geoffrey Garen and Alexey Proskuryakov.

        Rewires a bunch of includes/imports.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:

2016-05-17  Jer Noble  <jer.noble@apple.com>

        Unreviewed GTK+ and EFL bulid fix; make the audio playback user gesture requirement
        Cocoa-only.

        * Shared/WebPreferencesDefinitions.h:

2016-05-16  Anders Carlsson  <andersca@apple.com>

        Add a WKA extension point for WKPreferences SPI
        https://bugs.webkit.org/show_bug.cgi?id=157762
        rdar://problem/24529203

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKPreferences.mm:

2016-05-16  David Kilzer  <ddkilzer@apple.com>

        Action sheets don’t work in presented view controllers
        <https://webkit.org/b/157754>
        <rdar://problem/26304845>

        Reviewed by Anders Carlsson.

        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet presentSheetFromRect:]):
        (-[WKActionSheet willRotate]):
        - Call SPI to get the presenting view controller, since it may
          not always be the root view controller.

2016-05-13  Enrica Casucci  <enrica@apple.com>

        Text selection is basically impossible on plain text pages.
        https://bugs.webkit.org/show_bug.cgi?id=157681
        rdar://problem/26065660

        Reviewed by Darin Adler.

        When dealing with a plain text file, the rules for deciding whether
        a position is selectable should be different and we should never
        switch to block selection.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::shouldSwitchToBlockModeForHandle):
        (WebKit::rectIsTooBigForSelection): Added helper function.
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::WebPage::getPositionInformation):

2016-05-16  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Remove dispatch_after in -[WKFormInputSession setSuggestions:]
        https://bugs.webkit.org/show_bug.cgi?id=157745

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession setSuggestions:]): Remove the dispatch_after since
        there is no longer a chance of keyboard suggestions replacing the
        suggestions set here.

2016-05-16  Brian Burg  <bburg@apple.com>

        Crash simulating keystrokes at WebKit::WebAutomationSession::platformSimulateKeyStroke
        https://bugs.webkit.org/show_bug.cgi?id=157737
        <rdar://problem/26292946>

        Reviewed by Timothy Hatcher.

        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformSimulateKeyStroke):
        AppKit expects characters passed to [NSEvent keyEventWithType:...]
        to be non-nil even if there are no characters. Initialize characters
        to the empty string @"". It will be overwritten if the keystroke should
        produce any unicode characters.

2016-05-16  Brian Burg  <bburg@apple.com>

        Web Automation: Automation.inspectBrowsingContext should automatically start page profiling
        https://bugs.webkit.org/show_bug.cgi?id=157739

        Reviewed by Timothy Hatcher.

        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorTogglePageProfiling):
        Implicitly show the Web Inspector in the C API command to preserve existing behavior.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::inspectorFrontendLoaded):
        If the frontend loaded, it was either because the user opened Web Inspector (and
        turning on page profiling is harmless), or it was loaded but not shown by the
        inspectBrowsingContext command. For the latter, we want to start page profiling
        before processing any additional commands so subsequent execution is captured.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::togglePageProfiling):
        Send the start/stop profiling messages directly to the WebInspectorUI process instead of
        bouncing through the inspected page's process, which does an implicit show() we don't want.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::inspector): Make it const.
        * UIProcess/WebPageProxy.h:

2016-05-16  Conrad Shultz  <conrad_shultz@apple.com>

        Fix some deprecation warnings.

        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _drawPDFDocument:page:atPoint:]):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::setActiveAnnotation):
        (WebKit::PDFPlugin::lookupTextAtLocation):
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.h:
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.h:
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::drawPDFPage):

2016-04-06  Jer Noble  <jer.noble@apple.com>

        [WK2] Add API to WKWebViewConfiguration to control autoplay policy.
        https://bugs.webkit.org/show_bug.cgi?id=156312

        Reviewed by Dan Bernstein.

        Add a new API to WKWebViewConfiguration to allow fine-grained control over when media is allowed
        to play without a user gesture, and simultaneously deprecate the existing, all-or-nothing API,
        and deprecated the equivalent SPIs.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _requiresUserActionForVideoPlayback]):
        (-[WKWebViewConfiguration _setRequiresUserActionForVideoPlayback:]):
        (-[WKWebViewConfiguration _requiresUserActionForAudioPlayback]):
        (-[WKWebViewConfiguration _setRequiresUserActionForAudioPlayback:]):
        (-[WKWebViewConfiguration requiresUserActionForMediaPlayback]):
        (-[WKWebViewConfiguration setRequiresUserActionForMediaPlayback:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2016-05-16  Brian Burg  <bburg@apple.com>

        Web Automation: WebAutomationSessionProxy.js gets injected more than once sometimes
        https://bugs.webkit.org/show_bug.cgi?id=157716
        <rdar://problem/26287306>

        Reviewed by Timothy Hatcher.

        Whenever a script was injected into a non-normal world by a WebKit client,
        the WebProcess's WebAutomationSessionProxy singleton would get a
        notification that the window was cleared from the relevant frame.
        This notification happens when creating the world's window shell for
        the first time.

        This code should ignore such notifications that originate from non-main world
        contexts. Web Inspector's instrumentation already ignored this, but
        the automation session notification comes in via a different WebKit2 layer.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):

2016-05-13  Dean Jackson  <dino@apple.com>

        Fix iOS Build.

        * Shared/AssistedNodeInformation.h:
        (WebKit::OptionItem::OptionItem):

2016-05-13  Sam Weinig  <sam@webkit.org>

        REGRESSION (r200463): Autofill Credit Card expected but got Autofill Contact
        <rdar://problem/26251538>
        https://bugs.webkit.org/show_bug.cgi?id=157701

        Reviewed by Dan Bernstein.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame _certificateChain]):
        We need to do a retain-autorelease here now because the CertificateInfo's that contain the
        cached certificate chain, are being destroyed, and therefore destroying the chain, before this
        function returns. This used to work when the chain wasn't just a cache, because there was still
        a strong reference to it being held by the ResourceResponse's CertificateInfo copy, but now
        there is none.

2016-05-13  Dean Jackson  <dino@apple.com>

        [iOS] <select> elements popover should render right-aligned when in RTL mode
        https://bugs.webkit.org/show_bug.cgi?id=157699
        <rdar://problem/26282319>

        Reviewed by Simon Fraser.

        Some follow-up changes as suggested by Darin in review.

        * Shared/AssistedNodeInformation.h: Use initializers so we can
        remove the constructors.
        (WebKit::OptionItem::OptionItem): Deleted.
        (WebKit::AssistedNodeInformation::AssistedNodeInformation): Deleted.
        * UIProcess/ios/forms/WKFormSelectPopover.mm: Add a comment to explain
        why we are explicitly setting the language.
        (-[WKSelectTableViewController initWithView:hasGroups:]):

2016-05-13  Chris Dumez  <cdumez@apple.com>

        [NetworkCache] Avoid having to re-parse URLs after deserializing them
        https://bugs.webkit.org/show_bug.cgi?id=157660

        Reviewed by Darin Adler.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::encode): Deleted.
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode): Deleted.
        * NetworkProcess/cache/NetworkCacheCoders.h:
        Drop template specializations used by our network cache for encoding
        / decoding URLs as Strings. This causes us to now rely on
        URL::encode() / URL::decode() instead.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<BlobPart>::decode):
        Fix bug in BlobPart encoding / decoding. It was encoding the url member
        as a URL but decoding it as a String.

2016-05-13  Dan Bernstein  <mitz@apple.com>

        Try to fix some non-iOS builds.

        * mac/postprocess-framework-headers.sh:

2016-05-13  Ryan Haddad  <ryanhaddad@apple.com>

        Attempt to fix the iOS build after r200874

        Unreviewed build fix.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

2016-05-13  Sam Weinig  <sam@webkit.org>

        Rename WKDataDetectorTypeSpotlightSuggestion to WKDataDetectorTypeLookupSuggestion
        <rdar://problem/26269611>

        Reviewed by Dan Bernstein and Enrica Casucci. 

        * Shared/API/Cocoa/WKFoundation.h:
        * Shared/API/c/WKDeclarationSpecifiers.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (fromWKDataDetectorTypes):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * mac/postprocess-framework-headers.sh:

2016-05-13  Beth Dakin  <bdakin@apple.com>

        Add dyldSPI.h for linked on or after checks, and add one for link preview
        https://bugs.webkit.org/show_bug.cgi?id=157401

        Reviewed by Darin Adler.

        Set _allowsLinkPreview to YES for programs linked on or after 
        firstSDKVersionWithLinkPreviewEnabledByDefault.
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):

2016-05-13  Jer Noble  <jer.noble@apple.com>

        Fullscreen view attempts to resize when in 2-up mode
        https://bugs.webkit.org/show_bug.cgi?id=157558

        Reviewed by Darin Adler.

        No need to react to NSApplicationDidChangeScreenParametersNotification to resize the
        fullscreen window when the screen parameters change; the NSWindow fullscreen machinery
        will do that on our behalf.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController windowDidLoad]): Deleted.
        (-[WKFullScreenWindowController applicationDidChangeScreenParameters:]): Deleted.

2016-05-13  Antoine Quint  <graouts@apple.com>

        [iOS] <select> elements popover should render right-aligned when in RTL mode
        https://bugs.webkit.org/show_bug.cgi?id=157672
        <rdar://problem/26193442>

        Reviewed by Darin Adler.

        Add a new isRTL field to the AssistedNodeInformation as specified by the assisted
        node's render style and account for it when displaying the table view shown in the
        popover attached to the assisted node using the UIView semanticContentAttribute
        property.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        (WebKit::AssistedNodeInformation::AssistedNodeInformation):
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController initWithView:hasGroups:]):
        (-[WKSelectTableViewController tableView:cellForRowAtIndexPath:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2016-05-13  Tina Liu  <iting_liu@apple.com>

        Revert r199691.
        https://bugs.webkit.org/show_bug.cgi?id=157645
        <rdar://problem/26235373>

        Reviewed by Darin Adler.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Deleted.
        (WebKit::WebProcessCreationParameters::decode): Deleted.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextSetPrivateBrowsingPluginLoadClientPolicy): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setPluginLoadClientPolicy):
        (WebKit::WebProcessPool::createNewWebProcess): Deleted.
        (WebKit::WebProcessPool::setPluginLoadClientPolicyForPrivateBrowsing): Deleted.
        (WebKit::WebProcessPool::setPrivateBrowsingPluginLoadClientPolicy): Deleted.
        (WebKit::WebProcessPool::clearPluginClientPolicies): Deleted.
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::setPluginLoadClientPolicy):
        (WebKit::WebPlatformStrategies::longestMatchedWildcardHostForHost):
        (WebKit::WebPlatformStrategies::replaceHostWithMatchedWildcardHost):
        (WebKit::WebPlatformStrategies::pluginLoadClientPolicyForHost):
        (WebKit::WebPlatformStrategies::populatePluginCache):
        (WebKit::WebPlatformStrategies::setPluginLoadClientPolicyForPrivateBrowsing): Deleted.
        (WebKit::WebPlatformStrategies::setPrivateBrowsingPluginLoadClientPolicy): Deleted.
        (WebKit::WebPlatformStrategies::clearPluginClientPolicies): Deleted.
        (WebKit::WebPlatformStrategies::pluginLoadClientPolicyForHostForPrivateBrowsing): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setPluginLoadClientPolicies): Deleted.
        (WebKit::WebProcess::setPrivateBrowsingPluginLoadClientPolicy): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2016-05-12  Daniel Bates  <dabates@apple.com>

        Use SecTask SPI to retrieve code signing identifier for user directory suffix
        https://bugs.webkit.org/show_bug.cgi?id=157570
        <rdar://problem/25706517>

        Reviewed by Darin Adler.

        It is sufficient to make use of the SecTask SPI to retrieve the code signing
        identifier of the embedding client for use in the user directory suffix. This
        avoids the need to allow Code Signing Services to have access to the bundle
        of the embedding client.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox): Use the code signing identifier of the
        embedding client as part of the user directory suffix if available.
        * Shared/mac/CodeSigning.h: Update comment and include header wtf/spi/darwin/XPCSPI.h
        for the definition of xpc_connection_t. Renamed codeSigningIdentifier() to codeSigningIdentifierForCurrentProcess()
        to convey that it returns the code signing identifier for the current process. Repurposed
        the name codeSigningIdentifier for the variant of this function that takes a xpc_connection_t.
        * Shared/mac/CodeSigning.mm:
        (WebKit::codeSigningIdentifier): Added. Uses the audit token associated with the specified
        XPC connection to get the code signing identifier for the embedding client.
        (WebKit::codeSigningIdentifierForCurrentProcess): Renamed; formerly named codeSigningIdentifier.
        Implemented in terms of the SecTask API.
        (WebKit::secCodeForCurrentProcess): Deleted.
        (WebKit::secCodeForProcess): Deleted.
        (WebKit::secCodeSigningInformation): Deleted.
        (WebKit::appleSignedOrMacAppStoreSignedOrAppleDeveloperSignedRequirement): Deleted.
        (WebKit::secCodeSigningIdentifier): Deleted.
        (WebKit::codeSigningIdentifierForProcess): Deleted.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService): Update code due to renaming.

2016-05-12  Konstantin Tokarev  <annulen@yandex.ru>

        Use reference instead of pointer in FrameLoaderClient::saveViewStateToItem.
        https://bugs.webkit.org/show_bug.cgi?id=157624

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::saveViewStateToItem):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2016-05-12  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(ES6_ARROWFUNCTION_SYNTAX) guards
        https://bugs.webkit.org/show_bug.cgi?id=157564

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2016-05-11  Anders Carlsson  <andersca@apple.com>

        We have two different types of contextual menus in iBooks
        https://bugs.webkit.org/show_bug.cgi?id=157587
        rdar://problem/25904169

        Reviewed by Darin Adler.

        Give clients the option to bypass the WebKit context menu machinery.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2016-05-10  Brian Burg  <bburg@apple.com>

        Web Automation: add command to asynchronously load the Web Inspector frontend in the background
        https://bugs.webkit.org/show_bug.cgi?id=157509

        Reviewed by Timothy Hatcher and Joseph Pecoraro.

        In order to make it easier to debug code that executes as a result of an automation
        command, this patch adds a new Automation command to asynchronously load the debugger
        and Inspector frontend. It is designed for use by automation clients to implement an
        auto-inspection feature to aid in debugging automation scripts.

        * UIProcess/Automation/Automation.json: Add new command.
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::inspectBrowsingContext): Added.
        (WebKit::WebAutomationSession::inspectorFrontendLoaded): Added.
        This message is forwarded by WebInspectorProxy to the inspected page's session.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::sendSynthesizedEventsToPage):
        Force the active automation window to become key and bring to front prior to
        sending each NSEvent. This way, if the Inspector pauses while a command executes,
        the automation window will get back focus when the Inspector unpauses just before
        the next synthesized mouse or keyboard NSEvent is sent to its NSWindow.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::frontendLoaded):
        Forward to the inspected page's session.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in: Add notification of the frontend's load.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::frontendLoaded):
        Kick off notifying the automation session in UIProcess that the inspector loaded.

        (WebKit::WebInspectorUI::closeWindow):
        In some circumstances, the Web Inspector can be loaded without showing
        the window. If this hidden page closes, make sure the frontend host gets
        a chance to disconnect its InspectorFrontendClient. Normally this happens
        when the window closes, but unshown Inspectors do not get window instances.

2016-05-11  Chris Dumez  <cdumez@apple.com>

        Update Node::appendChild() / replaceChild() / removeChild() / insertBefore() to take references instead of pointers
        https://bugs.webkit.org/show_bug.cgi?id=157556

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode insertNode:before:]):
        (-[WKDOMNode appendChild:]):
        (-[WKDOMNode removeChild:]):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement):

2016-05-11  Brady Eidson  <beidson@apple.com>

        Modern IDB: IDBOpenDBRequests that are stop()'ed don't notify the IDBServer of that fact.
        https://bugs.webkit.org/show_bug.cgi?id=157448

        Reviewed by Alex Christensen.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToClient::openDBRequestCancelled):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToServer::openDBRequestCancelled):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2016-05-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix a typo in r200330

        Unreviewed.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

2016-05-10  Sam Weinig  <sam@webkit.org>

        Only expose WKDataDetectorTypes and -[WKWebViewConfiguration dataDetectorTypes] on iOS
        for now, since we don't have it fully implemented on Mac.

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (fromWKDataDetectorTypes):
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):

2016-05-10  Sam Weinig  <sam@webkit.org>

        Add SPI for Data Detectors to get ranges of text around an existing range.
        <rdar://problem/26009749>

        Reviewed by Enrica Casucci.

        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange rangeByExpandingToWordBoundaryByCharacters:inDirection:]):

2016-05-10  Enrica Casucci  <enrica@apple.com>

        Numerous block selection issues on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=157490
        rdar://problem/25717977
        rdar://problem/23042215

        Reviewed by Tim Horton.

        This patch fixes a number of issues with block selection on iOS.
        We no longer eagerly choose block selection vs text selection and we
        make sure we are capable of switching back to text selection from block
        under every circumstance. The patch also fixes the logic used to decide
        when to switch to block selection. It now computes the rectangle for the
        paragraph containing the initial text selection to decide when we are
        actually dragging outside the boundaries of the paragraph block.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::gestureCallback):
        (WebKit::WebPageProxy::touchesCallback):
        (WebKit::WebPageProxy::autocorrectionDataCallback):
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::updateSelectionWithTouches):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::selectionBoxForRange):
        (WebKit::canShrinkToTextSelection):
        (WebKit::hasCustomLineHeight):
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::contractedRangeFromHandle):
        (WebKit::WebPage::updateBlockSelectionWithTouch):
        (WebKit::WebPage::clearSelection):
        (WebKit::WebPage::switchToBlockSelectionAtPoint):
        (WebKit::WebPage::shouldSwitchToBlockModeForHandle):
        (WebKit::WebPage::updateSelectionWithTouches):
        (WebKit::WebPage::selectWithTwoTouches):

2016-05-10  Alex Christensen  <achristensen@webkit.org>

        Handle _schemeUpgraded delegate callbacks in NSURLSessionDataDelegate
        https://bugs.webkit.org/show_bug.cgi?id=157354
        rdar://problem/25842107

        Reviewed by Darin Adler.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]):
        When we make a request to a http url and CFNetwork determines that that url would have redirected to an HSTS site
        and it is going to change the request to an https request, this delegate callback is called.  We need to call the
        redirection code to have the same behavior as the NSURLConnection-based loader.

2016-05-10  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO) build
        https://bugs.webkit.org/show_bug.cgi?id=157518

        Reviewed by Alex Christensen.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2016-05-10  Anders Carlsson  <andersca@apple.com>

        Fix more deprecation warnings.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (NetworkServiceInitializer):
        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (PluginServiceInitializer):
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):

2016-05-10  Chris Dumez  <cdumez@apple.com>

        [SpeculativeValidation] Do not start a preload if there is already one pending
        https://bugs.webkit.org/show_bug.cgi?id=157522
        <rdar://problem/26156083>

        Reviewed by Alex Christensen.

        Do not start a preload if there is already one pending. We failed to check in
        SpeculativeLoadManager::preloadEntry() if there was already a pending preload.
        As a result, we would sometimes cancel an already pending preload and start
        one from scratch which is inefficient. It would also sometimes lead to hitting
        an assertion in the SpeculativeLoad destructor because we could destroy the
        SpeculativeLoad without finishing or cancelling the load.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):

2016-05-10  Anders Carlsson  <andersca@apple.com>

        Fix a deprecation warning.

        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseServiceEntryPoint.mm:
        (DatabaseServiceInitializer):

2016-05-10  Tim Horton  <timothy_horton@apple.com>

        Clicks do not work in Safari after pressing the Track package button in Gmail
        https://bugs.webkit.org/show_bug.cgi?id=157508
        <rdar://problem/22646404>

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        Explicitly cancel the force-click animation when we're removing the gesture
        recognizer due to the WK*View being unparented. This works around a bug
        where we don't get the cancellation callback in this situation, causing
        Safari to be left in an inconsistent and unexpected state.

2016-05-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Linux] Remove seccomp filters support
        https://bugs.webkit.org/show_bug.cgi?id=157380

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode): Deleted.
        (WebKit::NetworkProcessCreationParameters::decode): Deleted.
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Deleted.
        (WebKit::WebProcessCreationParameters::decode): Deleted.
        * Shared/WebProcessCreationParameters.h:
        * Shared/linux/SeccompFilters/OpenSyscall.cpp: Removed.
        * Shared/linux/SeccompFilters/OpenSyscall.h: Removed.
        * Shared/linux/SeccompFilters/SeccompBroker.cpp: Removed.
        * Shared/linux/SeccompFilters/SeccompBroker.h: Removed.
        * Shared/linux/SeccompFilters/SeccompFilters.cpp: Removed.
        * Shared/linux/SeccompFilters/SeccompFilters.h: Removed.
        * Shared/linux/SeccompFilters/SigactionSyscall.cpp: Removed.
        * Shared/linux/SeccompFilters/SigactionSyscall.h: Removed.
        * Shared/linux/SeccompFilters/SigprocmaskSyscall.cpp: Removed.
        * Shared/linux/SeccompFilters/SigprocmaskSyscall.h: Removed.
        * Shared/linux/SeccompFilters/Syscall.cpp: Removed.
        * Shared/linux/SeccompFilters/Syscall.h: Removed.
        * Shared/linux/SeccompFilters/SyscallPolicy.cpp: Removed.
        * Shared/linux/SeccompFilters/SyscallPolicy.h: Removed.
        * Shared/linux/SeccompFilters/XDGBaseDirectory.h: Removed.
        * Shared/linux/SeccompFilters/XDGBaseDirectoryGLib.cpp: Removed.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess): Deleted.
        (WebKit::WebProcessPool::createNewWebProcess): Deleted.
        (WebKit::WebProcessPool::cookieStorageDirectory): Deleted.
        * UIProcess/WebProcessPool.h:
        * WebProcess/efl/SeccompFiltersWebProcessEfl.cpp: Removed.
        * WebProcess/efl/SeccompFiltersWebProcessEfl.h: Removed.
        * WebProcess/gtk/SeccompFiltersWebProcessGtk.cpp: Removed.
        * WebProcess/gtk/SeccompFiltersWebProcessGtk.h: Removed.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Deleted.

2016-05-09  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r191922): Zoom in/Zoom Out is not working for PDFs
        https://bugs.webkit.org/show_bug.cgi?id=157503
        <rdar://problem/23736297>

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:
        Restore a requiresUnifiedScaleFactor that was lost in r191922.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::mainFramePluginHandlesPageScaleGestureDidChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:        
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        Separate mainFramePluginHandlesPageScaleGesture changes out from didCommitLoadForFrame,
        because the PluginView doesn't exist at this point, so it can't answer
        the handlesPageScaleGesture question correctly (or at all).
        Instead, we'll send the message when the main-frame PluginView is initialized.

2016-05-09  Simon Fraser  <simon.fraser@apple.com>

        [iOS] visibility:hidden -webkit-overflow-scrolling: touch divs can interfere with page scrolling
        https://bugs.webkit.org/show_bug.cgi?id=157496
        rdar://problem/22963278

        Reviewed by Tim Horton.

        UIScrollViews are constructed in the UI process for visibility:hidden scrollable elements
        with -webkit-overflow-scrolling: touch, and these intercept user events when they should not.

        Fix by propagating a "contentsHidden" flag from the web process which is used to turn off
        user interaction on these views.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (-[UIView _recursiveFindDescendantScrollViewAtPoint:withEvent:]): Our custom hit
        test needs to take view.isUserInteractionEnabled into account.
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::setHidden):
        (WebKit::PlatformCALayerRemote::contentsHidden):
        (WebKit::PlatformCALayerRemote::setContentsHidden):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2016-05-09  Ada Chan  <adachan@apple.com>

        Introduce WebVideoFullscreenInterfaceMac::isPlayingVideoInEnhancedFullscreen() and use it in WebVideoFullscreenManagerProxy::isPlayingVideoInEnhancedFullscreen()
        https://bugs.webkit.org/show_bug.cgi?id=157493

        Reviewed by Dan Bernstein.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::isPlayingVideoInEnhancedFullscreen):

2016-05-06  Ada Chan  <adachan@apple.com>

        Add WKPageRef SPI to tell whether there's a video playing in enhanced fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=157434

        Reviewed by Darin Adler.

        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageIsPlayingVideoInEnhancedFullscreen):
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::isPlayingVideoInEnhancedFullscreen):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingVideoInEnhancedFullscreen):
        * UIProcess/WebPageProxy.h:

2016-05-09  Anders Carlsson  <andersca@apple.com>

        Add injected bundle SPI for getting favicon and touch icon URLs
        https://bugs.webkit.org/show_bug.cgi?id=157435

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (collectIcons):
        New helper function that calls into the WebCore LinkCollector.

        (-[WKWebProcessPlugInFrame appleTouchIconURLs]):
        Call collectIcons.

        (-[WKWebProcessPlugInFrame faviconURLs]):
        Ditto.

2016-05-06  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Font size increases on some pages after navigating then going back
        https://bugs.webkit.org/show_bug.cgi?id=157441
        rdar://problem/22873240

        Reviewed by Darin Adler.

        There's an ordering dependency between setting the viewport configuration and doing
        layouts when going back to a page from the page cache that is incorrectly handled.

        In FrameLoader::commitProvisionalLoad(), CachedPage::restore() triggers a layout under
        updateContentsSize(), but this happens before dispatchDidCommitLoad() which updates
        the viewport arguments via ViewportConfiguration::setViewportArguments().

        This issue is not addressed by the current commit. But a second problem is:
        if the inputs to text autosizing change, we need to invalidate the autosizing state.
        The relevant input here is the fixed layout width (which is determined from the viewport
        configuration).

        The current code invalidated text autosizing when m_viewportConfiguration.minimumLayoutSize()
        changed, but the correct behavior is to invalidate based on fixed layout size changing.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):
        (WebKit::WebPage::setFixedLayoutSize):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::resetTextAutosizing):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::viewportConfigurationChanged):
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSize): Deleted.
        (WebKit::WebPage::resetTextAutosizingBeforeLayoutIfNeeded): Deleted.

2016-05-09  Alex Christensen  <achristensen@webkit.org>

        Don't use DiskCache for media resource loads
        https://bugs.webkit.org/show_bug.cgi?id=157405

        Reviewed by Darin Adler.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeRetrieveDecision):
        (WebKit::NetworkCache::makeStoreDecision):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::retrieveDecisionToDiagnosticKey):

2016-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Migrate our Font classes entirely off of NSFont
        https://bugs.webkit.org/show_bug.cgi?id=157464

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        (WebKit::WebPopupMenu::setUpPlatformData):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::fontAtSelection):

2016-05-06  Joseph Pecoraro  <pecoraro@apple.com>

        Rename HitTestRequest DisallowShadowContent to DisallowUserAgentShadowContent
        https://bugs.webkit.org/show_bug.cgi?id=157447

        Reviewed by Ryosuke Niwa.

        * WebProcess/WebPage/CoordinatedGraphics/WebPageCoordinatedGraphics.cpp:
        (WebKit::WebPage::findZoomableAreaForPoint):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hitTest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::rangeForBlockAtPoint):
        (WebKit::WebPage::getPositionInformation):

2016-05-06  Simon Fraser  <simon.fraser@apple.com>

        Enable IOS_TEXT_AUTOSIZING on Mac and make it testable
        https://bugs.webkit.org/show_bug.cgi?id=157432
        rdar://problem/16406720

        Reviewed by Dean Jackson.

        Enable IOS_TEXT_AUTOSIZING on Mac so it can be tested.
        
        Make the setTextAutosizingEnabled() Setting work, and plumb it through WK1 and WK2
        preferences for WTR and DRT. Make textAutosizingWindowSizeOverride() work, for layout tests.
        These two settings are shared with TEXT_AUTOSIZING.

        Add a TextAutosizing log channel, which is useful for generated -expected.html results.

        Move adjustComputedFontSizesOnBlocks() and related code from RenderObject to RenderElement
        without changes.

        An implication of this set of changes is that the way clients enable text autosizing
        has changed. Previously, they set the "MinimumZoomFontSize" preference to 0.
        Settings::defaultMinimumZoomFontSize() used to do this in order to enable text autosizing
        on iPhone only, not iPad.

        Now the preferred technique is to leave minimumZoomFontSize alone, and to use textAutosizingEnabled()
        instead. Settings::defaultTextAutosizingEnabled() now does the check for iPhone.

        UIWebView calls WebKitGetMinimumZoomFontSize() to setup the default minimum font zoom size,
        which will now always return 15, but had no other code that toggled this. So it's safe to just rely
        on Settings::defaultTextAutosizingEnabled() doing the right thing for iPhone/iPad.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _textAutosizingEnabled]):
        (-[WKPreferences _setTextAutosizingEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-05-06  Dean Jackson  <dino@apple.com>

        Regions, Shapes and Tracks don't need runtime features
        https://bugs.webkit.org/show_bug.cgi?id=157426
        <rdar://problem/26146262>

        Reviewed by Simon Fraser.

        The following RuntimeEnabledFeatures can be removed since
        we have no need to disable them (they are stable and have
        shipped for a while):
        - CSS Regions
        - CSS Shapes
        - Media tracks

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCSSRegionsEnabled): Deleted.
        (WKPreferencesGetCSSRegionsEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Deleted.
        (WebKit::InjectedBundle::setCSSRegionsEnabled): Deleted.
        (WebKit::InjectedBundle::setCSSCompositingEnabled): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Deleted.

2016-05-05  Ada Chan  <adachan@apple.com>

        Create a fence in WebVideoFullscreenManagerProxy::setVideoLayerFrame() to pass to the web process
        https://bugs.webkit.org/show_bug.cgi?id=157409

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame):
        Create a fence by calling DrawingAreaProxy::createFence() and pass it when sending the
        WebVideoFullscreenManager::SetVideoLayerFrameFenced message.

        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::createFence):
        Stub implementation. Assert not to be reached here since it's only implemented on Mac so far.
        * UIProcess/DrawingAreaProxy.h:

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence):
        Renamed from createFenceForGeometryUpdate() since we are using it for more than just updating geometry.
        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
        Update due to method rename.

2016-05-05  Brady Eidson  <beidson@apple.com>

        Modern IDB (Workers): Get everything to the right threads.
        https://bugs.webkit.org/show_bug.cgi?id=157398

        Reviewed by Alex Christensen.

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::putOrAdd):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2016-05-05  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Remove "region based columns" runtime feature remainings
        https://bugs.webkit.org/show_bug.cgi?id=157393

        The runtime feature was removed in r168978,
        and the usage in WebKitSettings.cpp in r168988.
        However it was still around in ExperimentalFeatures class.

        Reviewed by Michael Catanzaro.

        * UIProcess/gtk/ExperimentalFeatures.cpp: Remove runtime feature.
        * UIProcess/gtk/ExperimentalFeatures.h: Ditto.

2016-05-05  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Add CSS Grid Layout as experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=157391

        Reviewed by Michael Catanzaro.

        Now that we've a runtime feature again for CSS Grid Layout (r200215),
        we can recover the old patch (r162215) that allows to enable/disable
        CSS Grid Layout through the environment variable
        WEBKITGTK_EXPERIMENTAL_FEATURES.

        Example: WEBKITGTK_EXPERIMENTAL_FEATURES="CSS_GRID_LAYOUT=1"

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsConstructed): Use new experimental feature to enable
        or disable CSS Grid Layout.
        * UIProcess/gtk/ExperimentalFeatures.cpp: Add new experimental feature.
        * UIProcess/gtk/ExperimentalFeatures.h: Ditto.

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

        [WK2] Media controls don't update if controller is created after the interface is created
        https://bugs.webkit.org/show_bug.cgi?id=157376

        Reviewed by Beth Dakin.

        Implement the new getter methods on WebPlaybackSessionModelContext by caching the values
        passed through WebPlaybackSessionManagerProxy.

        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.h:
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.mm:
        (WebKit::WebPlaybackSessionManagerProxy::setCurrentTime):
        (WebKit::WebPlaybackSessionManagerProxy::setBufferedTime):
        (WebKit::WebPlaybackSessionManagerProxy::setSeekableRangesVector):
        (WebKit::WebPlaybackSessionManagerProxy::setCanPlayFastReverse):
        (WebKit::WebPlaybackSessionManagerProxy::setAudioMediaSelectionOptions):
        (WebKit::WebPlaybackSessionManagerProxy::setLegibleMediaSelectionOptions):
        (WebKit::WebPlaybackSessionManagerProxy::setExternalPlaybackProperties):
        (WebKit::WebPlaybackSessionManagerProxy::setWirelessVideoPlaybackDisabled):
        (WebKit::WebPlaybackSessionManagerProxy::setDuration):
        (WebKit::WebPlaybackSessionManagerProxy::setRate):
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenModelContext::requestFullscreenMode): Deleted.
        (WebKit::WebVideoFullscreenModelContext::setVideoLayerFrame): Deleted.
        (WebKit::WebVideoFullscreenModelContext::setVideoLayerGravity): Deleted.
        (WebKit::WebVideoFullscreenModelContext::fullscreenModeChanged): Deleted.
        (WebKit::WebVideoFullscreenModelContext::isVisible): Deleted.
        (WebKit::WebVideoFullscreenModelContext::didSetupFullscreen): Deleted.
        (WebKit::WebVideoFullscreenModelContext::didEnterFullscreen): Deleted.
        (WebKit::WebVideoFullscreenModelContext::didExitFullscreen): Deleted.
        (WebKit::WebVideoFullscreenModelContext::didCleanupFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::WebVideoFullscreenManagerProxy): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::~WebVideoFullscreenManagerProxy): Deleted.

2016-05-05  Dean Jackson  <dino@apple.com>

        Shadow DOM should not be experimental
        https://bugs.webkit.org/show_bug.cgi?id=157384
        <rdar://problem/26123254>

        Reviewed by Anders Carlsson.

        Shadow DOM is not an experimental feature. We want
        it enabled by default.

        This fixes the timeout in:
        WebKit2.InjectedBundleMakeAllShadowRootOpenTest

        * Shared/WebPreferencesDefinitions.h: Move the Shadow
        DOM preference out of Experimental.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

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

        Revert r200390, thus putting r199259 and r200161 and back.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::enclosedInScrollableAncestorView):
        (WebKit::operator==):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didInvokeUIScrollViewDelegateCallback]):
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidZoom:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView _scrollViewDidInterruptDecelerating:]):
        (-[WKWebView _visibleRectInEnclosingScrollView:]):
        (-[WKWebView _visibleContentRect]):
        (-[WKWebView _didScroll]):
        (-[WKWebView _enclosingScrollerScrollingEnded:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _updateVisibleContentRectAfterScrollInView:]):
        (scrollViewCanScroll):
        (-[WKWebView _updateContentRectsWithState:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2016-05-02  Sam Weinig  <sam@webkit.org>

        On platforms that support it, use a SecTrustRef as the basis of CertificateInfo instead of a chain of SecCertificateRefs.
        https://bugs.webkit.org/show_bug.cgi?id=157220

        Reviewed by Darin Adler.

        * Shared/Authentication/mac/AuthenticationManager.mac.mm:
        (WebKit::leafCertificate):
        (WebKit::chain):
        (WebKit::AuthenticationManager::tryUseCertificateInfoForChallenge):
        When supported, get the SecCertificateRef from the SecTrustRef rather than the
        stored certificate chain.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::typeFromCFTypeRef):
        (IPC::encode):
        (IPC::decode):
        * Shared/cf/ArgumentCodersCF.h:
        Add support for encoding/decoding SecTrustRef objects.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<CertificateInfo>::encode):
        (IPC::ArgumentCoder<CertificateInfo>::decode):
        Add support for encoding/decoding CertificateInfo's that contain SecTrustRef objects.

        (IPC::encodeNSError):
        (IPC::decodeNSError):
        Simplify error encoding/decoding by not using an addition CertificateInfo object for encoding
        the peerCertificateChain. Also, add the peerTrust to the userInfo that get's encoded/decoded.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView serverTrust]):
        (-[WKWebView certificateChain]):
        Add new serverTrust API and deprecate certificateChain.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::willChangeCertificateInfo):
        (WebKit::NavigationState::didChangeCertificateInfo):
        Add support for KVO of -[WKWebView serverTrust].

2016-05-05  Daniel Bates  <dabates@apple.com>

        Remove workaround added in r200391 (rdar://problem/25992976)
        https://bugs.webkit.org/show_bug.cgi?id=157378
        <rdar://problem/26118503>

        Reviewed by Anders Carlsson.

        Following the fix for <rdar://problem/26075714> we can remove the workaround added in r200391 (rdar://problem/25992976).

        * Shared/mac/CodeSigning.mm:
        (WebKit::secCodeSigningIdentifier):

2016-05-04  Dean Jackson  <dino@apple.com>

        Experimental Features don't need an "Experimental" prefix
        https://bugs.webkit.org/show_bug.cgi?id=157363
        <rdar://problem/26100630>

        Reviewed by Anders Carlsson.

        Since we're not persisting the value of the experimental
        features, it's unlikely there will ever be the case
        where we move a Preference from experimental to normal
        and use a stored value.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-05-04  Dean Jackson  <dino@apple.com>

        Experimental features should toggle runtime flags
        https://bugs.webkit.org/show_bug.cgi?id=157353
        <rdar://problem/23621603>

        Reviewed by Anders Carlsson.

        Hook up the experimental WebPreferences to RuntimeEnabledFeatures.
        In the process I removed the general preference for WebGL 2 (we
        already had an experimental feature for it) and moved Custom
        Elements and Shadow DOM to experimental.

        I also removed the C versions of the preferences, since experimental
        features only need the ObjC API (which is generated automatically).

        * Shared/WebPreferencesDefinitions.h: Move/remove some features and
        make the experimental section more clear.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebGL2Enabled): Deleted.
        (WKPreferencesGetWebGL2Enabled): Deleted.
        (WKPreferencesSetShadowDOMEnabled): Deleted.
        (WKPreferencesGetShadowDOMEnabled): Deleted.
        (WKPreferencesSetCustomElementsEnabled): Deleted.
        (WKPreferencesGetCustomElementsEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::updateBoolValueForExperimentalFeatureKey): A
        version of updateBoolValueForKey that doesn't call the platform
        function (e.g. doesn't save to NSUserDefaults).
        * UIProcess/WebPreferences.h:
        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::WebPreferences::platformInitializeStore): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-05-04  Dean Jackson  <dino@apple.com>

        TestRunner should always enable all the experimental features
        https://bugs.webkit.org/show_bug.cgi?id=157360
        <rdar://problem/26099748>

        Reviewed by Anders Carlsson.

        Experimental features are disabled by default, but it is
        a pain to enable them in every test. Instead, have the
        test runner turn them all on.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesEnableAllExperimentalFeatures):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::enableAllExperimentalFeatures):
        * UIProcess/WebPreferences.h:

2016-05-04  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Add WKPreference for SelectionPaintingWithoutSelectionGaps
        https://bugs.webkit.org/show_bug.cgi?id=156900

        Reviewed by Michael Catanzaro.

        Unlike other browsers WebKit has been drawing selection gaps
        between render blocks during the text selection. This often
        cause text selection screen looks messy.

        This patch adds a setting method to disable the functionality,
        and EFL port disables it by default.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetSelectionPaintingWithoutSelectionGapsEnabled):
        (WKPreferencesGetSelectionPaintingWithoutSelectionGapsEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-05-04  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] CompositingCoordinator should hande root compositing and view overlay layers separately
        https://bugs.webkit.org/show_bug.cgi?id=157305

        Reviewed by Carlos Garcia Campos.

        Update CoordinatedLayerTreeHost and ThreadCoordinatedLayerTreeHost to
        correctly use setRootCompositingLayer() and setViewOverlayRootLayer()
        methods on the CompositingCoordinator object.

        CoordinatedLayerTreeHost doesn't have to keep a pointer to the root
        compositing layer anymore. updateRootLayers() can be removed.

        ThreadCoordinatedLayerTreeHost doen't have to keep a pointer to both
        the root compositing and the view overlay layers anymore. Similarly,
        updateRootLayers() can be removed.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::setViewOverlayRootLayer):
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost): Deleted.
        (WebKit::CoordinatedLayerTreeHost::updateRootLayers): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::ThreadedCoordinatedLayerTreeHost::setViewOverlayRootLayer):
        (WebKit::ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost): Deleted.
        (WebKit::ThreadedCoordinatedLayerTreeHost::updateRootLayers): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2016-05-03  Beth Dakin  <bdakin@apple.com>

        Add VideoControlsManager tests
        https://bugs.webkit.org/show_bug.cgi?id=157332
        -and corresponding-
        rdar://problem/24358431

        Reviewed by Sam Weinig.

        Expose _hasActiveVideoForControlsManager on WKWebViewPrivate for the sake of 
        testing. 
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _hasActiveVideoForControlsManager]):
        (-[WKWebView _doAfterNextPresentationUpdate:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2016-05-03  Jer Noble  <jer.noble@apple.com>

        [iOS][WK2] Allow WKWebView to play local filesystem media when created with -loadFileURL:allowingReadAccessToURL:
        https://bugs.webkit.org/show_bug.cgi?id=156875
        <rdar://problem/24281444>

        Reviewed by Alexey Proskuryakov.

        Grant AVFoundation the right to issue file read sandbox extensions from the WebContent process to the mediaserverd
        process, so that it can play back local media files.

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

2016-05-03  Jiewen Tan  <jiewen_tan@apple.com>

        File Upload: Photo upload name is always generic (image.jpg)
        https://bugs.webkit.org/show_bug.cgi?id=157291
        <rdar://problem/12353008>

        Reviewed by Darin Adler.

        Use the original filename as the name of an uploaded image instead of
        a generic name, i.e. image.jpg.

        * Platform/spi/ios/PhotosSPI.h: Added.
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _uploadItemForImage:withAssetURL:successBlock:failureBlock:]):
        * WebKit2.xcodeproj/project.pbxproj:

2016-05-03  Chris Dumez  <cdumez@apple.com>

        [WK2][DiskCache] Store common HTTP header names as strings
        https://bugs.webkit.org/show_bug.cgi?id=157326
        <rdar://problem/26073498>

        Reviewed by Antti Koivisto.

        Store common HTTP header names as strings in the disk cache instead of
        using their value in the HTTPHeaderName enumeration. Having the disk
        cache rely in the HTTPHeaderName enumeration is risky becomes it means
        the cached data would become invalid every time someone updates
        HTTPHeaderNames.in in WebCore. If someone were to update
        HTTPHeaderNames.in without bumping the disk cache version, we would end
        up with wrongly recognized HTTP header names after loading responses
        from the cache.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::encode):
        (WebKit::NetworkCache::Coder<WebCore::HTTPHeaderMap>::decode):
        * NetworkProcess/cache/NetworkCacheCoders.h:
        * NetworkProcess/cache/NetworkCacheStorage.h:

2016-05-03  Daniel Bates  <dabates@apple.com>

        Temporary workaround for Apple Internal builds
        <rdar://problem/25992976>

        For Apple Internal builds treat error code errSecCSGuestInvalid as if it were error code errSecCSUnsigned.
        We will look to remove this workaround in the fix for <rdar://problem/26075714>.

        * Shared/mac/CodeSigning.mm:
        (WebKit::secCodeSigningIdentifier):

2016-05-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r199259 and r200161.

        Seems to have caused a ~1.2% PLT regression on iOS

        Reverted changesets:

        "[iOS WK2] WKWebViews should consult ancestor UIScrollViews to
        determine tiling area"
        https://bugs.webkit.org/show_bug.cgi?id=156429
        http://trac.webkit.org/changeset/199259

        "[iOS WK2] When determining tile size, check whether ancestor
        UIScrollViews are actually scrollable"
        https://bugs.webkit.org/show_bug.cgi?id=157107
        http://trac.webkit.org/changeset/200161

2016-05-03  Dean Jackson  <dino@apple.com>

        CSS Grid should be an experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=157327
        <rdar://problem/26075147>

        Reviewed by Anders Carlsson.

        The CSS Grid Layout runtime flag was exposed by
        a WebKit preference. It was in the experimental
        section but was missing the "Experimental" prefix.

        It was also missing the human readable description.

        Lastly, there is no need for the C API for experimental
        features.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCSSGridLayoutEnabled): Deleted.
        (WKPreferencesGetCSSGridLayoutEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-05-03  Alex Christensen  <achristensen@webkit.org>

        Remove firing assertion when redirecting
        https://bugs.webkit.org/show_bug.cgi?id=155800
        rdar://25299194

        Reviewed by Sam Weinig.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:willCacheResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        With NSURLConnection, we stopped getting delegate callbacks once the delegate is destroyed, and everything was cancelled.
        With NSURLSession we continue getting delegate callbacks because the session's delegate is not destroyed after each load.
        As documented in NSURLSession.h: "In some cases, the task may signal other work before it acknowledges the cancelation."
        In the cases where we cancel a load, delete the NetworkLoad and corresponding NetworkDataTask, we want to call all
        completion handlers indicating that we really want to cancel instead of asserting.

2016-05-02  Darin Adler  <darin@apple.com>

        Change IDL enumerations to be nested in their C++ class instead of at WebCore namespace level
        https://bugs.webkit.org/show_bug.cgi?id=157257

        Reviewed by Chris Dumez.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource): Updated since we changed
        ReferrerHeaderPolicy back to ReferrerPolicy.
        (WebKit::WebLoaderStrategy::schedulePluginStreamLoad): Ditto.

2016-05-02  Brady Eidson  <beidson@apple.com>

        Const-ify some IDB code.
        https://bugs.webkit.org/show_bug.cgi?id=157287

        Reviewed by Alex Christensen.

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::deleteDatabase):
        (WebKit::WebIDBConnectionToServer::openDatabase):
        (WebKit::WebIDBConnectionToServer::abortTransaction):
        (WebKit::WebIDBConnectionToServer::commitTransaction):
        (WebKit::WebIDBConnectionToServer::didFinishHandlingVersionChangeTransaction):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2016-05-02  Simon Fraser  <simon.fraser@apple.com>

        Sort the project file.

        * WebKit2.xcodeproj/project.pbxproj:

2016-05-02  Simon Fraser  <simon.fraser@apple.com>

        Fix shouldUpdateScrollLayerPositionSynchronously() for non-main frames. Remove updatesScrollLayerPositionOnMainThread()
        https://bugs.webkit.org/show_bug.cgi?id=157277

        Reviewed by Dean Jackson, Tim Horton.

        Remove updatesScrollLayerPositionOnMainThread() which is unused by all ports.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:

2016-05-02  Alex Christensen  <achristensen@webkit.org>

        Crash if a certificate chain has null certificates
        https://bugs.webkit.org/show_bug.cgi?id=157206

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::certificatesMatch):
        SecTrustGetCertificateAtIndex can return null.
        If this ever happens, something has gone horribly wrong in the security code and we should crash.
        See rdar://problem/21723172

2016-05-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments after r200116
        https://bugs.webkit.org/show_bug.cgi?id=157228

        Reviewed by Anders Carlsson.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        * UIProcess/WebPageProxy.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-05-02  Daniel Bates  <dabates@apple.com>

        DatabaseTracker::closeAllDatabases calls Database::close from the wrong thread
        https://bugs.webkit.org/show_bug.cgi?id=147672
        <rdar://problem/22357464>

        Reviewed by Brady Eidson.

        Call DatabaseTracker::closeAllDatabases() with CurrentQueryBehavior::Interrupt so that we abort
        a long running query and close the database immediately to avoid holding a locked file when the
        process is suspended.

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

2016-05-01  Darin Adler  <darin@apple.com>

        Update Fetch to use enum class instead of string for enumerations
        https://bugs.webkit.org/show_bug.cgi?id=157241

        Reviewed by Chris Dumez.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::loadResource): Updated for the change where I
        renamed ReferrerPolicy to ReferrerHeaderPolicy, at least for now.
        (WebKit::WebLoaderStrategy::schedulePluginStreamLoad): Ditto.

2016-05-01  Konstantin Tokarev  <annulen@yandex.ru>

        Fixed build with !ENABLED(DATABASE_PROCESS).

        Unreviewed build fix.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::grantSandboxExtensionsToDatabaseProcessForBlobs):

2016-04-29  Chris Dumez  <cdumez@apple.com>

        Drop useless check in SpeculativeLoadManager::registerLoad()
        https://bugs.webkit.org/show_bug.cgi?id=157204

        Reviewed by Antti Koivisto.

        Drop useless check in SpeculativeLoadManager::registerLoad(). There is
        no way to end up this code path with a non-HTTP family request.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):

2016-04-29  Brian Burg  <bburg@apple.com>

        Web Automation: add SPI to mark an existing NSEvent as synthesized for automation
        https://bugs.webkit.org/show_bug.cgi?id=157221
        <rdar://problem/26019356>

        Reviewed by Timothy Hatcher.

        In cases where an NSEvent is duplicated, clients need to re-mark an NSEvent
        as synthesized for automation if the original NSEvent was marked as such.

        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.mm:
        (-[_WKAutomationSession markEventAsSynthesizedForAutomation:]):
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::sendSynthesizedEventsToPage):
        (WebKit::WebAutomationSession::markEventAsSynthesizedForAutomation):

2016-04-29  Brian Burg  <bburg@apple.com>

        Web Automation: use a magic eventNumber as a fallback for detecting NSEvents synthesized for automation
        https://bugs.webkit.org/show_bug.cgi?id=157222

        Reviewed by Timothy Hatcher.

        Sometimes events are copied and redelivered in a way that can't be reliably intercepted,
        so use eventNumber as an alternate means of detecting synthesized mouse NSEvents.

        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::wasEventSynthesizedForAutomation):
        If it's a mouse-related event, check the eventNumber if the associated object was missing.

        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        Most real events from input devices fill in eventNumber with a non-zero value.
        In my testing, using zero did not seem to adversely affect event delivery.

2016-04-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Issues inspecting the inspector, pausing on breakpoints causes content to not load
        https://bugs.webkit.org/show_bug.cgi?id=157198
        <rdar://problem/26011049>

        Reviewed by Timothy Hatcher.

        * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.h:
        * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp:
        (WebKit::WebInspectorFrontendAPIDispatcher::reset):
        (WebKit::WebInspectorFrontendAPIDispatcher::frontendLoaded):
        (WebKit::WebInspectorFrontendAPIDispatcher::suspend):
        (WebKit::WebInspectorFrontendAPIDispatcher::unsuspend):
        (WebKit::WebInspectorFrontendAPIDispatcher::dispatchCommand):
        (WebKit::WebInspectorFrontendAPIDispatcher::dispatchMessageAsync):
        (WebKit::WebInspectorFrontendAPIDispatcher::evaluateOrQueueExpression):
        (WebKit::WebInspectorFrontendAPIDispatcher::evaluateQueuedExpressions):
        Avoid evaluating expressions when the page is paused. Generalize the
        message queueing and dispatching for pause/suspend that we already
        had for waiting for the frontend page to be loaded.

        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::pagePaused):
        (WebKit::WebInspectorUI::pageUnpaused):
        When the frontend page pauses/unpauses, suspend/resume the dispatcher.

2016-04-29  Chris Dumez  <cdumez@apple.com>

        Remove unnecessary isolated String copying from one of NetworkCache::Key's constructor
        https://bugs.webkit.org/show_bug.cgi?id=157207

        Reviewed by Antti Koivisto.

        Remove unnecessary isolated String copying from one of NetworkCache::Key's
        constructor. We are anyway going to create isolated copies if the Key ends
        up getting copied.

        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::Key):

2016-04-29  Brian Burg  <bburg@apple.com>

        Web Automation: performMouseInteraction command computes mouse event coordinates incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=157218
        <rdar://problem/26018230>

        Reviewed by Timothy Hatcher.

        This patch fixes two issues: the min/max clamp was in the wrong order,
        and the y-value did not account for the window's top content inset.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::performMouseInteraction):

2016-04-29  Dean Jackson  <dino@apple.com>

        RTL <select> popup menu is in the wrong location
        https://bugs.webkit.org/show_bug.cgi?id=157159
        <rdar://problem/25894451>

        Reapply http://trac.webkit.org/changeset/200217
        but with changes that will allow it to build on Yosemite.

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):

2016-04-28  Ada Chan  <adachan@apple.com>

        Indicate we are processing user gesture when handling messages from WebPlaybackSessionManagerProxy to WebPlaybackSessionManager
        https://bugs.webkit.org/show_bug.cgi?id=157151

        Reviewed by Jer Noble.

        Messages from WebPlaybackSessionManagerProxy to WebPlaybackSessionManager are triggered by
        user actions, so add a UserGestureIndicator in the methods that handle those messages.

        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionManager::play):
        (WebKit::WebPlaybackSessionManager::pause):
        (WebKit::WebPlaybackSessionManager::togglePlayState):
        (WebKit::WebPlaybackSessionManager::beginScrubbing):
        (WebKit::WebPlaybackSessionManager::endScrubbing):
        (WebKit::WebPlaybackSessionManager::seekToTime):
        (WebKit::WebPlaybackSessionManager::fastSeek):
        (WebKit::WebPlaybackSessionManager::beginScanningForward):
        (WebKit::WebPlaybackSessionManager::beginScanningBackward):
        (WebKit::WebPlaybackSessionManager::endScanning):
        (WebKit::WebPlaybackSessionManager::selectAudioMediaOption):
        (WebKit::WebPlaybackSessionManager::selectLegibleMediaOption):

2016-04-29  Brady Eidson  <beidson@apple.com>

        Add a default ".isolatedCopy()" specialization to CrossThreadCopier, and other small cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=157185

        Reviewed by Anders Carlsson.

        * Shared/WebCrossThreadCopier.cpp:
        (WebCore::Vector<char>>::copy): reserveInitialCapacity() before creating the copy.
        (WebCore::Vector<int64_t>>::copy): Ditto.
        (WebCore::Vector<uint8_t>>::copy): Ditto.
        (WebCore::Vector<Vector<IDBKeyData>>>::copy): Deleted dead code.
        * Shared/WebCrossThreadCopier.h:

2016-04-29  Commit Queue  <commit-queue@webkit.org>

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

        This change broke the Yosemite build. (Requested by ryanhaddad
        on #webkit).

        Reverted changeset:

        "RTL <select> popup menu is in the wrong location"
        https://bugs.webkit.org/show_bug.cgi?id=157159
        http://trac.webkit.org/changeset/200217

2016-04-29  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Move WK2 shareable code out from gtk directories
        https://bugs.webkit.org/show_bug.cgi?id=157135

        Reviewed by Darin Adler.

        Both NetworkProcessMain and InjectedBundle can go out from their respective gtk directories.

        * NetworkProcess/gtk/NetworkProcessMainGtk.cpp:
        (WebKit::NetworkProcessMainUnix): Deleted.
        * NetworkProcess/soup/NetworkProcessMainSoup.cpp: Renamed from Source/WebKit2/NetworkProcess/gtk/NetworkProcessMainGtk.cpp.
        (WebKit::NetworkProcessMainUnix):
        * PlatformGTK.cmake: Update.
        * WebProcess/InjectedBundle/glib/InjectedBundleGlib.cpp: Renamed from Source/WebKit2/WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp.
        (WebKit::InjectedBundle::initialize):
        (WebKit::InjectedBundle::setBundleParameter):
        (WebKit::InjectedBundle::setBundleParameters):
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::initialize): Deleted.
        (WebKit::InjectedBundle::setBundleParameter): Deleted.
        (WebKit::InjectedBundle::setBundleParameters): Deleted.

2016-04-28  Dean Jackson  <dino@apple.com>

        RTL <select> popup menu is in the wrong location
        https://bugs.webkit.org/show_bug.cgi?id=157159
        <rdar://problem/25894451>

        Reviewed by Simon Fraser.

        Make sure the NSPopupMenu takes the text direction
        into account, and offset the position
        of the menu slightly if we're in RTL mode.

        Unfortunately our test infrastructure is unable to exercise
        this because it runs without a window, and the popup menu
        is not captured in the screenshot.

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):

2016-04-28  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Add CSS Grid Layout runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=157134

        Reviewed by Simon Fraser.

        Add CSS Grid Layout runtime flag based on preferences,
        enabled by default.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCSSGridLayoutEnabled):
        (WKPreferencesGetCSSGridLayoutEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-04-28  Daniel Bates  <dabates@apple.com>

        Fix the Apple Internal OS X build

        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _drawPDFDocument:page:atPoint:]): Ignore deprecation warning for -[PDFPage drawWithBox:].
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::drawPDFPage): Ditto.

2016-04-28  Manuel Rego Casasnovas  <rego@igalia.com>

        Fix mistake in custom elements runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=157130

        Reviewed by Chris Dumez.

        The methods for the custom elements runtime flag were using
        the Shadow DOM flag instead.
        These methods were introduced in r197921,
        it seems it was just a copy&paste mistake.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCustomElementsEnabled):
        (WKPreferencesGetCustomElementsEnabled):

2016-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add missing files to the compilation of GTK+ inspector.

        * PlatformGTK.cmake:

2016-04-27  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/25915253> REGRESSION (r199628): Netflix playback fails in Safari Technology Preview with error code S7363-1260-FFFF58D8

        Rubber-stamped by Tim Horton.

        Reverted r199628.

        * Configurations/WebContentService.xcconfig:

2016-04-27  Brady Eidson  <beidson@apple.com>

        Modern IDB: Implement native IDBFactory.getAllDatabaseNames for WebInspector.
        https://bugs.webkit.org/show_bug.cgi?id=157072

        Reviewed by Alex Christensen.

        Handle the process hop for the new getAllDatabaseNames call.
        
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didGetAllDatabaseNames):
        (WebKit::WebIDBConnectionToClient::getAllDatabaseNames):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

        * Shared/WebCrossThreadCopier.cpp:
        (WebCore::SecurityOriginData>::copy): Deleted, as its in WebCore now.
        * Shared/WebCrossThreadCopier.h:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::getAllDatabaseNames):
        (WebKit::WebIDBConnectionToServer::didGetAllDatabaseNames):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

2016-04-27  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] When determining tile size, check whether ancestor UIScrollViews are actually scrollable
        https://bugs.webkit.org/show_bug.cgi?id=157107
        rdar://problem/25943577

        Reviewed by Tim Horton.
        
        We should only fall back to 512x512 tiles if the WKWebView has a UIScrollView ancestor,
        and that UIScrollView actually scrolls. This avoids falling back to small tiles in
        MobileSafari.

        Rename "enclosedInScrollView" to "enclosedInScrollableAncestorView" everywhere.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::enclosedInScrollableAncestorView):
        (WebKit::operator==):
        (WebKit::VisibleContentRectUpdateInfo::enclosedInScrollView): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (scrollViewCanScroll):
        (-[WKWebView _updateContentRectsWithState:]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollView:]): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2016-04-26  Ada Chan  <adachan@apple.com>

        Set WebVideoFullscreenInterfaceMac up as a client of WebPlaybackSessionInterfaceMac to listen for playback state changes
        https://bugs.webkit.org/show_bug.cgi?id=157008

        Reviewed by Jer Noble.

        Since WebVideoFullscreenInterfaceMac holds onto WebPlaybackSessionInterfaceMac, we can't let
        WebPlaybackSessionManagerProxy unregister the context for that media element while
        WebVideoFullscreenInterfaceMac is still using it. WebVideoFullscreenInterfaceMac should add
        to the client count for that WebPlaybackSession context.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::createModelAndInterface):
        When the context for the media element is created with the WebVideoFullscreenManagerProxy, it should
        add one to the client count for the media element context in WebPlaybackSessionManagerProxy.
        (WebKit::WebVideoFullscreenManagerProxy::removeClientForContext):
        When WebVideoFullscreenManagerProxy unregisters the context for this media element, it should
        subtract one from the client count for the media element context in WebPlaybackSessionManagerProxy.

        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionManager::clearPlaybackControlsManager):
        Bail early if m_controlsManagerContextId is zero. Otherwise, we'd end up sending a
        ClearPlaybackControlsManager message to the UI process inadvertently.
        (WebKit::WebPlaybackSessionManager::contextIdForMediaElement):
        Make sure the model element for the context ID is set to the media element.

        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::createModelAndInterface):
        When the context for the media element is created with the WebVideoFullscreenManager, it should
        add one to the client count for the media element context in WebPlaybackSessionManager.
        (WebKit::WebVideoFullscreenManager::removeContext):
        When WebVideoFullscreenManager unregisters the context for this media element, it should
        subtract one from the client count for the media element context in WebPlaybackSessionManager.

2016-04-27  Alex Christensen  <achristensen@webkit.org>

        Remove download message receiver when NetworkProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=157102
        <rdar://problem/25550106>

        Reviewed by Anders Carlsson.

        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::processDidClose):
        When the NetworkProcess crashes during a download, we want to remove the message receiver from the map
        so we don't get an assertion in ~MessageReceiver in the UIProcess so we do not have a freed
        message receiver in the map.

2016-04-27  Alex Christensen  <achristensen@webkit.org>

        Fix client certificate authentication with NSURLSession on iOS
        https://bugs.webkit.org/show_bug.cgi?id=157094
        <rdar://problem/25946859>

        Reviewed by Darin Adler.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        We only want to create a non-persistent credential with the given user and password 
        and store the user and password in the CredentialStorage if there is a user and password.
        We previously only skipped this if we were doing server trust evaluation, in which case 
        we will have a credential from serverTrustCredential which has no user or password.
        When doing client certificate authentication on iOS, this completion handler is called with
        a credential with session persistence and also no user or password, so we need to do the same thing.
        The reason this was never hit on Mac was because the credential came from tryUseCertificateInfoForChallenge,
        which always had persistence none.

2016-04-27  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][EFL] Move WK2 platform code to a common place
        https://bugs.webkit.org/show_bug.cgi?id=157069

        Reviewed by Carlos Garcia Campos.

        Logging implementation can be shared between EFL and GTK, so move it to unix.
        The GTK Module implementation doesn't depend on GTK anyhow so move it to glib.

        * Platform/efl/LoggingEfl.cpp: Removed.
        (WebKit::logLevelString): Deleted.
        * Platform/glib/ModuleGlib.cpp: Renamed from Source/WebKit2/Platform/gtk/ModuleGtk.cpp.
        (WebKit::Module::load):
        (WebKit::Module::unload):
        (WebKit::Module::platformFunctionPointer):
        * Platform/gtk/LoggingGtk.cpp:
        (WebKit::logLevelString): Deleted.
        * Platform/gtk/ModuleGtk.cpp:
        (WebKit::Module::load): Deleted.
        (WebKit::Module::unload): Deleted.
        (WebKit::Module::platformFunctionPointer): Deleted.
        * Platform/unix/LoggingUnix.cpp: Renamed from Source/WebKit2/Platform/gtk/LoggingGtk.cpp.
        (WebKit::logLevelString):
        * PlatformEfl.cmake: Update.
        * PlatformGTK.cmake: Update

2016-04-27  Alex Christensen  <achristensen@webkit.org>

        Fix assertion when downloading with NSURLSession after r198955
        https://bugs.webkit.org/show_bug.cgi?id=157051

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::continueDecidePendingDownloadDestination):

2016-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r200094): [FreeType] Vertical text is broken after r200094
        https://bugs.webkit.org/show_bug.cgi?id=157066

        Reviewed by Martin Robinson.

        Add Source/WebCore/platform/graphics/freetype to the list of include dirs, because now FontPlatformData.h
        includes FcUniquePtr.h.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:

2016-04-26  Joseph Pecoraro  <pecoraro@apple.com>

        Uncaught Exception: SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.
        https://bugs.webkit.org/show_bug.cgi?id=156991
        <rdar://problem/25913475>

        Reviewed by Timothy Hatcher.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Explicitly always allow access to storage for Web Inspector content just
        in case, as we already allow universal file access.

2016-04-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [WK2] [OS X] Create API for switching RTL scrollbar policy
        https://bugs.webkit.org/show_bug.cgi?id=156948
        <rdar://problem/25707757>

        Reviewed by Darin Adler.

        Add the new API.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        * UIProcess/WebPageProxy.cpp:
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-04-26  Beth Dakin  <bdakin@apple.com>

        Check to make sure shouldRequestCandidates() before requesting candidates
        https://bugs.webkit.org/show_bug.cgi?id=157038
        -and corresponding-
        rdar://problem/25910418

        Reviewed by Tim Horton.

        This patch limits requesting and showing candidates to cases where 
        shouldRequestCandidates() is true. This patch also caches the sequence number 
        returned by [NSSpellChecker requestCandidatesForSelectedRange:] to make sure 
        it is equal to the sequence number sent to the callback handler so that we do 
        not show candidates for old requests.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateWebViewImplAdditions):
        (WebKit::WebViewImpl::shouldRequestCandidates):
        (WebKit::WebViewImpl::showCandidates):
        (WebKit::WebViewImpl::requestCandidatesForSelectionIfNeeded):
        (WebKit::WebViewImpl::handleRequestedCandidates):

2016-04-26  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Update expectation result in ewk_context_preferred_languages API test
        https://bugs.webkit.org/show_bug.cgi?id=157027

        Reviewed by Carlos Garcia Campos.

        platformLanguage() has been returning lower case value since r199815. Thus existing expected result
        needs to be updated together.

        * UIProcess/API/efl/tests/test_ewk2_context.cpp: Change en-US with en-us.
        (TEST_F):

2016-04-26  Zan Dobersek  <zdobersek@igalia.com>

        Mark two methods in the CoordinatedGraphicsScene and the
        ThreadedCoordinatedLayerTreeHost classes as overrides, fixing
        the compiler warnings.

        Rubber-stamped by Carlos Garcia Campos.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2016-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the build flag for template elements
        https://bugs.webkit.org/show_bug.cgi?id=157022

        Reviewed by Daniel Bates.

        * Configurations/FeatureDefines.xcconfig:

2016-04-25  Chris Dumez  <cdumez@apple.com>

        Crash under -[WKWebView _mayAutomaticallyShowVideoPictureInPicture] + 32 (WKWebView.mm:309)
        https://bugs.webkit.org/show_bug.cgi?id=156990
        <rdar://problem/25904376>

        Reviewed by Jer Noble.

        In case of WebProcess crash, WebPageProxy::processDidCrash() will call resetState() which
        will nullify WebPageProxy::m_videoFullscreenManager. In WebPageProxy::reattachToWebProcess(),
        we then call updateViewState() before re-initializing m_videoFullscreenManager, and
        updateViewState() ends up calling [WKWebView _mayAutomaticallyShowVideoPictureInPicture]
        which dereferences WebPageProxy::m_videoFullscreenManager without null check. This patch
        adds a null check for m_videoFullscreenManager in _mayAutomaticallyShowVideoPictureInPicture.

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

2016-04-25  Dan Bernstein  <mitz@apple.com>

        Fix a couple of mistakes from r199700.

        Rubber-stamped by Anders Carlsson.

        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Added availability attributes to new properties.
        * WebKit2.xcodeproj/project.pbxproj: Demoted _WKExperimentalFeatureInternal.h from Private to Project.

2016-04-24  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Update the ewk_settings_offline_web_application_cache_enabled_get() expected value after r199854.
        https://bugs.webkit.org/show_bug.cgi?id=156968

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/C/WKPreferencesRef.h: Update the comment.
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp: 
        (TEST_F):

2016-04-23  Andy Estes  <aestes@apple.com>

        Fix issues found by the clang static analyzer
        https://bugs.webkit.org/show_bug.cgi?id=156956

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/Cocoa/WKPreviewActionItem.mm:
        (-[WKPreviewAction dealloc]): Added to release _identifier.
        * UIProcess/_WKWebViewPrintFormatter.mm:
        (-[_WKWebViewPrintFormatter dealloc]): Released _frameToPrint.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView inputView]): -createPeripheralWithView: returned a retained object, but the method name did not
        match Cocoa conventions. Called -initWithView: instead.
        (-[WKContentView _showAttachmentSheet]): Stored the _WKActivatedElementInfo in a RetainPtr.
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]): Ditto.
        (+[WKAutocorrectionContext autocorrectionContextWithData:markedText:selectedText:afterText:selectedRangeInMarkedText:]):
        The properties contextBeforeSelection, selectedText, markedText, and contextAfterSelection have the 'copy'
        annotation in UIWKAutocorrectionContext, so the additional copy made here would be leaked. Removed the extra copy.
        (-[WKAutocorrectionContext dealloc]): Deleted.
        * UIProcess/ios/forms/WKFormInputControl.h: Removed -createPeripheralWithView: and declared -initWithView:.
        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKFormInputControl initWithView:]): Changed to return instancetype.
        (+[WKFormInputControl createPeripheralWithView:]): Deleted.
        * UIProcess/ios/forms/WKFormSelectControl.h: Removed -createPeripheralWithView: and declared -initWithView:.
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (+[WKFormSelectControl createPeripheralWithView:]): Deleted.
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::decodeLegacySessionState): If dynamic_cf_cast returned nullptr, the result of
        CFPropertyListCreateWithData would leak. Stored the CFPropertyListRef in a RetainPtr before calling dynamic_cf_cast.
        * UIProcess/mac/ServicesController.mm:
        (WebKit::ServicesController::refreshExistingServices): Used a RetainPtr for attachment and cell.
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu): Used a RetainPtr for groupEntry.

2016-04-23  Chris Dumez  <cdumez@apple.com>

        Tie the DiagnosticLoggingClient's lifetime to the Page
        https://bugs.webkit.org/show_bug.cgi?id=156938
        <rdar://problem/25851499>

        Reviewed by Antti Koivisto.

        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::pageDestroyed):
        (WebKit::WebDiagnosticLoggingClient::mainFrameDestroyed): Deleted.
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::willStartUserTriggeredZooming):

2016-04-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/25893246> WebKit2 has failed to build: error: use of undeclared identifier 'm_playbackSessionManager'

        Fixed the non-AVKit build.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isShowingVideoPictureInPicture]):
        (-[WKWebView _mayAutomaticallyShowVideoPictureInPicture]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::fullScreenManager):
        (WebKit::WebPageProxy::playbackSessionManager):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidBecomeActive):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createScrollingCoordinator):
        (WebKit::WebChromeClient::supportsVideoFullscreen):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::inspectorUI):
        (WebKit::WebPage::playbackSessionManager):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:

2016-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Fixing a typo in my last commit.

        Unreviewed build fix.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in:
        * WebProcess/cocoa/WebVideoFullscreenManager.messages.in:

2016-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Missed some macros to fix builds that do not support AVKit.

        Unreviewed build fix.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in:
        * WebProcess/cocoa/WebVideoFullscreenManager.messages.in:

2016-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Fix builds that do not support AVKit

        Unreviewed build fix.

        * UIProcess/WebPageProxy.h:

2016-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Take 2 for fixing builds that do not support AVKit

        Unreviewed build fix.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):

2016-04-22  Anders Carlsson  <andersca@apple.com>

        WKWebView WebSQL is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=156928
        rdar://problem/19029603

        Reviewed by Beth Dakin.

        Give databases a default quota of 50 MB, matching what we have in UIWebView.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::exceededDatabaseQuota):

2016-04-22  Ryan Haddad  <ryanhaddad@apple.com>

        Fix builds that do not support AVKit

        Unreviewed build fix.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::viewDidLeaveWindow):
        * UIProcess/ios/WebPageProxyIOS.mm:

2016-04-22  Brady Eidson  <beidson@apple.com>

        Modern IDB: Rework the ownership/RefCounting model of IDBConnectionToServer and IDBConnectionProxy.
        https://bugs.webkit.org/show_bug.cgi?id=156916

        Reviewed by Tim Horton.

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):

2016-04-22  Zan Dobersek  <zdobersek@igalia.com>

        NetworkCacheIOChannelSoup: detach the newly-created IOChannel::readSync thread
        https://bugs.webkit.org/show_bug.cgi?id=156907

        Reviewed by Carlos Garcia Campos.

        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::IOChannel::readSyncInThread): Detach the new thread,
        ensuring the resources are released after the thread exits. Next step is
        to set up a thread pool and use that, avoiding thread re-creation.

2016-04-21  Dean Jackson  <dino@apple.com>

        Backdrop Filter should not be visible if element has visibility:hidden
        https://bugs.webkit.org/show_bug.cgi?id=149318
        <rdar://problem/22749780>

        Reviewed by Simon Fraser.

        Add the isHidden method to PlatformCALayerRemote.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::isHidden):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2016-04-21  Anders Carlsson  <andersca@apple.com>

        WKWebView HTML5 AppCache not working
        https://bugs.webkit.org/show_bug.cgi?id=156887
        rdar://problem/17944162

        Reviewed by Tim Horton.

        * Shared/WebPreferencesDefinitions.h:
        Set the offlineWebApplicationCacheEnabled property to true by default.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        Set the default applicationCacheFlatFileSubdirectoryName to "Files".

2016-04-21  Anders Carlsson  <andersca@apple.com>

        Get rid of the last uses of ApplicationCacheStorage::singleton() from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=156876

        Reviewed by Tim Horton.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Add and encode and decode a applicationCacheFlatFileSubdirectoryName.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        Set m_applicationCacheFlatFileSubdirectoryName to "ApplicationCache".

        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        Set m_applicationCacheFlatFileSubdirectoryName to "Files".

        (API::ProcessPoolConfiguration::copy):
        Copy m_applicationCacheFlatFileSubdirectoryName.

        * UIProcess/API/APIProcessPoolConfiguration.h:
        Add getter for applicationCacheFlatFileSubdirectoryName.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):
        Initialize applicationCacheFlatFileSubdirectoryName from the process pool configuration.

        (WebKit::WebProcessPool::createNewWebProcess):
        Initialize parameters.applicationCacheFlatFileSubdirectoryName. Remove a call to 
        ApplicationCacheStorage::singleton().setDefaultOriginQuota since it had no effect (it was called in the UI process).

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        Initialize m_applicationCacheFlatFileSubdirectoryName.

        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):
        Pass m_applicationCacheFlatFileSubdirectoryName when creating the application cache storage.

        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Add new members.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Set the application cache storage.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Initialize the application cache storage.

        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::applicationCacheStorage):
        Add new getter.

2016-04-21  Anders Carlsson  <andersca@apple.com>

        Remove two uses of ApplicationCacheStorage::singleton() from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=156873

        Reviewed by Beth Dakin.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearApplicationCache): Deleted.
        * WebProcess/WebProcess.h:

2016-04-21  Beth Dakin  <bdakin@apple.com>

        showCandidates() should take a range and the string should be the whole 
        paragraph
        https://bugs.webkit.org/show_bug.cgi?id=156813
        -and corresponding-
        rdar://problem/25760533

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateWebViewImplAdditions):
        (WebKit::WebViewImpl::showCandidates):
        (WebKit::WebViewImpl::requestCandidatesForSelectionIfNeeded):
        (WebKit::WebViewImpl::handleRequestedCandidates):

2016-04-21  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Allow clients to hide the accessory view on a form input session
        https://bugs.webkit.org/show_bug.cgi?id=155574

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession accessoryViewShouldNotShow]): Getter for accessoryViewShouldNotShow.
        (-[WKFormInputSession setAccessoryViewShouldNotShow:]): Set accessoryViewShouldNotShow and reload input views.
        (-[WKContentView requiresAccessoryView]): If the accessory view should be not be shown, do not require
        the accessory view.

2016-04-21  Chris Dumez  <cdumez@apple.com>

        Drop [UsePointersEvenForNonNullableObjectArguments] from Range
        https://bugs.webkit.org/show_bug.cgi?id=156805

        Reviewed by Youenn Fablet.

        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange setStart:offset:]):
        (-[WKDOMRange setEnd:offset:]):
        (-[WKDOMRange selectNode:]):
        (-[WKDOMRange selectNodeContents:]):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::contentsAsString):

2016-04-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView should claim the contents size as its natural size
        https://bugs.webkit.org/show_bug.cgi?id=156835

        Reviewed by Žan Doberšek.

        And keep claiming 0 as its minimum size since it's scrollable.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didChangeContentSize): Call webkitWebViewBaseSetContentsSize().
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseGetPreferredWidth): Return the contents width as natural width.
        (webkitWebViewBaseGetPreferredHeight): Return the contents height as natural height.
        (webkit_web_view_base_class_init): Add implementations of get_preferred_width/height.
        (webkitWebViewBaseSetContentsSize): Save the contents size.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2016-04-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView should propagate wheel events not handled by the web process
        https://bugs.webkit.org/show_bug.cgi?id=156834

        Reviewed by Žan Doberšek.

        We are currently swallowing all wheel events unconditionally, not allowing applications to handle wheel events
        when not handled by us. Since the GTK+ event propagation system is synchronous, and our events are handled
        asynchronously, we need to do something similar to what we do for key events, not propagate the event the first
        time and if not handled by the web process, re-inject it in the event loop and then just propagate it.

        * Shared/NativeWebWheelEvent.h:
        (WebKit::NativeWebWheelEvent::nativeEvent): Remove useless const.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore): Tell the web view to propagate the next wheel event,
        and re-inject the event not handled by the web process in the event loop.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseScrollEvent): Propagate the event if shouldForwardNextWheelEvent is true.
        (webkitWebViewBaseForwardNextWheelEvent): Set shouldForwardNextWheelEvent to true.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent): Remove ifdef.
        * UIProcess/efl/WebView.h:

2016-04-20  Dustin Falgout  <dustin@falgout.us>

        [GTK] Expose AllowUniversalAccessFromFileURLs preference now that calling localStorage.getItem() results in SecurityError: DOM Exception 18
        
        Reviewed by Michael Catanzaro.
                
        As of r197858 JavaScript loaded in the context of a file scheme url cannot access local storage. That is a major 
        breaking change as many applications that serve files locally rely on having access to local storage. The point  
        of that security fix is to avoid cases of downloaded HTML content (such as e-mail attachments or JS injected
        into local contexts) from having access to your local file system and arbitrary local storage. If you are serving 
        local files in your applications, you can use the WebKitAllowUniversalAccessFromFileURLs preference key to tell 
        Webkit that you are approve of these kinds of interactions.
                                              
        https://bugs.webkit.org/show_bug.cgi?id=156651

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_allow_universal_access_from_file_urls):
        (webkit_settings_set_allow_universal_access_from_file_urls):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:

2016-04-20  Brady Eidson  <beidson@apple.com>

        Modern IDB (Workers): Enable INDEXED_DATABASE_IN_WORKERS compile time flag, but disabled in RuntimeEnabledFeatures.
        https://bugs.webkit.org/show_bug.cgi?id=156782

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:

2016-04-20  Brent Fulgham  <bfulgham@apple.com>

        [WK2][Mac][iOS] WebContent crash when using special file:// URI scheme @ WebKit::resolveSymlinksInPath(WTF::CString const&) + 159
        https://bugs.webkit.org/show_bug.cgi?id=156747
        <rdar://problem/24648176>

        Reviewed by Alexey Proskuryakov.

        FileSystemCF::fileSystemRepresentation return a null string when presented with a file URL that contains embedded nulls. When
        this happens, SandboxExtension::createHandle attempts to pass a null string to 'resolveSymlinksInPath', which attemps to call
        'strrchr' on the null pointer, causing a crash.

        Test: fast/url/file-uri-with-embedded-null-no-crash.html

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::createHandle): If 'fileSystemRepresentation' is null, return early with an error.

2016-04-19  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * CMakeLists.txt:
        Don't compile a file that doesn't exist.
        * PlatformMac.cmake:
        Put the XPCServices in the right place.

2016-04-19  Chris Dumez  <cdumez@apple.com>

        Crash under WebKit::PluginView::pluginSnapshotTimerFired
        https://bugs.webkit.org/show_bug.cgi?id=156754
        <rdar://problem/22566764>

        Reviewed by Beth Dakin.

        Add null check for frame() before trying to access the frame settings,
        similarly to what is done earlier in this function. This fixes a top
        crasher.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginSnapshotTimerFired):

2016-04-19  Dean Jackson  <dino@apple.com>

        New SPI to export a dictionary of runtime features
        https://bugs.webkit.org/show_bug.cgi?id=156645
        <rdar://problem/23621666>

        Reviewed by Anders Carlsson.

        Mark the new SPI as WK_MAC_TBA, WK_IOS_TBA.

        * UIProcess/API/Cocoa/_WKExperimentalFeature.h:

2016-04-19  Dean Jackson  <dino@apple.com>

        New SPI to export a dictionary of runtime features
        https://bugs.webkit.org/show_bug.cgi?id=156645
        <rdar://problem/23621666>

        Post commit follow-up. Darin gave review comments that
        I didn't address in my original commit - I was waiting
        on some advice.

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::isEnabledForFeature): Change the macro
        to generate a static list of function pointers, rather than
        a lot of conditional statements.
        (WebKit::WebPreferences::setEnabledForFeature): Ditto.

2016-04-19  Chris Dumez  <cdumez@apple.com>

        Mark more classes as WTF_MAKE_FAST_ALLOCATED
        https://bugs.webkit.org/show_bug.cgi?id=156732

        Reviewed by Darin Adler.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * Shared/API/Cocoa/RemoteObjectInvocation.h:

2016-04-19  Alex Christensen  <achristensen@webkit.org>

        Build fix.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob):
        result is unused.

2016-04-19  Brady Eidson  <beidson@apple.com>

        Modern IDB: ObjectStore Blob Support.
        https://bugs.webkit.org/show_bug.cgi?id=143193

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob): Don't ASSERT that
          this is the first we've heard of this path - The Connection now remembers all extensions.
        (WebKit::NetworkConnectionToWebProcess::getBlobDataFileReferenceForPath): Don't take - Just get.

2016-04-19  Antti Koivisto  <antti@apple.com>

        Try to fix iOS build.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:

2016-04-19  Commit Queue  <commit-queue@webkit.org>

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

        It broke all EFL layout tests (Requested by KaL on #webkit).

        Reverted changeset:

        "[UNIX] Initialize WebKit before the platform initializations"
        https://bugs.webkit.org/show_bug.cgi?id=156622
        http://trac.webkit.org/changeset/199658

2016-04-18  Alex Christensen  <achristensen@webkit.org>

        Build fix after r199700

        * PlatformMac.cmake:

2016-04-18  Brady Eidson  <beidson@apple.com>

        Modern IDB (Blob support): When reading Blobs from the database, grant the Networking process sandbox access to the files.
        https://bugs.webkit.org/show_bug.cgi?id=156640

        Reviewed by Alex Christensen.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::getSandboxExtensionsForBlobFiles): Utility function to ask the UI process for
          SandboxExtensions for a list of files.
        (WebKit::DatabaseProcess::didGetSandboxExtensionsForBlobFiles): Take the SandboxExtensions from the UI process
          and pass them along to the completion handler.
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseProcess.messages.in:

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didGetRecord): If the value returned from the database doesn't have Blob files,
          pass the result directly on to WebCore. If it does, ask the UI process for SandboxExtensions first.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURLOptionallyFileBacked): Grab the BlobDataFileReference from the 
          NetworkConnectionToWebProcess to pass along to the BlobRegistry.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::preregisterSandboxExtensionsForOptionallyFileBackedBlob): Add this message
          so the WebProcess can preflight the creation of some blob URLs by passing along the SandboxExtensions for their files.
        (WebKit::NetworkConnectionToWebProcess::takeBlobDataFileReferenceForPath):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::getSandboxExtensionsForBlobFiles): Create SandboxExtensions for the passed in files and
          return them to the DatabaseProcess.
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Databases/DatabaseProcessProxy.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::didGetRecordWithSandboxExtensions): New form of "didGetRecord" that handles passing
          the SandboxExtensions to the Networking process before they are needed.
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURLOptionallyFileBacked):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2016-04-18  Dean Jackson  <dino@apple.com>

        New SPI to export a dictionary of runtime features
        https://bugs.webkit.org/show_bug.cgi?id=156645
        <rdar://problem/23621666>

        Trying to fix GTK and EFL builds. I forgot to add files
        to CMake.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2016-04-18  Dean Jackson  <dino@apple.com>

        New SPI to export a dictionary of runtime features
        https://bugs.webkit.org/show_bug.cgi?id=156645
        <rdar://problem/23621666>

        Reviewed by Darin Adler.

        Add a new type of Preference for experimental features so that we
        can dynamically toggle them from a WebKit2 host. These are special
        keys that are tied to runtime flags. The host process can ask WebKit
        for the list of keys, each with a small description, in order to
        display UI.

        - Add HumanReadableName and HumanReadableDescription parameters to our
          macros, which are used when building a ExperimentalFeature.
          These are both empty strings for the existing preferences. At some
          point we should probably move all this to code generation rather
          than macros, so that we don't have to carry around unused parameters.

        - I've included two sample experimental features: WebGL2 and ShadowDOM.
          They are not actually hooked up to the runtime settings yet, but its
          pretty clear how that will happen. Note that these are new preferences
          that have an "Experimental" prefix. This is so toggling an experimental
          feature to off won't cause the feature to not work once it becomes
          stable enough to enable by default. In other words, when it moves
          out of the experimental stage, the experimental feature flag will be
          removed, and you'll no longer check for values with that key.

        - The ExperimentalFeature object is what the host process
          will read in order to show some UI. It contains the human readable info,
          as well as the actual key that can be used to query and toggle the
          experimental feature.

        * Shared/API/APIObject.h: Add the ExperimentalFeature.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject): Exposes a wrapper around a _WKExperimentalFeature ObjC type.

        * Shared/WebPreferencesDefinitions.h: Change all the existing macros to take the new
        parameters, and add the initial experimental keys.

        * Shared/WebPreferencesKeys.cpp: Add new parameters to existing macros.
        * Shared/WebPreferencesKeys.h: Ditto.
        * Shared/WebPreferencesStore.cpp: Ditto.
        (WebKit::defaults):

        * UIProcess/API/APIExperimentalFeature.cpp: The API side of the ExperimentalFeature.
        (API::ExperimentalFeature::create):
        (API::ExperimentalFeature::ExperimentalFeature):
        (API::ExperimentalFeature::~ExperimentalFeature):
        * UIProcess/API/APIExperimentalFeature.h:

        * UIProcess/API/Cocoa/WKPreferences.mm: The actual implementation of the SPI.
        (+[WKPreferences _experimentalFeatures]): Create and return a list of feature descriptors.
        (-[WKPreferences _isEnabledForFeature:]): Get the value.
        (-[WKPreferences _setEnabled:forFeature:]): Set the value.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

        * UIProcess/API/Cocoa/_WKExperimentalFeature.h: The ObjC version.
        * UIProcess/API/Cocoa/_WKExperimentalFeature.mm:
        (-[_WKExperimentalFeature dealloc]):
        (-[_WKExperimentalFeature description]):
        (-[_WKExperimentalFeature name]):
        (-[_WKExperimentalFeature key]):
        (-[_WKExperimentalFeature details]):
        (-[_WKExperimentalFeature _apiObject]):
        * UIProcess/API/Cocoa/_WKExperimentalFeatureInternal.h: Implementation of the wrapper.
        (WebKit::wrapper):

        * UIProcess/WebPreferences.cpp: The C++ implementation that provides the data for the ObjC API.
        (WebKit::globalExperimentalFeatures):
        (WebKit::WebPreferences::ExperimentalFeatures):
        (WebKit::WebPreferences::isEnabledForFeature):
        (WebKit::WebPreferences::setEnabledForFeature):
        * UIProcess/WebPreferences.h:

        * UIProcess/mac/WebPreferencesMac.mm: Update some macros.
        (WebKit::WebPreferences::platformInitializeStore):
        * WebProcess/WebPage/WebPage.cpp: Ditto
        (WebKit::WebPage::updatePreferences):

        * WebKit2.xcodeproj/project.pbxproj: Add the new files.

2016-04-18  Tim Horton  <timothy_horton@apple.com>

        Swipe view gesture should be reversed in right-to-left contexts
        https://bugs.webkit.org/show_bug.cgi?id=156714

        Reviewed by Anders Carlsson.

        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/UserInterfaceLayoutDirection.h: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::userInterfaceLayoutDirection):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::userInterfaceLayoutDirection):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::userInterfaceLayoutDirection):
        Plumb RTL-ness through to WebPageProxy.
        We look at the WK(Web)View's UI layout direction.
        For other platforms, we just assume LTR.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanBecomeSwipe):
        Decide which way to swipe (and which way to look for back-forward items)
        based on the WebPageProxy's reported RTLness.

        (WebKit::ViewGestureController::isPhysicallySwipingLeft):
        "Back" means "swiping left" in LTR and "swiping right" in RTL.

        (WebKit::ViewGestureController::trackSwipeGesture):
        (WebKit::ViewGestureController::determineLayerAdjacentToSnapshotForParent):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::handleSwipeGesture):
        Make things that were equating "back" with "left" instead check isPhysicallySwipingLeft.

2016-04-18  Anders Carlsson  <andersca@apple.com>

        Fix build with newer versions of clang.
        rdar://problem/25749769

        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        Forward declare some AppKit IPI.

2016-04-18  Tina Liu  <iting_liu@apple.com>

        Implement functions to set plug-in load policies for private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=156540

        Reviewed by Anders Carlsson.

        This patch implements API and wrappers for clients to set policies to use when using
        private browsing. WebPlatformStrategies would return which policies to use depending
        on whether the page is in private browsing mode.

        * Shared/WebProcessCreationParameters.h:
        Add a hash map for plug-in load policies for private browsing.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextSetPrivateBrowsingPluginLoadClientPolicy):
        Add a wrapper.

        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        Set the WebProcessCreationParameters's pluginLoadClientPoliciesForPrivateBrowsing.
        (WebKit::WebProcessPool::setPluginLoadClientPolicyForBrowsingMode):
        A helper function that sets plug-in policies to the corresponding instance variable:
        m_pluginLoadClientPolicies for general browsing and m_pluginLoadClientPoliciesForPrivateBrowsing
        for private browsing. The logic is extracted from the original setPluginLoadClientPolicy.
        While we are here, get rid of the .contains() lookup as .get() will just return a
        constructed object if the key is not found.
        (WebKit::WebProcessPool::setPluginLoadClientPolicy):
        Switch to use the helper function to set policies.
        (WebKit::WebProcessPool::setPrivateBrowsingPluginLoadClientPolicy):
        Ditto. Also send a message to the WebProcess for setting policies for private browsing.
        (WebKit::WebProcessPool::clearPluginClientPolicies):
        Clear plug-ins' private browsing policies.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::setPluginLoadClientPolicyForBrowsingMode):
        Ditto as WebProcessPool::setPluginLoadClientPolicyForBrowsingMode.
        (WebKit::WebPlatformStrategies::setPluginLoadClientPolicy):
        Switch to use setPluginLoadClientPolicyForBrowsingMode to set policies.
        (WebKit::WebPlatformStrategies::setPrivateBrowsingPluginLoadClientPolicy):
        Use setPluginLoadClientPolicyForBrowsingMode to set policies for private browsing.
        (WebKit::WebPlatformStrategies::clearPluginClientPolicies):
        Clear plug-ins' private browsing policies.
        (WebKit::WebPlatformStrategies::longestMatchedWildcardHostForHost):
        Add an argument for private browsing. Read from the corresponding ivar.
        (WebKit::WebPlatformStrategies::replaceHostWithMatchedWildcardHost):
        Ditto.
        (WebKit::WebPlatformStrategies::pluginLoadClientPolicyForHost): Deleted.
        Renamed this function as pluginLoadClientPolicyForHostForBrowsingMode.
        (WebKit::WebPlatformStrategies::pluginLoadClientPolicyForHostForBrowsingMode):
        Ditto.
        (WebKit::WebPlatformStrategies::populatePluginCache):
        Get the plug-in load policies for a specific host based on the page's session status. If the page
        is using ephemeral session, use the private browsing policies.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Switch to call the helper function setPluginLoadClientPolicyFromCreationParameters.
        (WebKit::WebProcess::setPluginLoadClientPolicies):
        Logic moved from initializeWebProcess. Call PluginStrategy::setPluginLoadClientPolicy or
        PluginStrategy::setPrivateBrowsingPluginLoadClientPolicy depending on the input argument.
        (WebKit::WebProcess::setPrivateBrowsingPluginLoadClientPolicy):
        Add a wrapper to call PluginStrategy::setPrivateBrowsingPluginLoadClientPolicy.

        * WebProcess/WebProcess.messages.in:
        Declare an entry for setPrivateBrowsingPluginLoadClientPolicy.

2016-04-18  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Only adjust network responses' MIME type for QuickLook in the context of a main resource load
        https://bugs.webkit.org/show_bug.cgi?id=156639
        <rdar://problem/25765848>

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::firstRequest):
        Add getter to return the first request.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        Pass flag to adjustMIMETypeIfNecessary() indicated if this is a main resource load.

2016-04-18  Brian Burg  <bburg@apple.com>

        Web Automation: provide detailed error messages when an automation command fails
        https://bugs.webkit.org/show_bug.cgi?id=156635
        <rdar://problem/25754051>

        Reviewed by Darin Adler and Timothy Hatcher.

        Fill in lots of missing error message details now that the remote end knows
        how to parse error strings with predefined error names and details.

        * UIProcess/Automation/WebAutomationSession.cpp:
        Rearrange the error message macros. Make it possible to pass a ErrorMessage
        variable or just the enum value name and get out an encoded error message
        that optionally includes a free-form details string. The predefined error
        name and the details string are joined together with a semicolon.

        (WebKit::WebAutomationSession::getBrowsingContext):
        (WebKit::WebAutomationSession::createBrowsingContext):
        (WebKit::WebAutomationSession::closeBrowsingContext):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::resizeWindowOfBrowsingContext):
        (WebKit::WebAutomationSession::moveWindowOfBrowsingContext):
        (WebKit::WebAutomationSession::navigateBrowsingContext):
        (WebKit::WebAutomationSession::goBackInBrowsingContext):
        (WebKit::WebAutomationSession::goForwardInBrowsingContext):
        (WebKit::WebAutomationSession::reloadBrowsingContext):
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSession::didEvaluateJavaScriptFunction):
        (WebKit::WebAutomationSession::resolveChildFrameHandle):
        (WebKit::WebAutomationSession::didResolveChildFrame):
        (WebKit::WebAutomationSession::resolveParentFrameHandle):
        (WebKit::WebAutomationSession::didResolveParentFrame):
        (WebKit::WebAutomationSession::computeElementLayout):
        (WebKit::WebAutomationSession::didComputeElementLayout):
        (WebKit::WebAutomationSession::isShowingJavaScriptDialog):
        (WebKit::WebAutomationSession::dismissCurrentJavaScriptDialog):
        (WebKit::WebAutomationSession::acceptCurrentJavaScriptDialog):
        (WebKit::WebAutomationSession::messageOfCurrentJavaScriptDialog):
        (WebKit::WebAutomationSession::setUserInputForCurrentJavaScriptPrompt):
        (WebKit::WebAutomationSession::getAllCookies):
        (WebKit::WebAutomationSession::didGetCookiesForFrame):
        (WebKit::WebAutomationSession::deleteSingleCookie):
        (WebKit::WebAutomationSession::didDeleteCookie):
        (WebKit::WebAutomationSession::addSingleCookie):
        (WebKit::WebAutomationSession::deleteAllCookies):
        (WebKit::WebAutomationSession::performMouseInteraction):
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        (WebKit::WebAutomationSession::takeScreenshot):
        (WebKit::WebAutomationSession::didTakeScreenshot):
        Audit almost all early exits and provide a relevant error details message
        if the error itself is ambiguous. Make sure to format asynchronous errors.

2016-04-18  Brent Fulgham  <bfulgham@apple.com>

        CSP: Remove stubs for dynamically-added favicons (via link rel="icon")
        https://bugs.webkit.org/show_bug.cgi?id=153151
        <rdar://problem/24383176>

        Reviewed by Darin Adler.

        Remove the unused dynamic favicon code and tests.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidChangeIcons): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2016-04-18  Jer Noble  <jer.noble@apple.com>

        REGRESSION( r199603): Pandora crashes WebKit in WebPlaybackSessionManager::removeClientForContext
        https://bugs.webkit.org/show_bug.cgi?id=156648

        Reviewed by Darin Adler.

        Follow up patch to r199615; avoid a double hash lookup by using a .find() pattern instead of
        .contains() & .get().

        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionManager::setUpPlaybackControlsManager):
        (WebKit::WebPlaybackSessionManager::clearPlaybackControlsManager):

2016-04-18  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r199644.

        Seems to have caused a 1-2% regression on warm PLT

        Reverted changeset:

        "[WK2][iOS] Do not dlopen() QuickLook in the NetworkProcess"
        https://bugs.webkit.org/show_bug.cgi?id=156639
        http://trac.webkit.org/changeset/199644

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Pending API Request URL is wrong after reloading
        https://bugs.webkit.org/show_bug.cgi?id=139342

        Reviewed by Darin Adler.

        It happens when reloading a web view loaded with anything but a
        URL, because the bf list is not updated for those cases and
        WebPageProxy::reload() is setting the current bf list item URL as
        pending API request URL. This also causes that progress is
        reported wrongly, because
        WebPageProxy::decidePolicyForNavigationAction() resets the pending
        API request URL when it's different than the requested URL. The
        page load transaction causes the progress to be changed, reporting
        1.0 (the previous one), but later something < 1.0 is reported
        again by the progress tracker.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reload): Use the current active URL as
        pending API request URL, falling back to the current bf list item
        URL when empty.

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Pending API request URL no set when loading Data, Alternate HTML or plain text
        https://bugs.webkit.org/show_bug.cgi?id=136916

        Reviewed by Darin Adler.

        Set pending API request URL for all load methods in
        WebPageProxy. This ensures that right after calling those methods,
        the active URL is the requested one and that
        PageLoadState::isLoading() returns true.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        (WebKit::WebPageProxy::loadPlainTextString):
        (WebKit::WebPageProxy::loadWebArchiveData):

2016-04-18  Commit Queue  <commit-queue@webkit.org>

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

        It broke the iOS build (Requested by KaL on #webkit).

        Reverted changeset:

        "Pending API request URL no set when loading Data, Alternate
        HTML or plain text"
        https://bugs.webkit.org/show_bug.cgi?id=136916
        http://trac.webkit.org/changeset/199660

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Pending API request URL no set when loading Data, Alternate HTML or plain text
        https://bugs.webkit.org/show_bug.cgi?id=136916

        Reviewed by Darin Adler.

        Set pending API request URL for all load methods in
        WebPageProxy. This ensures that right after calling those methods,
        the active URL is the requested one and that
        PageLoadState::isLoading() returns true.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        (WebKit::WebPageProxy::loadPlainTextString):
        (WebKit::WebPageProxy::loadWebArchiveData):

2016-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] Initialize WebKit before the platform initializations
        https://bugs.webkit.org/show_bug.cgi?id=156622

        Reviewed by Michael Catanzaro.

        The platform specific initialization might use something that would require WebKit2 to be initialized. For
        example, in debug mode, the GTK+ port uses WTF::sleep that requires the threading to be initialized.

        * Shared/unix/ChildProcessMain.h:
        (WebKit::ChildProcessMain): Move InitializeWebKit2() before platformInitialize().

2016-04-18  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        Fix incorrect assumption that APPLE implies Mac.
        https://bugs.webkit.org/show_bug.cgi?id=156679

        Addresses build failure introduced in r198947

        Reviewed by Alex Christensen.

        * CMakeLists.txt:

2016-04-17  Yoav Weiss  <yoav@yoav.ws>

        Initial Link preload support
        https://bugs.webkit.org/show_bug.cgi?id=156334

        Reviewed by Darin Adler.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime): Added LinkPreload as a possible CachedResource::type.

2016-04-17  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Do not dlopen() QuickLook in the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=156639

        Reviewed by Darin Adler.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):
        Move checks for main resource load and for MIME type inside of
        QuickLookHandle::createIfNecessary(), for consistency with the
        other QuickLookHandle factory functions.

2016-04-16  Dan Bernstein  <mitz@apple.com>

        [Mac] Web Content service with a restricted entitlement may load arbitrary dylibs
        https://bugs.webkit.org/show_bug.cgi?id=156668
        <rdar://problem/25429784>

        Reviewed by Anders Carlsson.

        * Configurations/WebContentService.xcconfig: Enable library validation when the Web Content
          service is given the XPC domain extension entitlement.

2016-04-15  Dan Bernstein  <mitz@apple.com>

        [Mac] WebContent, Networking and Databases services have i386 slices that are never used
        https://bugs.webkit.org/show_bug.cgi?id=156654

        Reviewed by Alexey Proskuryakov.

        * Configurations/BaseXPCService.xcconfig: Set VALID_ARCHS to ARCHS_STANDARD when not building only
          for the active architecture.
        * Configurations/PluginService.32.xcconfig: Removed now-redundant definitions.
        * Configurations/PluginService.64.xcconfig: Ditto.

2016-04-15  Sam Weinig  <sam@webkit.org>

        Need a way to specify a script name to show in the inspector for scripts injected via WKUserScript
        <rdar://problem/25626662>
        https://bugs.webkit.org/show_bug.cgi?id=156653

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:associatedURL:userContentWorld:]):
        * UIProcess/API/Cocoa/WKUserScriptPrivate.h:
        Add a new initializer that takes an associate URL that is used to represent the user script.

2016-04-15  Darin Adler  <darin@apple.com>

        Reduce use of Deprecated::ScriptXXX classes
        https://bugs.webkit.org/show_bug.cgi?id=156632

        Reviewed by Alex Christensen.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest): Use JSValue.
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::windowObjectCleared): Use references.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame): Use JSValue.

2016-04-15  Jer Noble  <jer.noble@apple.com>

        REGRESSION( r199603): Pandora crashes WebKit in WebPlaybackSessionManager::removeClientForContext
        https://bugs.webkit.org/show_bug.cgi?id=156648
        <rdar://problem/25758117>

        Reviewed by Beth Dakin.

        Mistakenly checked in a reversed condition check, which causes a subsequent assert and crash.

        * WebProcess/cocoa/WebPlaybackSessionManager.mm:
        (WebKit::WebPlaybackSessionManager::clearPlaybackControlsManager):

2016-04-15  Chris Dumez  <cdumez@apple.com>

        Mark NetworkLoad as FastAllocated
        https://bugs.webkit.org/show_bug.cgi?id=156628

        Reviewed by Alex Christensen.

        Mark NetworkLoad as FastAllocated for performance.

        * NetworkProcess/NetworkLoad.h:

2016-04-14  Jer Noble  <jer.noble@apple.com>

        Allow WebVideoFullscreenManager and Proxy to be used by audio elements.
        https://bugs.webkit.org/show_bug.cgi?id=156564

        Reviewed by Beth Dakin.

        Tease apart WebVideoFullscreenManager and …Proxy into WebPlaybackSessionManager and …Proxy
        classes dealing exclusively with playback state and commands, leaving fullscreen state and
        commands in the WebVideoFullscreenManager… classes.

        WebVideoFullscreenManager and …Proxy will now require an associated
        WebPlaybackSessionManager and …Proxy class. The WebPlaybackSessionManager classes can be
        used separately and without the WebVideoFullscreenManager classes.

        * DerivedSources.make:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mayAutomaticallyShowVideoPictureInPicture]):
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.h: Copied from Source/WebKit2/UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h.
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.messages.in: Copied from Source/WebKit2/UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in.
        * UIProcess/Cocoa/WebPlaybackSessionManagerProxy.mm: Added.
        (WebKit::WebPlaybackSessionModelContext::play):
        (WebKit::WebPlaybackSessionModelContext::pause):
        (WebKit::WebPlaybackSessionModelContext::togglePlayState):
        (WebKit::WebPlaybackSessionModelContext::beginScrubbing):
        (WebKit::WebPlaybackSessionModelContext::endScrubbing):
        (WebKit::WebPlaybackSessionModelContext::seekToTime):
        (WebKit::WebPlaybackSessionModelContext::fastSeek):
        (WebKit::WebPlaybackSessionModelContext::beginScanningForward):
        (WebKit::WebPlaybackSessionModelContext::beginScanningBackward):
        (WebKit::WebPlaybackSessionModelContext::endScanning):
        (WebKit::WebPlaybackSessionModelContext::selectAudioMediaOption):
        (WebKit::WebPlaybackSessionModelContext::selectLegibleMediaOption):
        (WebKit::WebPlaybackSessionManagerProxy::create):
        (WebKit::WebPlaybackSessionManagerProxy::WebPlaybackSessionManagerProxy):
        (WebKit::WebPlaybackSessionManagerProxy::~WebPlaybackSessionManagerProxy):
        (WebKit::WebPlaybackSessionManagerProxy::invalidate):
        (WebKit::WebPlaybackSessionManagerProxy::createModelAndInterface):
        (WebKit::WebPlaybackSessionManagerProxy::ensureModelAndInterface):
        (WebKit::WebPlaybackSessionManagerProxy::ensureModel):
        (WebKit::WebPlaybackSessionManagerProxy::ensureInterface):
        (WebKit::WebPlaybackSessionManagerProxy::addClientForContext):
        (WebKit::WebPlaybackSessionManagerProxy::removeClientForContext):
        (WebKit::WebPlaybackSessionManagerProxy::setUpPlaybackControlsManagerWithID):
        (WebKit::WebPlaybackSessionManagerProxy::clearPlaybackControlsManager):
        (WebKit::WebPlaybackSessionManagerProxy::resetMediaState):
        (WebKit::WebPlaybackSessionManagerProxy::setCurrentTime):
        (WebKit::WebPlaybackSessionManagerProxy::setBufferedTime):
        (WebKit::WebPlaybackSessionManagerProxy::setSeekableRangesVector):
        (WebKit::WebPlaybackSessionManagerProxy::setCanPlayFastReverse):
        (WebKit::WebPlaybackSessionManagerProxy::setAudioMediaSelectionOptions):
        (WebKit::WebPlaybackSessionManagerProxy::setLegibleMediaSelectionOptions):
        (WebKit::WebPlaybackSessionManagerProxy::setExternalPlaybackProperties):
        (WebKit::WebPlaybackSessionManagerProxy::setWirelessVideoPlaybackDisabled):
        (WebKit::WebPlaybackSessionManagerProxy::setDuration):
        (WebKit::WebPlaybackSessionManagerProxy::setRate):
        (WebKit::WebPlaybackSessionManagerProxy::play):
        (WebKit::WebPlaybackSessionManagerProxy::pause):
        (WebKit::WebPlaybackSessionManagerProxy::togglePlayState):
        (WebKit::WebPlaybackSessionManagerProxy::beginScrubbing):
        (WebKit::WebPlaybackSessionManagerProxy::endScrubbing):
        (WebKit::WebPlaybackSessionManagerProxy::seekToTime):
        (WebKit::WebPlaybackSessionManagerProxy::fastSeek):
        (WebKit::WebPlaybackSessionManagerProxy::beginScanningForward):
        (WebKit::WebPlaybackSessionManagerProxy::beginScanningBackward):
        (WebKit::WebPlaybackSessionManagerProxy::endScanning):
        (WebKit::WebPlaybackSessionManagerProxy::selectAudioMediaOption):
        (WebKit::WebPlaybackSessionManagerProxy::selectLegibleMediaOption):
        (WebKit::WebPlaybackSessionManagerProxy::controlsManagerInterface):
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenModelContext::WebVideoFullscreenModelContext):
        (WebKit::WebVideoFullscreenModelContext::~WebVideoFullscreenModelContext):
        (WebKit::WebVideoFullscreenModelContext::play):
        (WebKit::WebVideoFullscreenModelContext::pause):
        (WebKit::WebVideoFullscreenModelContext::togglePlayState):
        (WebKit::WebVideoFullscreenModelContext::beginScrubbing):
        (WebKit::WebVideoFullscreenModelContext::endScrubbing):
        (WebKit::WebVideoFullscreenModelContext::seekToTime):
        (WebKit::WebVideoFullscreenModelContext::fastSeek):
        (WebKit::WebVideoFullscreenModelContext::beginScanningForward):
        (WebKit::WebVideoFullscreenModelContext::beginScanningBackward):
        (WebKit::WebVideoFullscreenModelContext::endScanning):
        (WebKit::WebVideoFullscreenModelContext::selectAudioMediaOption):
        (WebKit::WebVideoFullscreenModelContext::selectLegibleMediaOption):
        (WebKit::WebVideoFullscreenManagerProxy::create):
        (WebKit::WebVideoFullscreenManagerProxy::WebVideoFullscreenManagerProxy):
        (WebKit::WebVideoFullscreenManagerProxy::createModelAndInterface):
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::setVideoDimensions): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::exitFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::cleanupFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::preparedToReturnToInline): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::requestFullscreenMode): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::didSetupFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::didEnterFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::didCleanupFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::playbackSessionManager):
        (WebKit::WebPageProxy::videoFullscreenManager):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::hasActiveVideoForControlsManager):
        (WebKit::WebPageProxy::isPlayingMediaDidChange): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::supportsVideoFullscreen):
        (WebKit::WebChromeClient::setUpPlaybackControlsManager):
        (WebKit::WebChromeClient::clearPlaybackControlsManager):
        (WebKit::WebChromeClient::enterVideoFullscreenForVideoElement):
        (WebKit::WebChromeClient::exitVideoFullscreenForVideoElement):
        (WebKit::WebChromeClient::exitVideoFullscreenToModeWithoutAnimation):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::playbackSessionManager):
        (WebKit::WebPage::videoFullscreenManager):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/cocoa/WebPlaybackSessionManager.h: Copied from Source/WebKit2/WebProcess/cocoa/WebVideoFullscreenManager.h.
        (WebKit::WebPlaybackSessionInterfaceContext::create):
        (WebKit::WebPlaybackSessionInterfaceContext::invalidate):
        * WebProcess/cocoa/WebPlaybackSessionManager.messages.in: Added.
        * WebProcess/cocoa/WebPlaybackSessionManager.mm: Added.
        (WebKit::nextContextId):
        (WebKit::WebPlaybackSessionInterfaceContext::WebPlaybackSessionInterfaceContext):
        (WebKit::WebPlaybackSessionInterfaceContext::~WebPlaybackSessionInterfaceContext):
        (WebKit::WebPlaybackSessionInterfaceContext::resetMediaState):
        (WebKit::WebPlaybackSessionInterfaceContext::setDuration):
        (WebKit::WebPlaybackSessionInterfaceContext::setCurrentTime):
        (WebKit::WebPlaybackSessionInterfaceContext::setBufferedTime):
        (WebKit::WebPlaybackSessionInterfaceContext::setRate):
        (WebKit::WebPlaybackSessionInterfaceContext::setSeekableRanges):
        (WebKit::WebPlaybackSessionInterfaceContext::setCanPlayFastReverse):
        (WebKit::WebPlaybackSessionInterfaceContext::setAudioMediaSelectionOptions):
        (WebKit::WebPlaybackSessionInterfaceContext::setLegibleMediaSelectionOptions):
        (WebKit::WebPlaybackSessionInterfaceContext::setExternalPlayback):
        (WebKit::WebPlaybackSessionInterfaceContext::setWirelessVideoPlaybackDisabled):
        (WebKit::WebPlaybackSessionManager::create):
        (WebKit::WebPlaybackSessionManager::WebPlaybackSessionManager):
        (WebKit::WebPlaybackSessionManager::~WebPlaybackSessionManager):
        (WebKit::WebPlaybackSessionManager::createModelAndInterface):
        (WebKit::WebPlaybackSessionManager::ensureModelAndInterface):
        (WebKit::WebPlaybackSessionManager::ensureModel):
        (WebKit::WebPlaybackSessionManager::ensureInterface):
        (WebKit::WebPlaybackSessionManager::removeContext):
        (WebKit::WebPlaybackSessionManager::addClientForContext):
        (WebKit::WebPlaybackSessionManager::removeClientForContext):
        (WebKit::WebPlaybackSessionManager::setUpPlaybackControlsManager):
        (WebKit::WebPlaybackSessionManager::clearPlaybackControlsManager):
        (WebKit::WebPlaybackSessionManager::contextIdForMediaElement):
        (WebKit::WebPlaybackSessionManager::resetMediaState):
        (WebKit::WebPlaybackSessionManager::setDuration):
        (WebKit::WebPlaybackSessionManager::setCurrentTime):
        (WebKit::WebPlaybackSessionManager::setBufferedTime):
        (WebKit::WebPlaybackSessionManager::setRate):
        (WebKit::WebPlaybackSessionManager::setSeekableRanges):
        (WebKit::WebPlaybackSessionManager::setCanPlayFastReverse):
        (WebKit::WebPlaybackSessionManager::setAudioMediaSelectionOptions):
        (WebKit::WebPlaybackSessionManager::setLegibleMediaSelectionOptions):
        (WebKit::WebPlaybackSessionManager::setExternalPlayback):
        (WebKit::WebPlaybackSessionManager::setWirelessVideoPlaybackDisabled):
        (WebKit::WebPlaybackSessionManager::play):
        (WebKit::WebPlaybackSessionManager::pause):
        (WebKit::WebPlaybackSessionManager::togglePlayState):
        (WebKit::WebPlaybackSessionManager::beginScrubbing):
        (WebKit::WebPlaybackSessionManager::endScrubbing):
        (WebKit::WebPlaybackSessionManager::seekToTime):
        (WebKit::WebPlaybackSessionManager::fastSeek):
        (WebKit::WebPlaybackSessionManager::beginScanningForward):
        (WebKit::WebPlaybackSessionManager::beginScanningBackward):
        (WebKit::WebPlaybackSessionManager::endScanning):
        (WebKit::WebPlaybackSessionManager::selectAudioMediaOption):
        (WebKit::WebPlaybackSessionManager::selectLegibleMediaOption):
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        (WebKit::WebVideoFullscreenInterfaceContext::create):
        * WebProcess/cocoa/WebVideoFullscreenManager.messages.in:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenInterfaceContext::WebVideoFullscreenInterfaceContext):
        (WebKit::WebVideoFullscreenInterfaceContext::resetMediaState):
        (WebKit::WebVideoFullscreenInterfaceContext::setDuration):
        (WebKit::WebVideoFullscreenInterfaceContext::setCurrentTime):
        (WebKit::WebVideoFullscreenInterfaceContext::setBufferedTime):
        (WebKit::WebVideoFullscreenInterfaceContext::setRate):
        (WebKit::WebVideoFullscreenInterfaceContext::setSeekableRanges):
        (WebKit::WebVideoFullscreenInterfaceContext::setCanPlayFastReverse):
        (WebKit::WebVideoFullscreenInterfaceContext::setAudioMediaSelectionOptions):
        (WebKit::WebVideoFullscreenInterfaceContext::setLegibleMediaSelectionOptions):
        (WebKit::WebVideoFullscreenInterfaceContext::setExternalPlayback):
        (WebKit::WebVideoFullscreenInterfaceContext::setWirelessVideoPlaybackDisabled):
        (WebKit::WebVideoFullscreenManager::create):
        (WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager):
        (WebKit::WebVideoFullscreenManager::createModelAndInterface):
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement):
        (WebKit::WebVideoFullscreenInterfaceContext::setVideoDimensions): Deleted.
        (WebKit::WebVideoFullscreenManager::~WebVideoFullscreenManager): Deleted.
        (WebKit::WebVideoFullscreenManager::ensureModelAndInterface): Deleted.
        (WebKit::WebVideoFullscreenManager::exitVideoFullscreenToModeWithoutAnimation): Deleted.
        (WebKit::WebVideoFullscreenManager::setVideoDimensions): Deleted.
        (WebKit::WebVideoFullscreenManager::requestFullscreenMode): Deleted.
        (WebKit::WebVideoFullscreenManager::fullscreenModeChanged): Deleted.
        (WebKit::WebVideoFullscreenManager::didSetupFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManager::didEnterFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManager::didExitFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManager::didCleanupFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManager::setVideoLayerGravityEnum): Deleted.
        (WebKit::WebVideoFullscreenManager::fullscreenMayReturnToInline): Deleted.
        (WebKit::WebVideoFullscreenManager::setVideoLayerFrameFenced): Deleted.

2016-04-15  John Wilander  <wilander@apple.com>

        Refactor WebSockets handshake to use StringView instead of String for header validation.
        https://bugs.webkit.org/show_bug.cgi?id=155602

        Reviewed by Darin Adler.

        * UIProcess/InspectorServer/HTTPRequest.cpp:
        (WebKit::HTTPRequest::parseHeaders):
            Now declares the HTTP header name as a StringView to match the change in WebCore::parseHTTPHeader.

2016-04-15  Alex Christensen  <achristensen@webkit.org>

        Don't copy entire NSURLSessionConfiguration just to test for credentials
        https://bugs.webkit.org/show_bug.cgi?id=156598

        Reviewed by Brady Eidson.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate initWithNetworkSession:withCredentials:]):
        (-[WKNetworkSessionDelegate URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:]):
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        (WebKit::NetworkSession::NetworkSession):
        (-[WKNetworkSessionDelegate initWithNetworkSession:]): Deleted.

2016-04-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r199558.

        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (webkitFileChooserRequestCreate):
        (webkit_file_chooser_request_select_files):
        * UIProcess/API/gtk/WebKitFileChooserRequestPrivate.h:
        * UIProcess/API/gtk/WebKitUIClient.cpp:

2016-04-14  Brent Fulgham  <bfulgham@apple.com>

        Make <a download> a runtime enabled option
        https://bugs.webkit.org/show_bug.cgi?id=156583
        <rdar://problem/25733449>

        Reviewed by Alex Christensen.

        Add a download attribute runtime flag based on preferences.
        Disable the download attribute by default.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetFetchAPIEnabled):
        (WKPreferencesSetDownloadAttributeEnabled):
        (WKPreferencesGetDownloadAttributeEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-04-14  Alex Christensen  <achristensen@webkit.org>

        Build fix after r199554.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2016-04-14  Brian Burg  <bburg@apple.com>

        Web Automation: suppress automatic text correction in pages controlled by automation
        https://bugs.webkit.org/show_bug.cgi?id=156599
        <rdar://problem/25712646>

        Reviewed by Timothy Hatcher.

        If the page is controlled by automation, then automatic text corrections will
        cause unexpected behaviors by nondeterministically modifying text inserted by
        a test. Just pretend these behaviors are disabled if controlled by automation.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::isAutomaticQuoteSubstitutionEnabled):
        (WebKit::WebEditorClient::isAutomaticDashSubstitutionEnabled):
        (WebKit::WebEditorClient::isAutomaticTextReplacementEnabled):
        (WebKit::WebEditorClient::isAutomaticSpellingCorrectionEnabled):

2016-04-14  Anders Carlsson  <andersca@apple.com>

        Try to fix the Yosemite build.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::runOpenPanel):

2016-04-14  Anders Carlsson  <andersca@apple.com>

        [Mac] Add API for open panel handling to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=137759
        rdar://problem/23278623

        Reviewed by Tim Horton.

        Based on a patch by Brian Michel.

        * Shared/API/Cocoa/WebKit.h:
        Import WKOpenPanelParameters.h.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Create a WKOpenPanelParameters for Type::OpenPanelParameters.

        * UIProcess/API/APIOpenPanelParameters.cpp: Renamed from Source/WebKit2/Shared/WebOpenPanelParameters.cpp.
        * UIProcess/API/APIOpenPanelParameters.h: Renamed from Source/WebKit2/Shared/WebOpenPanelParameters.h.
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::runOpenPanel):
        Change this to take a SecurityOriginData.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKOpenPanelParametersRef.cpp:
        (WKOpenPanelParametersGetTypeID):
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * UIProcess/API/C/WKOpenPanelResultListener.cpp:
        (filePathsFromFileURLs):
        (WKOpenPanelResultListenerChooseFiles):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        Change chooseFiles to take a Vector<String> instead of an API::Array of URLs.

        * UIProcess/API/Cocoa/WKOpenPanelParameters.h: Added.
        * UIProcess/API/Cocoa/WKOpenPanelParameters.mm: Added.
        (-[WKOpenPanelParameters allowsMultipleSelection]):
        (-[WKOpenPanelParameters _apiObject]):
        * UIProcess/API/Cocoa/WKOpenPanelParametersInternal.h:
        Add a WKOpenPanelParameters class which contains information about a file upload control.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        Add new delegate method.

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        Record whether the UI delegate implements the new delegate method.

        (WebKit::UIDelegate::UIClient::runOpenPanel):
        Invoke the new delegate method.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::handleRunOpenPanel):
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * UIProcess/WebOpenPanelResultListenerProxy.cpp:
        (WebKit::WebOpenPanelResultListenerProxy::chooseFiles):
        * UIProcess/WebOpenPanelResultListenerProxy.h:
        Change chooseFiles to take a Vector<String> instead of an API::Array of URLs.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runOpenPanel):
        * UIProcess/WebPageProxy.h:
        Change this to take a SecurityOriginData.

        * UIProcess/WebPageProxy.messages.in:
        Change RunOpenPanel to take a SecurityOriginData.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::handleRunOpenPanel):
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showRunOpenPanel:resultListener:]):
        Change chooseFiles to take a Vector<String> instead of an API::Array of URLs.

        * UIProcess/ios/forms/WKFileUploadPanel.h:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _chooseFiles:displayString:iconImage:]):
        Change chooseFiles to take a Vector<String> instead of an API::Array of URLs.

        (-[WKFileUploadPanel presentWithParameters:resultListener:]):
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new file.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runOpenPanel):
        Pass the security origin of the frame along.

2016-04-14  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, rolling out r199554.

        The change breaks Yosemite Release/Debug build

        Reverted changeset:

        "[Mac] Add API for open panel handling to WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=137759
        http://trac.webkit.org/changeset/199554

2016-04-14  Anders Carlsson  <andersca@apple.com>

        [Mac] Add API for open panel handling to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=137759
        rdar://problem/23278623

        Reviewed by Tim Horton.

        Based on a patch by Brian Michel.

        * Shared/API/Cocoa/WebKit.h:
        Import WKOpenPanelParameters.h.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Create a WKOpenPanelParameters for Type::OpenPanelParameters.

        * UIProcess/API/APIOpenPanelParameters.cpp: Renamed from Source/WebKit2/Shared/WebOpenPanelParameters.cpp.
        * UIProcess/API/APIOpenPanelParameters.h: Renamed from Source/WebKit2/Shared/WebOpenPanelParameters.h.
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::runOpenPanel):
        Change this to take a SecurityOriginData.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKOpenPanelParametersRef.cpp:
        (WKOpenPanelParametersGetTypeID):
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * UIProcess/API/C/WKOpenPanelResultListener.cpp:
        (filePathsFromFileURLs):
        (WKOpenPanelResultListenerChooseFiles):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        Change chooseFiles to take a Vector<String> instead of an API::Array of URLs.

        * UIProcess/API/Cocoa/WKOpenPanelParameters.h: Added.
        * UIProcess/API/Cocoa/WKOpenPanelParameters.mm: Added.
        (-[WKOpenPanelParameters allowsMultipleSelection]):
        (-[WKOpenPanelParameters _apiObject]):
        * UIProcess/API/Cocoa/WKOpenPanelParametersInternal.h:
        Add a WKOpenPanelParameters class which contains information about a file upload control.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        Add new delegate method.

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        Record whether the UI delegate implements the new delegate method.

        (WebKit::UIDelegate::UIClient::runOpenPanel):
        Invoke the new delegate method.

        * UIProcess/PageClient.h:
        (WebKit::PageClient::handleRunOpenPanel):
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * UIProcess/WebOpenPanelResultListenerProxy.cpp:
        (WebKit::WebOpenPanelResultListenerProxy::chooseFiles):
        * UIProcess/WebOpenPanelResultListenerProxy.h:
        Change chooseFiles to take a Vector<String> instead of an API::Array of URLs.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runOpenPanel):
        * UIProcess/WebPageProxy.h:
        Change this to take a SecurityOriginData.

        * UIProcess/WebPageProxy.messages.in:
        Change RunOpenPanel to take a SecurityOriginData.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::handleRunOpenPanel):
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showRunOpenPanel:resultListener:]):
        Change chooseFiles to take a Vector<String> instead of an API::Array of URLs.

        * UIProcess/ios/forms/WKFileUploadPanel.h:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _chooseFiles:displayString:iconImage:]):
        Change chooseFiles to take a Vector<String> instead of an API::Array of URLs.

        (-[WKFileUploadPanel presentWithParameters:resultListener:]):
        Rename WebKit::WebOpenPanelParameters to API::OpenPanelParameters.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new file.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runOpenPanel):
        Pass the security origin of the frame along.

2016-04-14  Alex Christensen  <achristensen@webkit.org>

        Fix build without IndexedDB.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
        (WebKit::DatabaseProcess::grantSandboxExtensionsForBlobs):
        (WebKit::DatabaseProcess::prepareForAccessToTemporaryFile):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseProcess.messages.in:

2016-04-13  Daniel Bates  <dabates@apple.com>

        REGRESSION (r199401): Internal builds of Safari hang on launch
        https://bugs.webkit.org/show_bug.cgi?id=156545
        <rdar://problem/25697779>

        As pointed out by Darin Adler, remove RELEASE_ASSERT() that I inadvertently left in
        WebCore::secCodeForProcess() as part of r199504. For now, we handle
        SecCodeCopyGuestWithAttributes() returning an error. In a subsequent commit we will
        look to re-introduce the use of a RELEASE_ASSERT() to enforce the invariant that
        SecCodeCopyGuestWithAttributes() returns a success status.

        * Shared/mac/CodeSigning.mm:
        (WebKit::secCodeForProcess):

2016-04-13  Brady Eidson  <beidson@apple.com>

        Modern IDB (Blob support): Support retrieving Blobs from IDB.
        https://bugs.webkit.org/show_bug.cgi?id=156367

        Reviewed by Alex Christensen.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURLOptionallyFileBacked):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLOptionallyFileBacked):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURLOptionallyFileBacked):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2016-04-13  Chris Dumez  <cdumez@apple.com>

        We should not speculatively revalidate cached redirects
        https://bugs.webkit.org/show_bug.cgi?id=156548
        <rdar://problem/25583886>

        Reviewed by Darin Adler.

        Stop speculatively revalidating cached redirects. This matches matches
        the behavior in NetworkCache's makeUseDecision() which reuses cached
        redirects only if they do not need revalidation.

        This was breaking fonts.css loading on stripe.com because the
        SpeculativeLoadManager would wrongly speculatively revalidate the
        redirect and then serve a 302 response the NetworkResourceLoader
        when the actual request came in. This would cause us to not follow
        the redirect.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):
        Abort the speculative load if it hits a redirect. This is the safe thing
        to do in this case, as we are supposed to do a hand-shake with WebCore
        in such case.

        (WebKit::NetworkCache::SpeculativeLoad::didReceiveResponse):
        Let successful validations fall through instead of calling didComplete()
        early. This matches what is not in NetworkResourceLoader. This way,
        didFinishLoading() ends up getting called for both successful and
        unsuccessful (i.e. did not return a 302 status code) network validation.

        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        - Stop dealing with redirects as we abort the load as soon as we hit a
          redirect now.
        - Stop asserting that m_cacheEntryForValidation is null now that this
          is called for successful validations as well.

        (WebKit::NetworkCache::SpeculativeLoad::abort):
        New method that aborts the network loads, calls the completion handler
        and clean up. It is called in the case we hit a redirect while
        revalidating.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        Drop m_redirectChainCacheStatus member as we no longer deal with
        redirects.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage):
        If the resource needs revalidation AND is a cached redirect, then do not
        use it. This matches what is done in NetworkCache's makeUseDecision().

2016-04-13  Brady Eidson  <beidson@apple.com>

        Modern IDB: NetworkProcessConnection::didClose needs to have a self ref.
        <rdar://problem/25700864> and https://bugs.webkit.org/show_bug.cgi?id=156559

        Reviewed by Alex Christensen.

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didClose): Self ref to protect this.

2016-04-13  Daniel Bates  <dabates@apple.com>

        REGRESSION (r199401): Internal builds of Safari hang on launch
        https://bugs.webkit.org/show_bug.cgi?id=156545
        <rdar://problem/25697779>

        Reviewed by Anders Carlsson.

        For some reason SecCodeCopyGuestWithAttributes() is failing with an error in Apple Internal
        Safari builds. For now, temporarily allow the failure while I investigate the cause in
        <rdar://problem/25706517>.

        * Shared/mac/CodeSigning.mm:
        (WebKit::secCodeForProcess): Log the failure with OSStatus code and return nullptr;
        (WebKit::codeSigningIdentifierForProcess): Return a null string if secCodeForProcess() returns a nullptr.
        This will cause us to treat affected Apple Internal Safari builds the same as we would treat
        an unsigned or third-party signed app.

2016-04-13  Alex Christensen  <achristensen@webkit.org>

        Fix client certificate authentication with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=156527
        <rdar://problem/25489156>

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        We only want to use serverTrustCredential for ServerTrustEvaluation authentication challenges, not 
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::tryUseCertificateInfoForChallenge):
        (WebKit::AuthenticationManager::useCredentialForSingleChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/mac/AuthenticationManager.mac.mm:
        (WebKit::AuthenticationManager::tryUseCertificateInfoForChallenge):
        Don't use challenge.sender with NSURLSession, which requires callbacks instead.

2016-04-12  Daniel Bates  <dabates@apple.com>

        REGRESSION (r198933): Unable to login to Google account from Internet Accounts preference pane
        https://bugs.webkit.org/show_bug.cgi?id=156447
        <rdar://problem/25628133>

        Reviewed by Darin Adler.

        Reverts the workaround landed in r199301 and teaches ProcessLauncherMac to use the code
        signing identifier of the UI process as the client-identifier if it is signed. Otherwise,
        we fall back to using the main bundle identifier or _NSGetProgname() depending on whether
        the UI process has an associated app bundle.

        * PlatformMac.cmake: Add file Shared/mac/CodeSigning.mm.
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):
        (WebKit::codeSigningIdentifierForProcess): Deleted; moved from here to file Shared/mac/CodeSigning.mm.
        * Shared/mac/CodeSigning.h: Added.
        * Shared/mac/CodeSigning.mm: Added.
        (WebKit::secCodeForCurrentProcess): Added.
        (WebKit::secCodeForProcess): Added.
        (WebKit::secCodeSigningInformation): Added.
        (WebKit::appleSignedOrMacAppStoreSignedOrAppleDeveloperSignedRequirement): Added.
        (WebKit::secCodeSigningIdentifier): Added.
        (WebKit::codeSigningIdentifier): Returns the code signing identifier for the current process.
        (WebKit::codeSigningIdentifierForProcess): Moved from file Shared/mac/ChildProcessMac.mm. Extracted logic
        into various helper functions (above) so that it can be shared with WebKit::codeSigningIdentifier() as
        well as to improve the readability of the code. Removed the OSStatus out argument that was used by callers
        for logging purposes and moved such logging responsibility into WebKit::secCodeSigningIdentifier() as
        a release assertion message since we always want to log this error when code signing validation fails. We
        use a release assertion to cause a noticeable crash because we such failures should not occur and if they
        do then we want to see crash reports so that we can handle such failures. Using a release assertion for
        validation failures also simplifies the possible return values of this function as such failures represented
        the only case where this function would return an empty string. We now return either a null string or a non-
        empty string. We return a null string when the specified process is either unsigned or signed by a third-party;
        otherwise, we return a non-empty string that represents the code signing identifier.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService): Use the code signing identifier for the client-identifier if we have one (e.g.
        we are signed app). If we do not have a code signing identifier then take client-identifier to be the
        bundle identifier of our main bundle. Failing that we take client-identifier to be _NSGetProgname().
        * WebKit2.xcodeproj/project.pbxproj: Add files Shared/mac/CodeSigning.{h, mm}.

2016-04-12  Enrica Casucci  <enrica@apple.com>

        Should retrieve text surrounding the selection when performing lookup.
        https://bugs.webkit.org/show_bug.cgi?id=156525
        rdar://problem/25043678

        Reviewed by Tim Horton.

        The lookup functionality requires the surrounding text to improve
        the quality of the results. This patch changes the implementation of
        _lookup to retrieve the text before and the text after the selection.
        It also renames DictationContextCallback to SelectionContextCallback so
        that it can be used for both dictation and lookup, since they both need
        the surrounding text.

        * UIProcess/AutoCorrectionCallback.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _lookup:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::autocorrectionDataCallback):
        (WebKit::WebPageProxy::selectionContextCallback):
        (WebKit::WebPageProxy::getAutocorrectionContext):
        (WebKit::WebPageProxy::getSelectionContext):
        (WebKit::WebPageProxy::handleTwoFingerTapAtPoint):
        (WebKit::WebPageProxy::dictationContextCallback): Deleted.
        (WebKit::WebPageProxy::getLookupContextAtPoint): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):
        (WebKit::WebPage::getSelectionContext):
        (WebKit::WebPage::accessibilityObjectForMainFramePlugin):
        (WebKit::WebPage::requestDictationContext):
        (WebKit::WebPage::replaceSelectedText):
        (WebKit::WebPage::getLookupContextAtPoint): Deleted.

2016-04-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Dock controls are not available in toolbar if Web Inspector window leaves fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=156520
        <rdar://problem/22101106>

        Reviewed by Timothy Hatcher.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCanAttach):
        Be more explicit about the attachment view check. Its intent
        was to prevent allowing a 2nd level inspector from attaching
        to a 1st level inspector. We can use a stronger check. Also,
        remove deprecated pragmas by switching to new value.

2016-04-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keyboard shortcut for "Inspect Element" only works when Web Inspector is open.
        https://bugs.webkit.org/show_bug.cgi?id=111193
        <rdar://problem/13325889>

        Reviewed by Timothy Hatcher.

        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorIsElementSelectionActive):
        (WKInspectorToggleElementSelection):
        * UIProcess/API/C/WKInspector.h:
        API for WebKit clients to toggle element selection.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::toggleElementSelection):
        (WebKit::WebInspectorProxy::elementSelectionChanged):
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::isElementSelectionActive):
        * UIProcess/WebInspectorProxy.messages.in:
        UIProcess update according to the state of the page
        and action to tell the page to toggle.
        When starting, pre-connect the inspector. When the
        state changes, if we were stopping and nothing was
        selected, then disconnect. Otherwise, we will bring
        the inspector to the front.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::elementSelectionChanged):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        Let the UIProcess update its cached state of whether or
        not element selection is enabled or disabled.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::startElementSelection):
        (WebKit::WebInspector::stopElementSelection):
        (WebKit::WebInspector::elementSelectionChanged):
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in:
        Messages in both directions.
        UIProcess -> InspectorProcess enable/disable.
        WebProcess -> UIProcess updated element selection state.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::startElementSelection):
        (WebKit::WebInspectorUI::stopElementSelection):
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.messages.in:
        Open the inspector and enable element selection.

2016-04-11  Alex Christensen  <achristensen@webkit.org>

        Build MiniBrowser with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156471

        Reviewed by Daniel Bates.

        * DatabaseProcess/DatabaseProcess.messages.in:

2016-04-11  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Do not pass context to EwkViewCreate
        https://bugs.webkit.org/show_bug.cgi?id=156461

        Reviewed by Darin Adler.

        EWKViewCreate already has pageConfiguration which contains context.
        So, this patch removes context argument from EWKViewCreate.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewCreate):
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (EWKViewCreate): Call WebView::Create instead of WKViewCreate not to use WK API.
        (ewk_view_smart_add):
        (ewk_view_add_with_configuration):
        (ewk_view_add_with_context):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::create):
        (WebKit::WebView::WebView):
        * UIProcess/efl/WebView.h:

2016-04-11  Darin Adler  <darin@apple.com>

        Remove UsePointersEvenForNonNullableObjectArguments from HTMLSelectElement
        https://bugs.webkit.org/show_bug.cgi?id=156458

        Reviewed by Chris Dumez.

        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm: Updated includes.

2016-04-11  Jeremy Jones  <jeremyj@apple.com>

        When clearing cache, also clear AVFoundation cache.
        https://bugs.webkit.org/show_bug.cgi?id=155783
        rdar://problem/25252541

        Reviewed by Darin Adler.

        Include the HTMLMediaElement media cache when doing disk cache operations.
        Add a sandbox extension for media cache directory. This allows the UI process and the web process
        to access the same cache.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Add media cache directory.
        (WebKit::WebProcessCreationParameters::decode): Add media cache directory.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration): Add media cache directory.
        (API::ProcessPoolConfiguration::copy): Add media cache directory.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultMediaCacheDirectory): Default implementation.
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultMediaCacheDirectory): Media cache is in temporary directory.
        (API::WebsiteDataStore::tempDirectoryFileSystemRepresentation): For resources in temporary directory.
        (API::WebsiteDataStore::defaultDataStoreConfiguration): Init media cache directory.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration): Add mediaCacheDirectory.
        (WebKit::WebProcessPool::createNewWebProcess): Add mediaCacheDirectory.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::fetchData): Implement for mediaCacheDirectory.
        (WebKit::WebsiteDataStore::removeData): Implement for mediaCacheDirectory.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Added.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Initialize media cache directory.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Consume sandbox extension.

2016-04-11  Commit Queue  <commit-queue@webkit.org>

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

        This change broke the OS X Yosemite build. (Requested by jwtan
        on #webkit).

        Reverted changeset:

        "When clearing cache, also clear AVFoundation cache."
        https://bugs.webkit.org/show_bug.cgi?id=155783
        http://trac.webkit.org/changeset/199315

2016-04-11  Jeremy Jones  <jeremyj@apple.com>

        When clearing cache, also clear AVFoundation cache.
        https://bugs.webkit.org/show_bug.cgi?id=155783
        rdar://problem/25252541

        Reviewed by Darin Adler.

        Include the HTMLMediaElement media cache when doing disk cache operations.
        Add a sandbox extension for media cache directory. This allows the UI process and the web process
        to access the same cache.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Add media cache directory.
        (WebKit::WebProcessCreationParameters::decode): Add media cache directory.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration): Add media cache directory.
        (API::ProcessPoolConfiguration::copy): Add media cache directory.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultMediaCacheDirectory): Default implementation.
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultMediaCacheDirectory): Media cache is in temporary directory.
        (API::WebsiteDataStore::tempDirectoryFileSystemRepresentation): For resources in temporary directory.
        (API::WebsiteDataStore::defaultDataStoreConfiguration): Init media cache directory.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration): Add mediaCacheDirectory.
        (WebKit::WebProcessPool::createNewWebProcess): Add mediaCacheDirectory.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::fetchData): Implement for mediaCacheDirectory.
        (WebKit::WebsiteDataStore::removeData): Implement for mediaCacheDirectory.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Added.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaCacheDirectory): Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Initialize media cache directory.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Consume sandbox extension.

2016-04-11  Said Abou-Hallawa  <sabouhallawa@apple,com>

        Merge CG ImageSource and non CG ImageSource implementation in one file
        https://bugs.webkit.org/show_bug.cgi?id=155456

        Reviewed by Darin Adler.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::setCursor):
        Replace the call to Image::getHotSpot() by Image::hotSpot().

2016-04-11  Anders Carlsson  <andersca@apple.com>

        Rename WKOpenPanelParameters files to WKOpenPanelParametersRef
        https://bugs.webkit.org/show_bug.cgi?id=156473

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKOpenPanelParameters.cpp:
        (WKOpenPanelParametersGetTypeID): Deleted.
        (WKOpenPanelParametersGetAllowsMultipleFiles): Deleted.
        (WKOpenPanelParametersCopyAcceptedMIMETypes): Deleted.
        (WKOpenPanelParametersCopyCapture): Deleted.
        (WKOpenPanelParametersGetCaptureEnabled): Deleted.
        (WKOpenPanelParametersCopySelectedFileNames): Deleted.
        * UIProcess/API/C/WKOpenPanelParametersRef.cpp: Renamed from Source/WebKit2/UIProcess/API/C/WKOpenPanelParameters.cpp.
        (WKOpenPanelParametersGetTypeID):
        (WKOpenPanelParametersGetAllowsMultipleFiles):
        (WKOpenPanelParametersCopyAcceptedMIMETypes):
        (WKOpenPanelParametersCopyCapture):
        (WKOpenPanelParametersGetCaptureEnabled):
        (WKOpenPanelParametersCopySelectedFileNames):
        * UIProcess/API/C/WKOpenPanelParametersRef.h: Renamed from Source/WebKit2/UIProcess/API/C/WKOpenPanelParameters.h.
        * UIProcess/API/C/WebKit2_C.h:
        * UIProcess/API/efl/ewk_file_chooser_request.cpp:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        * WebKit2.xcodeproj/project.pbxproj:

2016-04-09  Gavin Barraclough  <barraclough@apple.com>

        WebKit should adopt journal_mode=wal for all SQLite databases.
        https://bugs.webkit.org/show_bug.cgi?id=133496

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleClearAllDatabases):
            - renamed deleteAllDatabases -> deleteAllDatabasesImmediately.

2016-04-11  Daniel Bates  <dabates@apple.com>

        REGRESSION (r198933): Unable to login to Google account from Internet Accounts preference pane
        https://bugs.webkit.org/show_bug.cgi?id=156447
        <rdar://problem/25628133>

        Reviewed by Anders Carlsson.

        Temporarily perform code signing verification only for Mac App Store- and Apple Developer- signed apps.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::codeSigningIdentifierForProcess):

2016-04-05  Oliver Hunt  <oliver@apple.com>

        Remove compile time define for SEPARATED_HEAP
        https://bugs.webkit.org/show_bug.cgi?id=155508

        Reviewed by Mark Lam.

        * Configurations/FeatureDefines.xcconfig:

2016-04-11  Commit Queue  <commit-queue@webkit.org>

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

        broke 300 tests (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "Merge CG ImageSource and non CG ImageSource implementation in
        one file"
        https://bugs.webkit.org/show_bug.cgi?id=155456
        http://trac.webkit.org/changeset/199290

2016-04-11  Said Abou-Hallawa  <sabouhallawa@apple,com>

        Merge CG ImageSource and non CG ImageSource implementation in one file
        https://bugs.webkit.org/show_bug.cgi?id=155456

        Reviewed by Darin Adler.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::setCursor):
        Replace the call to Image::getHotSpot() by Image::hotSpot().

2016-04-11  Fujii Hironori  <Hironori.Fujii@jp.sony.com>

        [CMake] Make FOLDER property INHERITED
        https://bugs.webkit.org/show_bug.cgi?id=156460

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        Set FOLDER property as a directory property not a target property

2016-04-08  Sam Weinig  <sam@webkit.org>

        Remove support for custom target picker actions
        <rdar://problem/24987783>
        https://bugs.webkit.org/show_bug.cgi?id=156434

        Reviewed by Eric Carlson.

        This mostly entailed rolling out r197429 and r197569.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::removePlaybackTargetPickerClient):
        (WebKit::WebPageProxy::showPlaybackTargetPicker):
        (WebKit::WebPageProxy::playbackTargetPickerClientStateDidChange):
        (WebKit::WebPageProxy::setShouldPlayToPlaybackTarget):
        (WebKit::WebPageProxy::didChangeBackgroundColor):
        (WebKit::WebPageProxy::customPlaybackActionSelected): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::removePlaybackTargetPickerClient):
        (WebKit::WebChromeClient::showPlaybackTargetPicker):
        (WebKit::WebChromeClient::playbackTargetPickerClientStateDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setShouldPlayToPlaybackTarget):
        (WebKit::WebPage::customPlaybackActionSelected): Deleted.

2016-04-08  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] WKWebViews should consult ancestor UIScrollViews to determine tiling area
        https://bugs.webkit.org/show_bug.cgi?id=156429
        rdar://problem/25455111

        Reviewed by Tim Horton.

        When a WKWebView is expanded to full size, then embedded in UIScrollView, it would
        create huge tiles that cover the entire view area (since it considered itself non-scrollable).

        Fix to always use 512x512 tiles in this configuration, and to adjust the tile coverage
        for the area exposed through the enclosing UIScrollView.

        * Shared/VisibleContentRectUpdateInfo.cpp: Add enclosedInScrollView(), which is used to
        trigger normal-sized tiles.
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::enclosedInScrollView):
        (WebKit::operator==):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didInvokeUIScrollViewDelegateCallback]): Pass our scrollView.
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidZoom:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView _scrollViewDidInterruptDecelerating:]):
        (-[WKWebView _visibleRectInEnclosingScrollView:]):
        (-[WKWebView _visibleContentRect]): Compute the exposed part of the content relative
        to the WKWebView, then intersect with the exposed part via any ancestor UIScrollView.
        (-[WKWebView _didScroll]): This is called by UIKit when some ancestor UIScrollView scrolls.
        However, we don't get all the UIScrollView delegate callbacks, so have to use a timer to
        trigger a call to -_updateVisibleContentRects when we're in a stable state.
        (-[WKWebView _enclosingScrollerScrollingEnded:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _updateVisibleContentRectAfterScrollInView:]): Get the stable state from the
        scroll view that the user is interacting with.
        (-[WKWebView _updateContentRectsWithState:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/WebPageProxy.h: Rather than pass a bazillion arguments through updateVisibleContentRects(), just
        pass the VisibleContentRectUpdateInfo struct.
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollView:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2016-04-08  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS Simulator] Build failure (property 'contentsFormat' not found on object of type 'LegacyTileLayer *')
        https://bugs.webkit.org/show_bug.cgi?id=156415

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (-[_WKElementAction runActionWithElementInfo:]):
        Use WeakObjCPtr instead of __weak to avoid build errors when not under ARC.

2016-04-08  Alex Christensen  <achristensen@webkit.org>

        Progress towards running CMake WebKit2 on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156426

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        Put the xpc service binaries in the right place.

2016-04-08  Alex Christensen  <achristensen@webkit.org>

        Build fix with IndexedDB disabled but DatabaseProcess enabled after r199230
        https://bugs.webkit.org/show_bug.cgi?id=156321

        Rubber-stamped by Brady Eidson.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
        (WebKit::DatabaseProcess::grantSandboxExtensionsForBlobs):
        (WebKit::DatabaseProcess::accessToTemporaryFileComplete):
        (WebKit::DatabaseProcess::indexedDatabaseOrigins):
        * DatabaseProcess/DatabaseProcess.h:
        Add some more guards.

2016-04-07  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Stop using exposedContentRect for history scroll state restoration
        https://bugs.webkit.org/show_bug.cgi?id=156392

        Reviewed by Tim Horton.

        A future commit will alter the meaning of exposedContentRect on iOS to take into
        account clipped out parts of the WKWebView. To achieve this, wean history restoration
        off of using exposedContentRect for scroll state restoration. It did this to restore
        the page to the same position relative to the view's top-left (to avoid jiggles caused
        by changing obscured insets).

        Do this by pushing the left/top obscured insets down with visible content rects updates,
        storing them on ScrollView, and adding them to HistoryItem. Those insets are then used
        for scroll state restoration in WKWebView.

        * Shared/VisibleContentRectUpdateInfo.cpp: Add FloatSize for obscuredInset.
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::obscuredInset):
        (WebKit::operator==):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]): Rename _needsToRestoreExposedRect to _needsToRestoreScrollPosition
        (-[WKWebView _didCommitLayerTree:]): Restore the scroll position using the scaled scrollOffset minus
        the old obscuredInset.
        (-[WKWebView _layerTreeCommitComplete]):
        (-[WKWebView _restorePageScrollPosition:scrollOrigin:previousObscuredInset:scale:]):
        (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):
        (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _restorePageStateToExposedRect:scrollOrigin:scale:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::restorePageState):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInset:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        Make the VisibleContentRectUpdateInfo here and pass it down.
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects):
        (WebKit::WebPageProxy::restorePageState):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::restorePageState):
        (WebKit::WebPage::updateVisibleContentRects): setObscuredInset() moved from FrameView to Page.
        Also call setEnclosedInScrollView() on Page.

2016-04-08  Brady Eidson  <beidson@apple.com>

        Modern IDB (Blob support): Write blobs to temporary files and move them to the correct location when storing them.
        https://bugs.webkit.org/show_bug.cgi?id=156321

        Reviewed by Alex Christensen, Andy Estes, and Darin Adler.

        The NetworkProcess writes a blob to a temporary file, then tells the UIProcess to grant the DatabaseProcess
        a Sandbox Extension to that path.
        
        It then tells the WebProcess the paths for the temporary files, which then tells the DatabaseProcess to store
        the contents of those files as blob references in the database.
        
        Since the UIProcess had already granted it a Sandbox Extension, it is able to do so.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::idbServer):
        (WebKit::DatabaseProcess::grantSandboxExtensionsForBlobs):
        (WebKit::DatabaseProcess::prepareForAccessToTemporaryFile):
        (WebKit::DatabaseProcess::accessToTemporaryFileComplete):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseProcess.messages.in:

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::grantSandboxExtensionsToDatabaseProcessForBlobs):
        (WebKit::NetworkProcess::didGrantSandboxExtensionsToDatabaseProcessForBlobs):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::grantSandboxExtensionsToDatabaseProcessForBlobs):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

2016-04-07  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(ENABLE_ES6_CLASS_SYNTAX) guards
        https://bugs.webkit.org/show_bug.cgi?id=156384

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2016-04-07  Dean Jackson  <dino@apple.com>

        [iOS] Play button on video is too dark
        https://bugs.webkit.org/show_bug.cgi?id=156383
        <rdar://problem/23540816>

        Reviewed by Simon Fraser.

        Elements that are backed by a layer with either LightBackdropAppearance
        or DarkBackdropAppearance are actually a combination of a
        few layers (inside a special view). If we apply a mask to one
        of those layers, it needs to be attached to the correct
        child layer.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties): If we have
        one of the special appearance flags, apply the mask layer to
        a particular child, rather than the layer itself.

2016-04-07  Jeremy Jones  <jeremyj@apple.com>

        Clearing the application cache doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=156354
        rdar://problem/22369239

        Reviewed by Brady Eidson.

        Use the correct "ApplicationCache" directory.
        Delete the caches, not just the entries.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):

2016-04-07  Brian Burg  <bburg@apple.com>

        Web Automation: implement Automation.addSingleCookie
        https://bugs.webkit.org/show_bug.cgi?id=156319
        <rdar://problem/25589605>

        Reviewed by Timothy Hatcher.

        Implement this command by converting the protocol cookie to
        WebCore::Cookie, then sending the cookie to NetworkProcess to
        be added to the storage session using CookieJar::addCookie.

        * UIProcess/Automation/Automation.json:
        Clarify the units used in the 'expires' field and how the default value
        for the domain field should be computed.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::addSingleCookie):
        Parse the cookie and send it out via WebCookieManagerProxy.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::addCookie): Added.
        * UIProcess/WebCookieManagerProxy.h:
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::addCookie):
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:
        Forward the message to WebCore::addCookie.

2016-04-06  Ada Chan  <adachan@apple.com>

        Add WebKitAdditions extension points around preferences
        https://bugs.webkit.org/show_bug.cgi?id=156303

        Reviewed by Beth Dakin.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::defaults):
        * UIProcess/API/C/WKPreferences.cpp:

2016-04-07  Brian Burg  <bburg@apple.com>

        CookieJar should support adding synthetic cookies for developer tools
        https://bugs.webkit.org/show_bug.cgi?id=156091
        <rdar://problem/25581340>

        Reviewed by Timothy Hatcher.

        Plumb the new method through the strategy and out to the network process.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::addCookie):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::addCookie):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2016-04-06  Alex Christensen  <achristensen@webkit.org>

        Compile WebKitTestRunner with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156310

        Reviewed by Daniel Bates.

        * PlatformMac.cmake:

2016-04-05  Simon Fraser  <simon.fraser@apple.com>

        Rename exposedRect to viewExposedRect and propagate it as Optional<> through WK2
        https://bugs.webkit.org/show_bug.cgi?id=156274

        Reviewed by Tim Horton.

        DrawingArea and FrameView have an "exposedRect" property that is used by applications
        on Mac, like Mail, that embed web views inside scroll views. However, this name is very
        similar to the "exposedContentRect" that is used on iOS to denote the part of the view
        whose pixels are visible, including through blurring overlaid UI.
        
        To disambiguate these two, rename the Mac "exposedRect" to "viewExposedRect" to
        emphasize that it's a rect that takes into account clipping in the native view
        hierarchy.
        
        Also make this rect Optional<> through the DrawingArea, removing comparisons against
        FloatRect::infiniteRect().
        
        Do some other minor renaming in VisibleContentRectUpdateInfo.

        * Shared/VisibleContentRectUpdateInfo.cpp: Rename "exposedRect" and "unobscuredRect" to
        have "Content" in the names.
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::exposedContentRect):
        (WebKit::VisibleContentRectUpdateInfo::unobscuredContentRect):
        (WebKit::operator==):
        (WebKit::VisibleContentRectUpdateInfo::exposedRect): Deleted.
        (WebKit::VisibleContentRectUpdateInfo::unobscuredRect): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateViewExposedRect):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::setViewExposedRect):
        (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired):
        (WebKit::DrawingAreaProxy::setExposedRect): Deleted.
        (WebKit::DrawingAreaProxy::exposedRectChangedTimerFired): Deleted.
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::viewExposedRect):
        (WebKit::DrawingAreaProxy::exposedRect): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::exposedContentRect):
        (WebKit::WebPageProxy::unobscuredContentRect):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::setViewExposedRect):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::scaledExposedRect): Deleted.
        (WebKit::RemoteLayerTreeDrawingAreaProxy::setExposedRect): Deleted. This was only used
        to position the indicator, and confusingly used either exposedContentRect() or viewExposedRect()
        depending on platform.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setViewExposedRect):
        (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea): Deleted.
        (WebKit::RemoteLayerTreeDrawingArea::setExposedRect): Deleted.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::setViewExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): Deleted.
        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect): Deleted.

2016-04-05  Alex Christensen  <achristensen@webkit.org>

        Make CMake-generated binaries on Mac able to run
        https://bugs.webkit.org/show_bug.cgi?id=156268

        Reviewed by Daniel Bates.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2016-04-05  Brian Burg  <bburg@apple.com>

        Web Automation: add support for getting, deleting, and adding cookies
        https://bugs.webkit.org/show_bug.cgi?id=156090
        <rdar://problem/25477678>

        Reviewed by Timothy Hatcher.

        Add protocol commands for manipulating cookies with respect to a given page.
        Implement all but the addSingleCookie command, which needs a new WebCore API.

        * UIProcess/Automation/Automation.json:
        Copy the Page domain Cookie object. Add new commands.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::getAllCookies):
        (WebKit::buildObjectForCookie): Copied from InspectorPageAgent.
        (WebKit::buildArrayForCookies): Copied from InspectorPageAgent.
        (WebKit::WebAutomationSession::didGetCookiesForFrame):
        (WebKit::WebAutomationSession::deleteSingleCookie):
        (WebKit::WebAutomationSession::didDeleteCookie):
        (WebKit::WebAutomationSession::addSingleCookie): Added a stub for now.
        (WebKit::WebAutomationSession::deleteAllCookies):
        This command can use the WebCookieManager supplement directly instead of
        proxying through AutomationSession. It doesn't block until the delete is
        performed like the other methods do, but this shouldn't be a problem.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.messages.in:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::getCookiesForFrame):
        (WebKit::WebAutomationSessionProxy::deleteCookie):
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:

2016-04-05  Alex Christensen  <achristensen@webkit.org>

        Fix Range requests when not using the NetworkCache with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=156036
        rdar://problem/25334939
 
        Reviewed by Sam Weinig.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:willCacheResponse:completionHandler:]):
        Don't cache any responses with Content-Range headers to work around rdar://problem/20001985.
        This is similar to the workaround in shouldCacheResponse in WebCoreNSURLSession.mm
        (WebKit::NetworkSession::NetworkSession):
        If we are using the NetworkCache, then don't use CFNetwork's cache.

2016-04-05  Brent Fulgham  <bfulgham@apple.com>

        Correct applicationWillTerminate logic for ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=156249
        <rdar://problem/25179611>

        Reviewed by Andy Estes.

        The applicationWillTerminate handling for ResourceLoadStatistics incorrectly
        assumes that a ResourceLoadStatistics object will always be present.
        1. The termination handling for 'dataStoresWithStorageManagers' should be
           calling 'applicationWillTerminate' on any ResourceLoadStatistics
           objects attached to the dataStore.
        2. platformInitialize should null-check before attempting to dispatch.
        3. platformDestroy should null check before attempting to dispatch.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformInitialize): 
        (WebKit::WebsiteDataStore::platformDestroy): Invoke 'applicationWillTerminate' on
        m_resourceLoadStatistics if present.

2016-04-05  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Fetch API] Add a runtime flag to fetch API and related constructs
        https://bugs.webkit.org/show_bug.cgi?id=156113
 
        Reviewed by Alex Christensen.

        Add a fetch API runtime flag based on preferences.
        Disable fetch API by default.
 
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetCustomElementsEnabled):
        (WKPreferencesSetFetchAPIEnabled):
        (WKPreferencesGetFetchAPIEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-04-05  Brady Eidson  <beidson@apple.com>

        Modern IDB: Replace use of SerializedScriptValue with IDBValue.
        https://bugs.webkit.org/show_bug.cgi?id=156242

        Reviewed by Alex Christensen.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::putOrAdd):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::putOrAdd):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

2016-04-05  Antoine Quint  <graouts@apple.com>

        [WebGL2] Turn the ENABLE_WEBGL2 flag on
        https://bugs.webkit.org/show_bug.cgi?id=156061
        <rdar://problem/25463193>

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:

2016-04-05  Chris Dumez  <cdumez@apple.com>

        We sometimes fail to remove outdated entry from the disk cache after revalidation and when the resource is no longer cacheable
        https://bugs.webkit.org/show_bug.cgi?id=156048
        <rdar://problem/25514480>

        Reviewed by Antti Koivisto.

        We would sometimes fail to remove outdated entry from the disk cache
        after revalidation and when the resource is no longer cacheable. This
        was due to Storage::removeFromPendingWriteOperations() only removing
        the first pending write operation with a given key instead of actually
        removing all of the operations with this key.

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

2016-04-05  Antoine Quint  <graouts@apple.com>

        [WebGL2] Allow enabling WebGL2 with a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=156166
        <rdar://problem/25526929>

        Set the WebGL2 runtime flag based on preferences, disabled by default.

        Reviewed by Dean Jackson.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebGL2Enabled):
        (WKPreferencesGetWebGL2Enabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-04-04  Zan Dobersek  <zdobersek@igalia.com>

        [ThreadedCompositor] Move CompositingRunLoop class into a separate file
        https://bugs.webkit.org/show_bug.cgi?id=156170

        Reviewed by Michael Catanzaro.

        Move the CompositingRunLoop class from the ThreadedCompositor.cpp file
        into its own implementation file, with the class declaration placed
        into the accompanying header file. This follows the general rule of
        keeping different class implementations in separate files.

        No change in behavior, just refactoring.

        * PlatformGTK.cmake:
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp: Added.
        (WebKit::CompositingRunLoop::CompositingRunLoop):
        (WebKit::CompositingRunLoop::callOnCompositingRunLoop):
        (WebKit::CompositingRunLoop::setUpdateTimer):
        (WebKit::CompositingRunLoop::stopUpdateTimer):
        (WebKit::CompositingRunLoop::updateTimerFired):
        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h: Added.
        (WebKit::CompositingRunLoop::runLoop):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::CompositingRunLoop::CompositingRunLoop): Deleted.
        (WebKit::CompositingRunLoop::callOnCompositingRunLoop): Deleted.
        (WebKit::CompositingRunLoop::setUpdateTimer): Deleted.
        (WebKit::CompositingRunLoop::stopUpdateTimer): Deleted.
        (WebKit::CompositingRunLoop::runLoop): Deleted.
        (WebKit::CompositingRunLoop::updateTimerFired): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:

2016-04-04  Brady Eidson  <beidson@apple.com>

        Modern IDB: Dump blobs to disk before storing them in an object store.
        https://bugs.webkit.org/show_bug.cgi?id=156068

        Reviewed by Alex Christensen.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::writeBlobsToTemporaryFiles):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles):
        (WebKit::NetworkProcessConnection::didWriteBlobsToTemporaryFiles):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

2016-04-04  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Allow clients in the bundle to know whether a field was focused by user interaction        
        https://bugs.webkit.org/show_bug.cgi?id=156118

        Reviewed by Dan Bernstein.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Add delegate method that takes userIsInteracting bool so that bundle clients get this information.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: Call API with userIsInteracting property if delegate implements it, otherwise call existing API if
        userIsInteracting is true, as we previously did in WebKit::WebPage::elementDidFocus. Move FIXME from WebKit::WebPage::elementDidFocus to here, since we are checking userIsInteracting.
        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h:
        (API::InjectedBundle::FormClient::willBeginInputSession): Add userIsInteracting bool to arguments so we can use it for call to the new API as well as preserving behavior of the old API.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::elementDidFocus): Remove check if user is interacting and call willBeginInputSession unconditionally. Move FIXME to where we check
        userIsInteracting. Pass m_userIsInteracting to willBeginInputSession so we can use it there.

2016-04-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed GTK build fix after r199020

        * UIProcess/API/gtk/WebKitUserContentManager.cpp:
        (webkit_user_content_manager_register_script_message_handler):
        (webkit_user_content_manager_unregister_script_message_handler):

2016-04-04  Alex Christensen  <achristensen@webkit.org>

        CMake build fix.

        * PlatformMac.cmake:

2016-04-04  Jiewen Tan  <jiewen_tan@apple.com>

        Tapping on tabs in webpages caused WK crash at WebKit: WebKit::WebFrame::didReceivePolicyDecision
        https://bugs.webkit.org/show_bug.cgi?id=156119
        <rdar://problem/20732167>

        Reviewed by Andy Estes.

        Protect the m_frame so that it is present for completion handlers.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2016-04-04  Beth Dakin  <bdakin@apple.com>

        Add some logic to decide when a video can control the videoControlsManager
        https://bugs.webkit.org/show_bug.cgi?id=156089
        -and corresponding-
        rdar://problem/23833752

        Reviewed by Eric Carlson and Tim Horton.

        The biggest change in WebKit2 is to push all of the logic for the 
        videoControlsManager into WebCore. With this change, WebCore will invoke 
        setUpVideoControlsManager() when there is a video to control the manager, and 
        it will call clearVideoControlsManager() when there is not.

        Add clearVideoControlsManager().
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::clearVideoControlsManager):

        Re-name isPlayingMediaDidChange() to videoControlsManagerDidChange(). This 
        ties the logic to the lifetime of the videoControlsManager instead of 
        figuring it out in the UIProcess based on the media state.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::videoControlsManagerDidChange):
        (WebKit::WebViewImpl::isPlayingMediaDidChange): Deleted.
        * UIProcess/PageClient.h:

        Also change isPlayingVideoWithAudio() into hasActiveVideoForControlsManager() 
        Again, this ties the logic to the lifetime of the videoControlsManager 
        instead of figuring it out in the UIProcess based on the media state.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        (WebKit::WebPageProxy::videoControlsManagerDidChange):
        (WebKit::WebPageProxy::hasActiveVideoForControlsManager):
        (WebKit::WebPageProxy::isPlayingVideoWithAudio): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::videoControlsManagerDidChange):
        (WebKit::PageClientImpl::isPlayingMediaDidChange): Deleted.

        New WebChromeClient function clearVideoControlsManager().
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::clearVideoControlsManager):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

        Do the work to clear the videoControlsManager.
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::clearVideoControlsManager):
        (WebKit::WebVideoFullscreenManager::exitVideoFullscreenToModeWithoutAnimation):

2016-04-04  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r198955): com.apple.WebKit.Networking.Development crashed in WebKit::NetworkLoad::setPendingDownloadID + 11
        https://bugs.webkit.org/show_bug.cgi?id=156177
        <rdar://problem/25508037>

        Reviewed by Alex Christensen.

        We do not currently create a NetworkDataTask when we encounter a BLOB URL when building with
        NETWORK_SESSION enabled. This causes us to crash when the download system attempts to work
        with a BLOB URL.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::setPendingDownloadID): Add null check for m_task.
        (WebKit::NetworkLoad::setPendingDownload): Ditto.

2016-04-03  Sam Weinig  <sam@webkit.org>

        Add SPI to allow install script message handlers in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=156153

        Reviewed by Anders Carlsson.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/WebUserContentControllerDataTypes.cpp:
        (WebKit::WebScriptMessageHandlerData::encode):
        (WebKit::WebScriptMessageHandlerData::decode):
        * Shared/WebUserContentControllerDataTypes.h:
        Add WebKit::WebScriptMessageHandlerData, matching WebKit::WebUserScriptData and
        WebKit::WebUserStyleSheetData.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController addScriptMessageHandler:name:]):
        (-[WKUserContentController removeScriptMessageHandlerForName:]):
        (-[WKUserContentController _removeAllUserStyleSheetsAssociatedWithUserContentWorld:]):
        (-[WKUserContentController _addScriptMessageHandler:name:userContentWorld:]):
        (-[WKUserContentController _removeScriptMessageHandlerForName:userContentWorld:]):
        (-[WKUserContentController _removeAllScriptMessageHandlersAssociatedWithUserContentWorld:]):
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        Add SPI for adding and removing ScriptMessageHandlers associated with a world.

        * UIProcess/UserContent/WebScriptMessageHandler.cpp:
        (WebKit::WebScriptMessageHandler::create):
        (WebKit::WebScriptMessageHandler::WebScriptMessageHandler):
        (WebKit::WebScriptMessageHandlerHandle::encode): Deleted.
        (WebKit::WebScriptMessageHandlerHandle::decode): Deleted.
        * UIProcess/UserContent/WebScriptMessageHandler.h:
        (WebKit::WebScriptMessageHandler::identifier):
        (WebKit::WebScriptMessageHandler::name):
        (WebKit::WebScriptMessageHandler::userContentWorld):
        (WebKit::WebScriptMessageHandler::client):
        (WebKit::WebScriptMessageHandler::handle): Deleted.
        Add the world and move the data object to WebUserContentControllerDataTypes.h

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addUserScriptMessageHandler):
        (WebKit::WebUserContentControllerProxy::removeUserMessageHandlerForName):
        (WebKit::WebUserContentControllerProxy::removeAllUserMessageHandlers):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        Update for worlds, matching UserScript/UserStyleSheet model.

        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserMessageHandlerDescriptorProxy::WebUserMessageHandlerDescriptorProxy):
        Change to inherit directly from WebCore::UserMessageHandlerDescriptor.

        (WebKit::WebUserContentController::addUserScriptMessageHandlers):
        (WebKit::WebUserContentController::removeUserScriptMessageHandler):
        (WebKit::WebUserContentController::removeAllUserScriptMessageHandlers):
        (WebKit::WebUserContentController::addUserScriptMessageHandlerInternal):
        (WebKit::WebUserContentController::removeUserScriptMessageHandlerInternal):
        Add support for worlds, matching UserScript/UserStyleSheet model.

        (WebKit::WebUserContentController::addUserStyleSheets):
        Add missing call to invalidateInjectedStyleSheetCacheInAllFramesInAllPages()

        (WebKit::WebUserContentController::removeAllUserStyleSheets):
        Switch to only calling invalidateInjectedStyleSheetCacheInAllFramesInAllPages() once
        after the loop and only if any stylesheets were removed.
        
        (WebKit::WebUserContentController::addUserStyleSheetInternal):
        Remove call to invalidateInjectedStyleSheetCacheInAllFramesInAllPages(), make
        callers call it. This allows us to avoid calling it repeatedly in removeAllUserStyleSheets().

        (WebKit::WebUserContentController::addUserStyleSheet):
        Call invalidateInjectedStyleSheetCacheInAllFramesInAllPages() explicitly since it
        is no longer called in addUserStyleSheetInternal().

        (WebKit::WebUserContentController::forEachUserMessageHandler):
        Implement by iterating the m_userMessageHandlers map.

        * WebProcess/UserContent/WebUserContentController.messages.in:
        Update for worlds, matching UserScript/UserStyleSheet model.

2016-04-04  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix build break since r198800
        https://bugs.webkit.org/show_bug.cgi?id=156011

        Reviewed by Alex Christensen.

        * CMakeLists.txt: Currently circular dependency state exists between WebCoreDerivedSources and WebCore targets.
        By adding -Wl,--start-group -Wl,--end-group linker option, we can resolve this problem.
        In case there is no such circular dependency, this linker option does nothing.

2016-04-04  Konstantin Tokarev  <annulen@yandex.ru>

        [GTK] Added missing inspector files under UserInterface/Proxies.
        https://bugs.webkit.org/show_bug.cgi?id=156165

        Reviewed by Michael Catanzaro.

        * PlatformGTK.cmake:

2016-04-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r198792): [GTK] Inspector crashes in Inspector::Protocol::getEnumConstantValue since r198792
        https://bugs.webkit.org/show_bug.cgi?id=155745
        <rdar://problem/25289456>

        Reviewed by Brian Burg.

        Use Inspector::Protocol::AutomationEnums namespace for getEnumConstantValue().

        * UIProcess/Automation/WebAutomationSession.cpp:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::didClearWindowObjectForFrame):
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithOrdinal):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithName):
        (WebKit::WebAutomationSessionProxy::resolveParentFrame):
        (WebKit::WebAutomationSessionProxy::computeElementLayout):

2016-04-04  Emanuele Aina  <emanuele.aina@collabora.com>

        Fix WEB_PROCESS_CMD_PREFIX and NETWORK_PROCESS_CMD_PREFIX after r196500
        https://bugs.webkit.org/show_bug.cgi?id=156060

        Reviewed by Darin Adler.

        Commit r196500 was a bit too eager in removing the
        platformGetLaunchOptions() callsites as non-mac platform still use
        that in debug builds to attach debugging tools to spawned
        subprocesses (eg. gdbserver).

        Instead of reinstating them and relying on each subprocess type to
        implement its own platformGetLaunchOptions() version (all alike),
        avoid duplication and check the *_PROCESS_CMD_PREFIX environment
        variables in a single place, ChildProcessProxy::getLaunchOptions().

        Doing so also improves consistency in *_PROCESS_CMD_PREFIX support:
        only WEB_PROCESS_CMD_PREFIX and NETWORK_PROCESS_CMD_PREFIX worked with
        both the GTK and EFL ports while PLUGIN_PROCESS_CMD_PREFIX only
        worked for EFL and there was no corresponding
        DATABASE_PROCESS_CMD_PREFIX implementation.

        * UIProcess/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::getLaunchOptions): Check the
        appropriate *_PROCESS_CMD_PREFIX environment variable.
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions): Drop
        check for PLUGIN_PROCESS_COMMAND_PREFIX, now handled by
        ChildProcessProxy::getLaunchOptions().
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessProxy.h: Drop platformGetLaunchOptions()
        prototypes.
        * UIProcess/Network/soup/NetworkProcessProxySoup.cpp:
        * UIProcess/Databases/efl/DatabaseProcessProxyEfl.cpp:
        * UIProcess/Databases/gtk/DatabaseProcessProxyGtk.cpp:
        * UIProcess/efl/WebProcessProxyEfl.cpp:
        * UIProcess/gtk/WebProcessProxyGtk.cpp: Removed, they only contained
        platformGetLaunchOptions() implementations.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake: Drop removed files.

2016-04-02  Daniel Bates  <dabates@apple.com>

        REGRESSION (r198933): Web Inspector and inspected page hang in local builds
        https://bugs.webkit.org/show_bug.cgi?id=156138
        <rdar://problem/25507724>

        Reviewed by Alexey Proskuryakov.

        Similar to the sandbox policy for WebProcess and NetworkProcess, grant a Database process
        read-only filesystem access and mach lookup capability to various Security framework files
        and SecurityServer, respectively.

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in:

2016-04-02  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Apple Internal Yosemite and El Capitan builds following
        <http://trac.webkit.org/changeset/198933> (https://bugs.webkit.org/show_bug.cgi?id=155455)

        Similar to the sandbox policy for WebProcess and NetworkProcess, grant a Database process
        access to the passed user's cache directory and passed user's temporary directory so that
        the Security framework can verify the code signature of the app that launched it when the
        Database process is itself code signed.

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in:

2016-04-01  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Internal Yosemite and El Capitan builds following
        <http://trac.webkit.org/changeset/198933> (https://bugs.webkit.org/show_bug.cgi?id=155455)
        <rdar://problem/25502181>

        Only check the code signature of the client app if the "user-directory-suffix" sandbox
        initialization parameter will not be used. This parameter is only used/passed as an
        initialization parameter if the client app is not sandboxed, which seems sufficient
        criterion to determine whether it is safe to honor it.

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

2016-04-01  Jiewen Tan  <jiewen_tan@apple.com>

        WebKit should dispatchDidFailProvisionalLoad while loading invalid URLs
        https://bugs.webkit.org/show_bug.cgi?id=155995
        <rdar://problem/14967004>

        Reviewed by Andy Estes.

        Ensure that alternative HTML string will not be loaded back to back for
        failing provisional loads.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        * UIProcess/WebPageProxy.h:

2016-04-01  Brent Fulgham  <bfulgham@apple.com>

        Confirm <a download> satisfies specification criteria
        https://bugs.webkit.org/show_bug.cgi?id=156057

        Reviewed by Andy Estes.

        * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp:
        (WKBundleNavigationActionGetHasDownloadAttribute): Added.
        * WebProcess/InjectedBundle/API/c/WKBundleNavigationActionPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
        (WebKit::InjectedBundleNavigationAction::hasDownloadAttribute): Added.

2016-04-01  Alex Christensen  <achristensen@webkit.org>

        CMake build fix.

        * PlatformMac.cmake:

2016-04-01  Alex Christensen  <achristensen@webkit.org>

        Compile DumpRenderTree with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=156088

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * UIProcess/API/Cocoa/WebKitLegacy.h: Added.

2016-03-31  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed EFL build fix caused by r198929.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::layerVolatilityTimerFired): Need to use type casting in WEBPAGE_LOG_ALWAYS_ERROR() log.

2016-03-31  Daniel Bates  <dabates@apple.com>

        REGRESSION (r194660): Navigating to HTTPS sites may fail with error
        https://bugs.webkit.org/show_bug.cgi?id=155455
        <rdar://problem/24308793>

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where navigating to an HTTPS site may fail because the Security Framework uses
        a cache directory that it does not have permission to use.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::codeSigningIdentifierForProcess): Queries the Security Framework for the code signed
        bundle identifier/code signing identifier.
        (WebKit::ChildProcess::initializeSandbox): Use the client identifier as part of the user directory
        suffix. Verify that the client identifier matches the code signed bundled identifier/code
        signing identifier for the code signed app/tool. Fix minor code style issue; use a C++-style cast
        instead of a C-style cast when casting an OSStatus to a long.
        (WebKit::findSecCodeForProcess): Deleted; incorporated logic into WebKit::codeSigningIdentifierForProcess().

2016-03-31  Saam barati  <sbarati@apple.com>

        Revert rewrite const as var workaround
        https://bugs.webkit.org/show_bug.cgi?id=155393

        Reviewed by Mark Lam.

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

2016-03-31  Chris Dumez  <cdumez@apple.com>

        [iOS] Both WebPage's volatility timer and WebProcess's processSuspensionCleanupTimer are trying to make surfaces volatile with very short interval
        https://bugs.webkit.org/show_bug.cgi?id=156065
        <rdar://problem/25452004>

        Reviewed by Simon Fraser.

        Upon process suspension, both the WebPage's volatility timer and
        WebProcess' processSuspensionCleanupTimer are trying to make surfaces
        volatile with a very short interval. This is overly aggressive given
        that this operation normally succeeds very quickly or does not (due
        to underlying bugs).

        This patch does the following:
        - Drop the WebProcess' processSuspensionCleanupTimer and have the
          WebProcess drive the WebPages' volatility timer instead.
        - Update the WebPages' volatility timer to do exponential back off.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::layerVolatilityTimerFired):
        (WebKit::WebPage::markLayersVolatileImmediatelyIfPossible):
        (WebKit::WebPage::markLayersVolatile):
        (WebKit::WebPage::cancelMarkLayersVolatile):
        (WebKit::WebPage::isAlwaysOnLoggingAllowed):
        (WebKit::WebPage::setLayerTreeStateIsFrozen): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::markLayersVolatile):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationDidEnterBackground):
        (WebKit::WebPage::applicationWillEnterForeground):
        (WebKit::WebPage::applicationDidBecomeActive): Deleted.
        (WebKit::adjustVelocityDataForBoundedScale): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend):
        (WebKit::WebProcess::processWillSuspendImminently):
        (WebKit::WebProcess::prepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::markAllLayersVolatile):
        (WebKit::WebProcess::cancelMarkAllLayersVolatile):
        (WebKit::WebProcess::setAllLayerTreeStatesFrozen):
        (WebKit::WebProcess::processDidResume):
        (WebKit::WebProcess::WebProcess): Deleted.
        * WebProcess/WebProcess.h:

2016-03-31  Brian Burg  <bburg@apple.com>

        Web Automation: the interaction queue in WebAutomationSession::performKeyInteractions doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=156083

        Reviewed by Timothy Hatcher.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        Use Vector::reserveCapacity instead of the size constructor since we use append.
        Empty the interaction queue outside of loops so all interactions are performed once.

2016-03-31  Timothy Hatcher  <timothy@apple.com>

        Web Automation: Add support for script timeouts to the evaluateJavaScriptFunction command

        https://bugs.webkit.org/show_bug.cgi?id=156052
        rdar://problem/25457151

        Address additional review comments.

        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (AutomationSessionProxy.prototype.evaluateJavaScriptFunction): Add semicolons and remove
        and clearTimeout that wasn't needed.

2016-03-31  Timothy Hatcher  <timothy@apple.com>

        Web Automation: Navigation commands should not return until page loads or fails

        https://bugs.webkit.org/show_bug.cgi?id=156063
        rdar://problem/25464373

        Reviewed by Brian Burg.

        * UIProcess/Automation/Automation.json: Make navigation commands async.
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::navigateBrowsingContext): Save callback and timeout previous.
        (WebKit::WebAutomationSession::goBackInBrowsingContext): Ditto.
        (WebKit::WebAutomationSession::goForwardInBrowsingContext): Ditto.
        (WebKit::WebAutomationSession::reloadBrowsingContext): Ditto.
        (WebKit::WebAutomationSession::navigationOccuredForPage): Added. Fire callback for page.
        * UIProcess/Automation/WebAutomationSession.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishLoadForFrame): Call WebAutomationSession::navigationOccuredForPage.
        (WebKit::WebPageProxy::didFailLoadForFrame): Ditto.
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): Ditto.

        * UIProcess/WebProcessPool.h: Added automationSession() getter.

2016-03-30  Timothy Hatcher  <timothy@apple.com>

        Web Automation: Add support for script timeouts to the evaluateJavaScriptFunction command

        https://bugs.webkit.org/show_bug.cgi?id=156052
        rdar://problem/25457151

        Reviewed by Brian Burg.

        * UIProcess/Automation/Automation.json: Added callbackTimeout to evaluateJavaScriptFunction.
        Also made expectsImplicitCallbackArgument optional, since it is not required. Added JavaScriptTimeout error.
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction): Added callbackTimeout.
        * UIProcess/Automation/WebAutomationSession.h:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::evaluateJavaScriptCallback): Send JavaScriptTimeout error if the timeout fired.
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction): Added callbackTimeout.
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (AutomationSessionProxy.prototype.evaluateJavaScriptFunction): Set a timeout to fire if the
        callback is not called, then return an error.
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:
        (EvaluateJavaScriptFunction): Added callbackTimeout parameter.

2016-03-31  Jiewen Tan  <jiewen_tan@apple.com>

        WebKit should set Original URL of a download request correctly
        https://bugs.webkit.org/show_bug.cgi?id=155914
        <rdar://problem/10473811>

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        * NetworkProcess/NetworkProcess.h:
        Add logic to set the original URL of a download request when a main resource load
        is converted to a download.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download):
        * UIProcess/WebProcessPool.h:
        Add logic to set the original URL of a download request during a context menu:
        Download Linked File action.

2016-03-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Automation: Add Automation.screenshot
        https://bugs.webkit.org/show_bug.cgi?id=156073
        <rdar://problem/25468646>

        Reviewed by Timothy Hatcher and Brian Burg.

        * UIProcess/Automation/Automation.json:
        Add Automation.screenshot which returns base64 encoded PNG data.

        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::screenshot):
        (WebKit::WebAutomationSession::didTakeScreenshot):
        (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData):
        Send a message to the WebPage to get an Image of the page
        and handle the response.

        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData):
        Convert the bitmap data to a base64 encoded PNG.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.messages.in:
        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::evaluateJavaScriptCallback):
        (WebKit::WebAutomationSessionProxy::didClearWindowObjectForFrame):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithOrdinal):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithName):
        (WebKit::WebAutomationSessionProxy::resolveParentFrame):
        (WebKit::WebAutomationSessionProxy::computeElementLayout):
        Use null string where possible for efficiency.

        (WebKit::WebAutomationSessionProxy::takeScreenshot):
        Take an image of the entire page and pass back to the UIProcess.

2016-03-31  Timothy Hatcher  <timothy@apple.com>

        Web Automation: Handle undefined when calling a function that has no result

        https://bugs.webkit.org/show_bug.cgi?id=156075
        rdar://problem/25468907

        Reviewed by Brian Burg.

        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (let.AutomationSessionProxy.prototype._jsonParse): Return undefined for empty string.
        (let.AutomationSessionProxy.prototype._jsonStringify): Always return a string.

2016-03-31  Jeremy Jones  <jeremyj@apple.com>

        mediaShouldUsePersistentCache() is redundant. Use Page::usesEphemeralSession() instead.
        https://bugs.webkit.org/show_bug.cgi?id=155924

        Reviewed by Simon Fraser.

        Remove machinery for mediaShouldUsePersistentCache as it is redundant.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Deleted.
        (WebKit::WebPageCreationParameters::decode): Deleted.
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mediaShouldUsePersistentCache): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_mediaShouldUsePersistentCache): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::mediaShouldUsePersistentCache): Deleted.

2016-03-30  Ada Chan  <adachan@apple.com>

        Add the new "toggle enhanced fullscreen" context menu item to the video context menu on supporting platforms.
        https://bugs.webkit.org/show_bug.cgi?id=156031

        Reviewed by Eric Carlson.

        * Shared/API/c/WKContextMenuItemTypes.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):

2016-03-31  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r198893.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::findPendingDownloadLocation): Pass
        new argument to download method.

2016-03-31  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Support download attribute feature
        https://bugs.webkit.org/show_bug.cgi?id=102914
        <rdar://problem/13177492>

        Reviewed by Darin Adler.

        A first draft implementation of this feature.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download): Update to accept default filename.
        (WebKit::Download::didStart): Send default filename in message.
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload): Expect a default filename argument.
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::startDownload): Expect a default
        filename argument.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in: Update messages to
        expect a default filename argument.
        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode): Handle the download attribute flag and
        the default filename.
        (WebKit::NavigationActionData::decode): Ditto.
        * Shared/NavigationActionData.h:
        * UIProcess/API/APINavigationAction.h:
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didStart): Expect a default filename argument.
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename): Use the suggested
        filename if the client delegate does not override it.
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in: Include a default filename value.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision): If the feature is enabled, and
        the load was started with a download attribute, convert a "PolicyUse" decision
        to "PolicyDownload".
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Remember if the load
        is happening due to a 'download' attribute link.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow): Populate the navigationActionData object
        with any download attribute and suggested filename.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): Populate the
        navigationActionData object with any download attribute and suggested filename.
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Ditto.
        (WebKit::WebFrameLoaderClient::startDownload): Expect a suggested filename argument.
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload): Expect a suggested filename argument.
        * WebProcess/WebPage/WebFrame.h:

2016-03-30  Alex Christensen  <achristensen@webkit.org>

        CMake build fix.

        * PlatformMac.cmake:

2016-03-30  Alex Christensen  <achristensen@webkit.org>

        Speculative Yosemite fix after r198872.

        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformSimulateKeySequence):
        Yosemite didn't like _Nullable.

2016-03-30  Yongjun Zhang  <yongjun_zhang@apple.com>

        Need to expose makeAllShadowRootsOpen in WKWebProcessPlugInScriptWorld.
        https://bugs.webkit.org/show_bug.cgi?id=156046

        Add an SPI makeAllShadowRootsOpen method in WKWebProcessPlugInScriptWorld.

        Reviewed by Dan Bernstein.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm:
        (-[WKWebProcessPlugInScriptWorld makeAllShadowRootsOpen]):

2016-03-30  Brian Burg  <bburg@apple.com>

        Web Automation: Add Automation.performKeyboardInteractions
        https://bugs.webkit.org/show_bug.cgi?id=155990
        <rdar://problem/25426408>

        Reviewed by Timothy Hatcher.

        Add a command that allows automation to simulate single
        key strokes or insertion of an entire string, character
        by character.

        * UIProcess/Automation/Automation.json: Add new command.
        Add a large enumeration of all virtual keys that exist
        on a US 109-key keyboard layout. Add an interaction object.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::performKeyboardInteractions):
        Added. This method validates the incoming key interactions
        from the protocol and makes a list of simulated interactions
        to perform. If everything validates, then delegate the key
        interaction simulations to platform-specific methods.

        (WebKit::WebAutomationSession::platformSimulateKeyStroke):
        (WebKit::WebAutomationSession::platformSimulateKeySequence):
        Add stubs for other platforms.

        * UIProcess/Automation/WebAutomationSession.h: Add new
        protocol command handler and platform simulation methods.

        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformSimulateKeyStroke):
        (WebKit::WebAutomationSession::platformSimulateKeySequence):
        These methods implement keyboard simulation for AppKit, used
        by the Mac port. In the keystroke case, figure out the AppKit
        keyCode for the key as well as any key modifiers that should
        be included with the key event. Keep track of sticky modifiers
        and update the session state appropriately. In the key sequence
        case, split the string into combining character sequences and
        send a 'key up/down'. This is a weird way to send non-ASCII
        text, so a better alternative should be explored in the future.

2016-03-30  Brady Eidson  <beidson@apple.com>

        Make BlobData use ThreadSafeSharedBuffer instead of RawData.
        https://bugs.webkit.org/show_bug.cgi?id=156041

        Reviewed by Alex Christensen.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::filesInBlob):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<BlobPart>::decode):

2016-03-30  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r198856.

        Broke the tests on the Apple El Capitan Release WK2 (Tests)
        bot. Further investigation needed.

        Reverted changeset:

        "REGRESSION (r194660): Navigating to HTTPS sites may fail with
        error"
        https://bugs.webkit.org/show_bug.cgi?id=155455
        http://trac.webkit.org/changeset/198856

2016-03-30  Daniel Bates  <dabates@apple.com>

        REGRESSION (r194660): Navigating to HTTPS sites may fail with error
        https://bugs.webkit.org/show_bug.cgi?id=155455
        <rdar://problem/24308793>

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where navigating to an HTTPS site may fail because the Security Framework uses
        a cache directory that it does not have permission to use.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::codeSigningIdentifierForProcess): Queries the Security Framework for the code signed
        bundle identifier/code signing identifier.
        (WebKit::ChildProcess::initializeSandbox): Use the client identifier as part of the user directory
        suffix. Verify that the client identifier matches the code signed bundled identifier/code
        signing identifier for the code signed app/tool. Fix minor code style issue; use a C++-style cast
        instead of a C-style cast when casting an OSStatus to a long.
        (WebKit::findSecCodeForProcess): Deleted; incorporated logic into WebKit::codeSigningIdentifierForProcess().

2016-03-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Use references instead of pointers in scrollbar-related code
        https://bugs.webkit.org/show_bug.cgi?id=155998

        Reviewed by Dean Jackson.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::convertFromScrollbarToContainingView):
        (WebKit::PDFPlugin::convertFromContainingViewToScrollbar):
        (WebKit::PDFPlugin::invalidateScrollbarRect):

2016-03-29  David Kilzer  <ddkilzer@apple.com>

        REGRESSION: Yosemite-only: com.apple.WebKit.Plugin.32.Development crashed in PluginProcessShim.dylib: WebKit::shimMachVMMap + 26
        <http://webkit.org/b/156000>
        <rdar://problem/25272133>

        Reviewed by Joseph Pecoraro.

        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shimMachVMMap): Add SUPPRESS_ASAN attribute on
        Yosemite.

2016-03-28  Enrica Casucci  <enrica@apple.com>

        When moving focus from one select element to another (iPhone) the value is committed to the newly focused element.
        https://bugs.webkit.org/show_bug.cgi?id=155958
        rdar://problem/22738524

        Reviewed by Tim Horton.

        We should not delay the call to endEditing until we receive
        stopAssistingNode, because by then the assisted node might have already
        changed. We need to call endEditing to commit potential changes every
        time we tap. This way we can make sure the editing session on the select
        element has been completed. This affects only single select elements on
        iPhone, where the change to the actual DOM element is delayed until we
        stop interacting with the element. On iPad or for multi-select elements,
        the change to the DOM happens immediately.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView _attemptClickAtLocation:]):
        (-[WKContentView _stopAssistingNode]):

2016-03-29  Brian Burg  <bburg@apple.com>

        Unreviewed build fix after r198793.

        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.mm:
        The wasEventSynthesizedForAutomation method should only be available on Mac.

2016-03-29  Brian Burg  <bburg@apple.com>

        Unreviewed build fix after r198792.

        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction):
        We (still) can't use lightweight generics in Objective-C code.
        Also, use RetainPtr instead of new, since this is not ARC code.

2016-03-29  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build after r198792.

        * PlatformMac.cmake:

2016-03-29  Brian Burg  <bburg@apple.com>

        Web Automation: Add SPI to tell whether an NSEvent was synthesized for automation
        https://bugs.webkit.org/show_bug.cgi?id=155963
        <rdar://problem/25405747>

        Reviewed by Timothy Hatcher.

        Tag all NSEvents that were synthesized with an associated object before sending.
        Do all associated object work below the API layer so we don't get into trouble
        using things that may be guarded by WK_API_ENABLED.

        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.mm:
        (-[_WKAutomationSession wasEventSynthesizedForAutomation:]):
        Forward to the wrapped session object.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::sendSynthesizedEventsToPage):
        Tag outgoing NSEvents with the session identifier as an associated object.

        (WebKit::WebAutomationSession::wasEventSynthesizedForAutomation):
        Check an incoming NSEvent to see if its associated object is the session identifier.

2016-03-28  Brian Burg  <bburg@apple.com>

        Web Automation: implement Automation.performMouseInteraction
        https://bugs.webkit.org/show_bug.cgi?id=155606
        <rdar://problem/25227576>

        Reviewed by Timothy Hatcher.

        This method implements common mouse interactions by synthesizing native events.
        The creation and dispatching of simulated events is implemented separately per
        application/window/event framework. This patch adds an implementation for ports
        that use AppKit.

        The event is created synthetically in a platform-specific way and delivered to
        the platform's window in the UIProcess. The event goes through all the
        layers of processing that a real mouse event could go through once it reaches
        WebKit itself.

        * UIProcess/Automation/Automation.json: Add new enums and command.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::protocolModifierToWebEventModifier):
        (WebKit::WebAutomationSession::performMouseInteraction): Added.
        Clip the requested cursor position so that it stays within the selected window's
        frame and doesn't wander off into other windows or applications. Fire it using
        the platform-specific simulation method.

        (WebKit::WebAutomationSession::platformSimulateMouseInteraction): Added.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Cocoa/WebAutomationSessionCocoa.mm:
        (WebKit::WebAutomationSession::platformSimulateMouseInteraction): Added.
        Convert Automation protocol values to AppKit values. Simulate and dispatch
        one or more events depending on the desired interaction.
        * WebKit2Prefix.h: Include AppKitCompatibilityDeclarations.h so newer
        NSEventTypes can be used.

2016-03-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Follow up to r198580.

        Simplify the code even more as suggested by Darin.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setViewNeedsDisplay):

2016-03-28  Alex Christensen  <achristensen@webkit.org>

        Fix Mac Ninja build after r198766.

        * CMakeLists.txt:

2016-03-28  Brady Eidson  <beidson@apple.com>

        Modern IDB: Remove abstract base classes for all IDB DOM classes.
        https://bugs.webkit.org/show_bug.cgi?id=155951

        Reviewed by Alex Christensen.

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:

2016-03-28  Brian Burg  <bburg@apple.com>

        Web Automation: add commands to move and resize a browsing context's window
        https://bugs.webkit.org/show_bug.cgi?id=155349
        <rdar://problem/25104911>

        Reviewed by Timothy Hatcher.

        Parse the new origin or size and request the window to change to the
        new frame. This calls through to PageUIClient::setWindowFrame().

        * UIProcess/Automation/Automation.json:
        Add new enum values for protocol parsing error cases.
        Add new commands.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::resizeWindowOfBrowsingContext):
        (WebKit::WebAutomationSession::moveWindowOfBrowsingContext):
        Added. Parse the incoming payload and bail if nothing would happen
        or the values are not usable or out of range. Complain if a change
        did not happen when the requested and actual size are different.

        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/WebPageProxy.h: Move setWindowFrame to be public.

2016-03-28  Brian Burg  <bburg@apple.com>

        Web Automation: split protocol object BrowsingContext.windowFrame into two separate members
        https://bugs.webkit.org/show_bug.cgi?id=155952
        <rdar://problem/25393597>

        Reviewed by Timothy Hatcher.

        Using the name 'windowFrame' causes conflicts with some Objective-C code.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::buildBrowsingContextForPage):

2016-03-28  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake] Unreviewed build fix after r198736.
        https://bugs.webkit.org/show_bug.cgi?id=155221

        Unreviewed.

        * CMakeLists.txt: Fix typo, add WebAutomationSession.cpp and declare JavaScriptCore_SCRIPTS_DIR.
        * WebProcess/Automation/WebAutomationSessionProxy.h: Add missing include.

2016-03-28  Alex Christensen  <achristensen@webkit.org>

        Use std::exchange for std::functions instead of WTFMove
        https://bugs.webkit.org/show_bug.cgi?id=155950
        rdar://problem/25348817

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::setPendingDownloadID):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        This makes the member variable nullptr when the value is moved so we don't use it again.

2016-03-28  Brian Burg  <bburg@apple.com>

        Web Automation: report the browsing context's window frame (size and origin)
        https://bugs.webkit.org/show_bug.cgi?id=155323
        <rdar://problem/25094089>

        Reviewed by Timothy Hatcher.

        To prepare for implementing resize and move commands, add a
        windowFrame member to the browsing context protocol type.

        * UIProcess/Automation/Automation.json:
        Add a frame Rect to BrowsingContext.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::handleForWebPageProxy):
        (WebKit::WebAutomationSession::buildBrowsingContextForPage):
        Extract the code to build a BrowsingContext object. Add
        code to calculate and insert the page's window frame size.

        (WebKit::WebAutomationSession::getBrowsingContexts):
        (WebKit::WebAutomationSession::getBrowsingContext):
        (WebKit::WebAutomationSession::createBrowsingContext):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        Refactoring as above.

        * UIProcess/Automation/WebAutomationSession.h:
        Adjust signatures.

        * UIProcess/WebPageProxy.h: Make getWindowFrame public.

2016-03-28  Brian Burg  <bburg@apple.com>

        Unreviewed, fix the build.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        InspectorProtocolObjects.h was renamed to AutomationProtocolObjects.h.

2016-03-28  Chris Dumez  <cdumez@apple.com>

        Disk cache speculative validation requests do not have the 'Referer' HTTP header set
        https://bugs.webkit.org/show_bug.cgi?id=155890
        <rdar://problem/25279962>

        Reviewed by Antti Koivisto.

        Disk cache speculative validation requests did not have the 'Referer'
        HTTP header set. This was breaking some streaming sites (such as
        twitch.tv).

        We now store all the original request's HTTP headers in the disk cache
        so we can re-use them for the speculative validation requests. When the
        actual request comes later on, we also make sure that the HTTP headers
        used in the speculative validation request match the ones from the
        effective request. If they don't we don't use the speculatively
        validated resource as the server may return a different resource in
        such case.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        Pass the effective ResourceRequest to the NetworkCacheSpeculativeLoadManager
        so it can check that the speculative validation request's HTTP headers
        match the effective request's headers.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::PreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::revalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::wasRevalidated):
        We now have a member in PreloadedEntry to keep the request used for validation, if
        speculative validation was done. This is so that we can compare its HTTP headers
        with the ones of the effective request later on.

        (WebKit::NetworkCache::dumpHTTPHeadersDiff):
        Debug function that prints which HTTP headers did not match in the speculative
        validation request and in the effective request.

        (WebKit::NetworkCache::requestsHeadersMatch):
        New utility function to check that the speculative validation request's HTTP
        headers match the ones of the effective requests. Note that we allow for
        headers related to validation to differ.

        (WebKit::NetworkCache::SpeculativeLoadManager::canUsePreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::canUsePendingPreload):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieve):
        Check that the speculative validation request's HTTP headers match the
        ones of the effective request. If they don't then do not use the
        speculatively validated resource.

        (WebKit::NetworkCache::SpeculativeLoadManager::addPreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:

        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode):
        (WebKit::NetworkCache::SubresourceInfo::decode):
        (WebKit::NetworkCache::SubresourcesEntry::encodeAsStorageRecord):
        (WebKit::NetworkCache::SubresourcesEntry::decodeStorageRecord):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):
        - Keep all the request's headers in SubresourceInfo instead of just the
          'User-Agent' one.
        - Drop the custom copy constructor / assignment operator for
          SubresourceInfo that were making isolated copies on the members.
          We technically don't need to use SubresourceInfo objects in other
          threads than the main one. In SpeculativeLoadManager::preloadEntry(),
          we now make capture a SubresourceInfo* in the lambda to avoid calling
          the copy constructor. We also make sure that the object gets destroyed
          in the lambda function, which is executed in the main thread.

2016-03-25  Timothy Hatcher  <timothy@apple.com>

        Web Automation: Add Automation protocol commands to handle JavaScript dialogs

        https://bugs.webkit.org/show_bug.cgi?id=155888
        rdar://problem/25360218

        Reviewed by Brian Burg.

        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::isShowingJavaScriptDialogOnPage): Added.
        (API::AutomationSessionClient::dismissCurrentJavaScriptDialogOnPage): Added.
        (API::AutomationSessionClient::acceptCurrentJavaScriptDialogOnPage): Added.
        (API::AutomationSessionClient::messageOfCurrentJavaScriptDialogOnPage): Added.
        (API::AutomationSessionClient::setUserInputForCurrentJavaScriptPromptOnPage): Added.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:

        * UIProcess/Automation/Automation.json: Added new commands.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::isShowingJavaScriptDialog): Added.
        (WebKit::WebAutomationSession::dismissCurrentJavaScriptDialog): Added.
        (WebKit::WebAutomationSession::acceptCurrentJavaScriptDialog): Added.
        (WebKit::WebAutomationSession::messageOfCurrentJavaScriptDialog): Added.
        (WebKit::WebAutomationSession::setUserInputForCurrentJavaScriptPrompt): Added.
        * UIProcess/Automation/WebAutomationSession.h:

        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient): Added.
        (WebKit::AutomationSessionClient::isShowingJavaScriptDialogOnPage): Added.
        (WebKit::AutomationSessionClient::dismissCurrentJavaScriptDialogOnPage): Added.
        (WebKit::AutomationSessionClient::acceptCurrentJavaScriptDialogOnPage): Added.
        (WebKit::AutomationSessionClient::messageOfCurrentJavaScriptDialogOnPage): Added.
        (WebKit::AutomationSessionClient::setUserInputForCurrentJavaScriptPromptOnPage): Added.

2016-03-24  Timothy Hatcher  <timothy@apple.com>

        Web Automation: Add commands to compute layout of an element

        https://bugs.webkit.org/show_bug.cgi?id=155841
        rdar://problem/25340075

        Reviewed by Brian Burg.

        * UIProcess/Automation/Automation.json: Added computeElementLayout.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::computeElementLayout): Added.
        (WebKit::WebAutomationSession::didComputeElementLayout): Added.
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.messages.in:
        (DidComputeElementLayout): Added.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::computeElementLayout): Added.
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:
        (ComputeElementLayout): Added.

2016-03-18  Timothy Hatcher  <timothy@apple.com>

        Web Automation: Add Automation protocol commands to resolve frames as handles

        https://bugs.webkit.org/show_bug.cgi?id=155650
        rdar://problem/25242422

        Reviewed by Brian Burg.

        * UIProcess/Automation/Automation.json:
        Added resolveFrameHandle and resolveParentFrameHandle.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::webFrameProxyForHandle): Added.
        (WebKit::WebAutomationSession::handleForWebFrameID): Added.
        (WebKit::WebAutomationSession::handleForWebFrameProxy): Added.
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction): Use frame handles now.
        (WebKit::WebAutomationSession::resolveChildFrameHandle): Added.
        (WebKit::WebAutomationSession::didChildResolveFrame): Added.
        (WebKit::WebAutomationSession::resolveParentFrameHandle): Added.
        (WebKit::WebAutomationSession::didResolveParentFrame): Added.
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.messages.in:
        (DidResolveChildFrame): Added.
        (DidResolveParentFrame): Added.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::WebAutomationSessionProxy::elementForNodeHandle): Added.
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithOrdinal): Added.
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle): Added.
        (WebKit::WebAutomationSessionProxy::resolveChildFrameWithName): Added.
        (WebKit::WebAutomationSessionProxy::resolveParentFrame): Added.
        (WebKit::WebAutomationSessionProxy::focusFrame): Added.
        * WebProcess/Automation/WebAutomationSessionProxy.h:
        * WebProcess/Automation/WebAutomationSessionProxy.messages.in:
        (ResolveChildFrameWithOrdinal): Added.
        (ResolveChildFrameWithNodeHandle): Added.
        (ResolveChildFrameWithName): Added.
        (ResolveParentFrame): Added.
        (FocusFrame): Added.

        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (AutomationSessionProxy.prototype.nodeForIdentifier): Added.
        Public method that eats the exception thrown by the private method.

2016-03-17  Timothy Hatcher  <timothy@apple.com>

        Web Automation: Add Automation.evaluateJavaScriptFunction

        https://bugs.webkit.org/show_bug.cgi?id=155524
        rdar://problem/25181888

        Reviewed by Joseph Pecoraro.

        * UIProcess/Automation/Automation.json: Added evaluateJavaScriptFunction command.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::evaluateJavaScriptFunction): Added.
        (WebKit::WebAutomationSession::didEvaluateJavaScriptFunction): Added.
        * UIProcess/Automation/WebAutomationSession.h:
        * UIProcess/Automation/WebAutomationSession.messages.in: Added didEvaluateJavaScriptFunction.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp:
        (WebKit::toJSArray): Added.
        (WebKit::callPropertyFunction): Added.
        (WebKit::evaluateJavaScriptCallback): Added.
        (WebKit::WebAutomationSessionProxy::didClearWindowObjectForFrame): Dispatch pending callbacks as errors.
        (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction): Added.
        (WebKit::WebAutomationSessionProxy::didEvaluateJavaScriptFunction): Added.
        * WebProcess/Automation/WebAutomationSessionProxy.h:

        * WebProcess/Automation/WebAutomationSessionProxy.js:
        (AutomationSessionProxy): Added maps for node handles.
        (AutomationSessionProxy.prototype.evaluateJavaScriptFunction): Added.
        (AutomationSessionProxy.prototype._jsonParse): Added.
        (AutomationSessionProxy.prototype._jsonStringify): Added.
        (AutomationSessionProxy.prototype._reviveJSONValue): Added.
        (AutomationSessionProxy.prototype._replaceJSONValue): Added.
        (AutomationSessionProxy.prototype._createNodeHandle): Added.
        (AutomationSessionProxy.prototype._nodeForIdentifier): Added.
        (AutomationSessionProxy.prototype._identifierForNode): Added.

        * WebProcess/Automation/WebAutomationSessionProxy.messages.in: Added evaluateJavaScriptFunction.

2016-03-14  Timothy Hatcher  <timothy@apple.com>

        Add WebAutomationSessionProxy for WebProcess side automation tasks

        https://bugs.webkit.org/show_bug.cgi?id=155221
        rdar://problem/25054868

        Reviewed by Joseph Pecoraro.

        * CMakeLists.txt: Add build step to build-in WebAutomationSessionProxy.js.
        * DerivedSources.make: Ditto.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::~WebAutomationSession):
        (WebKit::WebAutomationSession::setProcessPool): Add / remove message receiver.
        * UIProcess/Automation/WebAutomationSession.h:

        * UIProcess/Automation/WebAutomationSession.messages.in: Added.
        Test message to get things to build.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::removeMessageReceiver):
        (WebKit::WebProcessPool::setAutomationSession):
        * UIProcess/WebProcessPool.h:

        * WebKit2.xcodeproj/project.pbxproj: Added new files.

        * WebProcess/Automation/WebAutomationSessionProxy.cpp: Added.
        (WebKit::toJSString):
        (WebKit::toJSValue):
        (WebKit::WebAutomationSessionProxy::WebAutomationSessionProxy):
        (WebKit::WebAutomationSessionProxy::~WebAutomationSessionProxy):
        (WebKit::evaluate):
        (WebKit::createUUID):
        (WebKit::WebAutomationSessionProxy::scriptObjectForFrame):
        (WebKit::WebAutomationSessionProxy::didClearWindowObjectForFrame):
        Create a script object per frame that is evaluated from WebAutomationSessionProxy.js.
        Clear the script object when the window object is cleared.

        * WebProcess/Automation/WebAutomationSessionProxy.h: Added.
        (WebKit::WebAutomationSessionProxy::test):
        Added test message to let the messages files build.

        * WebProcess/Automation/WebAutomationSessionProxy.js: Added.

        * WebProcess/Automation/WebAutomationSessionProxy.messages.in: Added.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        Call WebAutomationSessionProxy::didClearWindowObjectForFrame to clear the script object.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureAutomationSessionProxy):
        (WebKit::WebProcess::destroyAutomationSessionProxy):
        Creates and destroys the WebAutomationSessionProxy when the UIProcess WebAutomationSession
        is set or removed on the WebProcessPool.

        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::automationSessionProxy): Added.

        * WebProcess/WebProcess.messages.in: Added. Test message to get things to build.

2016-03-28  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build after r198728.

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

2016-03-28  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix for the threaded compositor feature after r198655.
        Adjust the first parameter of ThreadSafeCoordinatedSurface::copyToTexture().

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp:
        (WebKit::ThreadSafeCoordinatedSurface::copyToTexture):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.h:

2016-03-27  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] REGRESSION(r188793): It made 200 layout tests and Bindings/event-target-wrapper.html performance test fail
        https://bugs.webkit.org/show_bug.cgi?id=148470

        Reviewed by Darin Adler.

        UI events are suppressed in webPage after r188793.
        I revert the r136133 for passing the events to WebPage

        * WebProcess/WebPage/WebPage.cpp: Removed the codes which was uploaded at r136133.
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::touchEvent):
        (WebKit::WebPage::canHandleUserEvents): Deleted.
        * WebProcess/WebPage/WebPage.h:

2016-03-26  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build.

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

2016-03-26  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build.

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

2016-03-26  Dean Jackson  <dino@apple.com>

        Fix build after my most recent commit.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (WebKit::bufferFormat): Delete the WebKitAdditions include.

2016-03-25  Dean Jackson  <dino@apple.com>

        Move extended color detection into Open Source
        https://bugs.webkit.org/show_bug.cgi?id=155909
        <rdar://problem/25369754>

        Reviewed by Anders Carlsson.

        The code for detecting extended color displays
        was hidden while the iPad Pro 9.7" was in development.
        Now it is public, move the detection to Open Source.

        While doing this, add a new method to PlatformScreen
        so that we have a more obvious way to detect such
        displays.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::bufferFormat): No need to use WebKitAdditions any
        more.

2016-03-26  Dan Bernstein  <mitz@apple.com>

        Treat SHA-1-signed certificates as insecure by default.

        Reviewed by Sam Weinig.

        * UIProcess/API/APIPageConfiguration.h: Initialize m_treatsSHA1SignedCertificatesAsInsecure
          to true.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Initialize _treatsSHA1SignedCertificatesAsInsecure to YES.

2016-03-25  Dean Jackson  <dino@apple.com>

        Remove use of extern "C" to include QuartzCore files
        https://bugs.webkit.org/show_bug.cgi?id=155905

        Reviewed by Anders Carlson.

        We can avoid having to wrap constants in extern "C", since they
        are mangled the same in both C and C++.

        * UIProcess/mac/RemoteLayerTreeHost.mm: Remove the
        mention of CABackdropLayer.

2016-03-25  Brian Burg  <bburg@apple.com>

        Web Inspector: protocol generator should prefix C++ filenames with the protocol group
        https://bugs.webkit.org/show_bug.cgi?id=155859
        <rdar://problem/25349859>

        Reviewed by Alex Christensen and Joseph Pecoraro.

        Adjust header include and build system paths.

        * CMakeLists.txt:
        Revert the workaround introduced in r198659 since this change fixes the
        underlying issue.

        * DerivedSources.make:
        * UIProcess/Automation/WebAutomationSession.cpp:
        * UIProcess/Automation/WebAutomationSession.h:
        * WebKit2.xcodeproj/project.pbxproj:

2016-03-25  Alex Christensen  <achristensen@webkit.org>

        Remove unused lambda capture after r196984.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        resourceResponse is not used in the lambda.

2016-03-25  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build.

        * PlatformMac.cmake:

2016-03-24  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build.

        * CMakeLists.txt:
        Temporarily add DERIVED_SOURCES_JAVASCRIPTCORE_DIR after DERIVED_SOURCES_WEBCORE_DIR,
        because both contain a unique header named InspectorBackendDispatchers.h and this include
        order includes the correct one for WebKit2 first.
        * PlatformMac.cmake:
        Add new files.  Optionally link to AVFAudio.

2016-03-24  Said Abou-Hallawa  <sabouhallawa@apple,com>

        Change NativeImagePtr for CG to be RetainPtr<CGImageRef>
        https://bugs.webkit.org/show_bug.cgi?id=155412

        Reviewed by Darin Adler.

        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::createWithSurface):
        (WebKit::WebCoordinatedSurface::create):
        (WebKit::WebCoordinatedSurface::WebCoordinatedSurface):
        (WebKit::WebCoordinatedSurface::copyToTexture):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create):
        (WebKit::ShareableBitmap::createShareable):
        (WebKit::ShareableBitmap::ShareableBitmap):
        * Shared/ShareableBitmap.h:
        Replace PassRefPtr with RefPtr and use WTFMove() instead of RefPtr::release()
        when passing the RefPtr.
        
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::createSurfaceFromData):
        (WebKit::ShareableBitmap::createCairoSurface):
        Replace PassRefPtr with RefPtr.
        
        (WebKit::ShareableBitmap::createImage):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createImage):
        Replace PassRefPtr with RefPtr and use the move semantics when calling
        BitmapImage::create().

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::createCoordinatedSurface):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::createCoordinatedSurface):
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        Replace PassRefPtr with RefPtr

2016-03-24  Enrica Casucci  <enrica@apple.com>

        Adopt new SPI from DataDetectorsCore to decide link behavior.
        https://bugs.webkit.org/show_bug.cgi?id=155780
        rdar://problem/25303631

        Reviewed by Sam Weinig.

        Changed use of data detection functions to take
        a reference to Element instead of a pointer.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::commitPotentialTap):
        (WebKit::WebPage::getPositionInformation):

2016-03-24  Chris Dumez  <cdumez@apple.com>

        [WK2] Disable network cache speculative validation by default
        https://bugs.webkit.org/show_bug.cgi?id=155857
        <rdar://problem/25233210>

        Reviewed by Alex Christensen.

        Disable network cache speculative validation by default. Clients such
        as Safari now use the API added in r198544 to enable if they want.

        * UIProcess/API/APIProcessPoolConfiguration.h:

2016-03-24  Alex Christensen  <achristensen@webkit.org>

        Fix null dereferencing in NetworkLoad::continueCanAuthenticateAgainstProtectionSpace
        https://bugs.webkit.org/show_bug.cgi?id=155799
        rdar://25289012

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        Null-check all the things!

2016-03-23  Tim Horton  <timothy_horton@apple.com>

        MiniBrowser doesn't use accelerated drawing in WebKit2 windows if a WebKit1 window was opened first
        https://bugs.webkit.org/show_bug.cgi?id=141576
        <rdar://problem/25304548>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences init]):
        Make the NSUserDefaults key prefix for debug preferences (the only ones read
        from NSUserDefaults) "WebKitDebug" instead of just "WebKit" so that they
        don't conflict with the names that WebKit1 registers default values for.

2016-03-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Use Region instead of IntRect in PageClient and WebPageProxy setViewNeedsDisplay method
        https://bugs.webkit.org/show_bug.cgi?id=155747

        Reviewed by Darin Adler.

        This way instead of calling setViewNeedsDisplay() for every
        rectangle in the damage area, we can build a region and call
        setViewNeedsDisplay() once. GTK+ has API to queue a redraw for a
        given region, so we also avoid scheduling multiple redraws in GTK+
        port.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setViewNeedsDisplay): Convert the Region
        into a cairo_region_t and use gtk_widget_queue_draw_region()
        instyead of gtk_widget_queue_draw_area().
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate): Build a Region
        with the damage rectangles and call
        WebPageProxy::setViewNeedsDisplay() once.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setViewNeedsDisplay):
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::setViewNeedsDisplay):
        * UIProcess/efl/WebView.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setViewNeedsDisplay):

2016-03-22  Tim Horton  <timothy_horton@apple.com>

        Invoking a link preview on a complex link (e.g. an image) results in an empty TextIndicator
        https://bugs.webkit.org/show_bug.cgi?id=155779
        <rdar://problem/22408793>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):
        Use the TextIndicator mode where we give up on selection-only snapshotting
        and just paint all content on Mac, similar to what we do for 3D Touch indicators.

2016-03-22  Alex Christensen  <achristensen@webkit.org>

        Fix HTTPS on Mac using NSURLSession after r198457
        https://bugs.webkit.org/show_bug.cgi?id=155774
        <rdar://problem/25301027>

        Reviewed by Anders Carlsson.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::NetworkSession):
        r198457 was intended to fix an issue on iOS and have no change in behavior on Mac.
        It did have a subtle change in behavior, setting the source application bundle identifier
        on iOS and was causing problems with HTTPS connections using NSURLSession, so this patch
        reverts that change.

2016-03-22  Beth Dakin  <bdakin@apple.com>

        Advanced spell checking should be guarded behind 
        HAVE(ADVANCED_SPELL_CHECKING)
        https://bugs.webkit.org/show_bug.cgi?id=155738

        Reviewed by Geoff Garen.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::requestCandidatesForSelectionIfNeeded):
        (WebKit::WebViewImpl::handleRequestedCandidates):
        (WebKit::WebViewImpl::insertText):
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):
        * config.h:

2016-03-22  Chris Dumez  <cdumez@apple.com>

        Add a setting to let the client toggle support for network cache speculative validation
        https://bugs.webkit.org/show_bug.cgi?id=155622
        <rdar://problem/25233209>

        Reviewed by Antti Koivisto.

        Copy new m_diskCacheSpeculativeValidationEnabled member introduced
        in r198470 in ProcessPoolConfiguration::copy().

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):

2016-03-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebInspector broken after r197620
        https://bugs.webkit.org/show_bug.cgi?id=155497
        <rdar://problem/25171910>

        Reviewed by Philippe Normand.

        Stop registering resource:// URLs as local, because they are not
        like a local file at all. Compare also the URL protocols when
        checking whether requested URL is main or test inspector page
        instead of checking that the protocol is registered as local.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::isMainOrTestInspectorPage): Compare also the URL protocols.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Do not
        set setAllowFileAccessFromFileURLs setting to true.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Do not
        register resource:// URLS as local.

2016-03-22  Alberto Garcia  <berto@igalia.com>

        Unreviewed typo fixes.

        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::WebMemorySampler::sampleWebKit): "Commited" => "Committed"
        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (webkit_file_chooser_request_select_files): "choosen" => "chosen"
        * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp:
        (webkit_user_media_permission_request_class_init): "Wether" => "Whether"

2016-03-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove unused display and scroll view methods from PageClient and WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=155744

        Reviewed by Andreas Kling.

        We have displayView(), canScrollView() and scrollView() that are
        used by DrawingAreaProxyImpl which is only used by GTK+ port that
        doesn't implement those methods.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::displayView): Deleted.
        (WebKit::PageClientImpl::scrollView): Deleted.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate): Update the
        whole view when scrolling, or the damage area otherwise.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::displayView): Deleted.
        (WebKit::WebPageProxy::canScrollView): Deleted.
        (WebKit::WebPageProxy::scrollView): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::displayView): Deleted.
        (WebKit::WebView::scrollView): Deleted.
        * UIProcess/efl/WebView.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::displayView): Deleted.
        (WebKit::PageClientImpl::canScrollView): Deleted.
        (WebKit::PageClientImpl::scrollView): Deleted.
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::displayView): Deleted.
        (WebKit::PageClientImpl::canScrollView): Deleted.
        (WebKit::PageClientImpl::scrollView): Deleted.

2016-03-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Polish std::function<> usage in ThreadedCompositor, CoordinatedGraphicsScene
        https://bugs.webkit.org/show_bug.cgi?id=155726

        Reviewed by Darin Adler.

        Adjust the methods in ThreadedCompositor and CoordinatedGraphicsScene
        classes to accept std::function<> arguments via rvalue references. This
        should prevent both unnecessary copies and moves.

        Fix lambda expressions that are most commonly used to construct the
        std::function<> objects so that they don't capture-by-value by default,
        but instead list the captured values verbosely. This part alone exposed
        an issue in ThreadedCompositor::didChangeVisibleRect() where we were
        capturing the `this' value by default, instead of a protector RefPtr.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::dispatchOnMainThread):
        (WebKit::CoordinatedGraphicsScene::dispatchOnClientRunLoop):
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebKit::CoordinatedGraphicsScene::onNewBufferAvailable):
        (WebKit::CoordinatedGraphicsScene::commitSceneState):
        (WebKit::CoordinatedGraphicsScene::purgeGLResources):
        (WebKit::CoordinatedGraphicsScene::commitScrollOffset):
        (WebKit::CoordinatedGraphicsScene::appendUpdate):
        (WebKit::CoordinatedGraphicsScene::setActive):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::CompositingRunLoop::CompositingRunLoop):
        (WebKit::CompositingRunLoop::callOnCompositingRunLoop):
        (WebKit::ThreadedCompositor::setNeedsDisplay):
        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing):
        (WebKit::ThreadedCompositor::setDeviceScaleFactor):
        (WebKit::ThreadedCompositor::didChangeViewportSize):
        (WebKit::ThreadedCompositor::didChangeViewportAttribute):
        (WebKit::ThreadedCompositor::didChangeContentsSize):
        (WebKit::ThreadedCompositor::scrollTo):
        (WebKit::ThreadedCompositor::scrollBy):
        (WebKit::ThreadedCompositor::didChangeVisibleRect):
        (WebKit::ThreadedCompositor::callOnCompositingThread):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:

2016-03-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Prefer RunLoop::main().dispatch() over callOnMainThread()
        https://bugs.webkit.org/show_bug.cgi?id=155725

        Reviewed by Darin Adler.

        Unify the CoordinatedGraphics code in the WebKit2 layer to use RunLoop
        for dispatching tasks on either the main thread or the composition thread
        in case of using the threaded compositor. The latter is already the default,
        so this patch just replaces calls to callOnMainThread() with calls to
        RunLoop::main().dispatch().

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::dispatchOnMainThread):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::didChangeVisibleRect):

2016-03-18  Enrica Casucci  <enrica@apple.com>

        Enable preview of images as attachments.
        https://bugs.webkit.org/show_bug.cgi?id=155674
        rdar://problem/25242656

        Reviewed by Darin Adler.

        If the client cannot handle image preview, but can handle attachments,
        let them handle images as attachments.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):

2016-03-20  Dan Bernstein  <mitz@apple.com>

        [Mac] Determine TARGET_MAC_OS_X_VERSION_MAJOR from MACOSX_DEPLOYMENT_TARGET rather than from MAC_OS_X_VERSION_MAJOR
        https://bugs.webkit.org/show_bug.cgi?id=155707
        <rdar://problem/24980691>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Set TARGET_MAC_OS_X_VERSION_MAJOR based on the last
          component of MACOSX_DEPLOYMENT_TARGET.
        * Configurations/DebugRelease.xcconfig: For engineering builds, preserve the behavior of
          TARGET_MAC_OS_X_VERSION_MAJOR being the host’s OS version.

2016-03-20  Darin Adler  <darin@apple.com>

        Disable Caches in Safari's Develop menu does not disable caches.
        https://bugs.webkit.org/show_bug.cgi?id=64483

        Reviewed by Antti Koivisto.

        Moved functions from WKPreferences to WKPage.

        * Shared/WebPreferencesDefinitions.h: Removed ResourceCachingDisabled.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetResourceCachingDisabled): Added.
        (WKPageSetResourceCachingDisabled): Added.
        * UIProcess/API/C/WKPagePrivate.h: Added above functions.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetResourceCachingDisabled): Deleted.
        (WKPreferencesGetResourceCachingDisabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h: Deleted above functions.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setResourceCachingDisabled): Added.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isResourceCachingDisabled): Added.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Removed code to set the setting
        for resourceCachingDisabled..
        (WebKit::WebPage::setResourceCachingDisabled): Added.
        * WebProcess/WebPage/WebPage.h: Declared setResourceCachingDisabled.
        * WebProcess/WebPage/WebPage.messages.in: Added SetResourceCachingDisabled.

2016-03-20  Dan Bernstein  <mitz@apple.com>

        Update build settings

        Rubber-stamped by Andy Estes.

        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2016-03-19  Chris Dumez  <cdumez@apple.com>

        Add a setting to let the client toggle support for network cache speculative validation
        https://bugs.webkit.org/show_bug.cgi?id=155622
        <rdar://problem/25233209>

        Reviewed by Darin Adler.

        Add SPI to toggle support for network cache speculative validation.
        Enable network cache speculative validation by default for now, until
        I have a chance to update the clients to use the new SPI.

        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDiskCacheSpeculativeValidationEnabled):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration diskCacheSpeculativeValidationEnabled]):
        (-[_WKProcessPoolConfiguration setDiskCacheSpeculativeValidationEnabled:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2016-03-19  Yongjun Zhang  <yongjun_zhang@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=155664
        Consider to cap the size of session history data.

        In iOS, if the total history entries data exceeds a threshold (2MB at the moment), don't
        accumulate more data into the session state blob.

        Reviewed by Darin Adler.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeSessionHistory): Stop encoding further history entries data into session state
            if the total size exceed 2MB in iOS.

2016-03-18  Alex Christensen  <achristensen@webkit.org>

        Give NSURLSessionConfiguration information about parent process
        https://bugs.webkit.org/show_bug.cgi?id=155661
        rdar://problem/25225850

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::sessionID):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::partitionName):
        (WebKit::NetworkProcess::sourceApplicationAuditData):
        (WebKit::NetworkProcess::cfURLCacheOrigins):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::globalCustomProtocolManager):
        (WebKit::globalSourceApplicationAuditTokenData):
        (WebKit::NetworkSession::setCustomProtocolManager):
        (WebKit::NetworkSession::setSourceApplicationAuditTokenData):
        (WebKit::NetworkSession::defaultSession):
        (WebKit::NetworkSession::NetworkSession):
        Tell the NSURLSessionConfiguration what the source application bundle identifier
        and audit token data are so we can correctly keep track of which application is using data.
        This also gives CFNetwork enough information to determine if the application is allowed to
        use cell data in Settings, so it seems like we do not need to explicitly set allowsCellularAccess.
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::sourceApplicationAuditData):
        (WebKit::RemoteNetworkingContext::sourceApplicationIdentifier):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::sourceApplicationAuditData):
        (WebKit::WebFrameNetworkingContext::sourceApplicationIdentifier):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformTerminate):
        (WebKit::WebProcess::sourceApplicationAuditData):
        (WebKit::WebProcess::initializeSandbox):
        I moved the calls to getAuditToken from RemoteNetworkingContext.mm and WebFrameNetworkingContext.mm 
        to NetworkProcessCocoa.mm and WebProcessCocoa.mm, respectively, to share with NetworkSession code, 
        which does not use NetworkingContexts.

2016-03-18  Simon Fraser  <simon.fraser@apple.com>

        Build fix after r198455.

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

2016-03-18  Simon Fraser  <simon.fraser@apple.com>

        Sideways-scrollable RTL document has wrong initial and reload offset in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=155660

        Reviewed by Tim Horton.

        There were two problems with the scroll position of RTL documents on initial and reload
        in WKWebView.

        First, in the delegatesScrolling() code path, ScrollView::updateScrollbars() needs to
        tell someone that the scroll origin changed, to trigger a scroll to the page origin.

        Secondly, WKWebView had scrollPosition/scrollOffset confusion in various places. In
        the restorePageState() code path, WebCore passes an exposedRect; this patch makes
        it explicit that it's an exposedContentRect, and passes scrollOrigin so that it can
        be mapped into scrollOffset-relative coordinates that the UIScrollView wants.

        When reloading an RTL page, there was an additional issue; restorePageState()
        restored the exposedRect, but then we'd see the origin change as a programmatic scroll
        to 0,0, clobbering the exposedRect. Fix by using a "_commitDidRestoreExposedRect" flag
        on the WKWebView that is used to ignore the programmatic scroll in that case.

        Ideally these changes would fix fast/scrolling/scroll-position-on-reload-rtl.html, but the
        test still fails because of timing differences between OS X and iOS.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _layerTreeCommitComplete]):
        (-[WKWebView _restorePageStateToExposedRect:scrollOrigin:scale:]):
        (-[WKWebView _scrollToContentScrollPosition:scrollOrigin:]):
        (-[WKWebView _restorePageStateToExposedRect:scale:]): Deleted.
        (-[WKWebView _scrollToContentOffset:scrollOrigin:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestScroll):
        (WebKit::PageClientImpl::layerTreeCommitComplete):
        (WebKit::PageClientImpl::restorePageState):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _layerTreeCommitComplete]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::layerTreeCommitComplete):
        (WebKit::WebPageProxy::restorePageState):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::restorePageState):

2016-03-18  Brady Eidson  <beidson@apple.com>

        NSURLSession: Set download resume data when a download fails due to an error.
        https://bugs.webkit.org/show_bug.cgi?id=155665

        Reviewed by Alex Christensen.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]): Save the resume data from the
          NSError userInfo if it exists.

2016-03-18  Chris Dumez  <cdumez@apple.com>

        Speculative revalidation requests do not have their HTTP user-agent set
        https://bugs.webkit.org/show_bug.cgi?id=155620
        <rdar://problem/24657567>

        Reviewed by Brady Eidson.

        Speculative revalidation requests do not have their HTTP user-agent set
        which could lead to different content getting returned by the server.

        To address the problem, we save the original request's 'user-agent' in
        the disk cache and re-use it later on for speculative validation
        requests.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourceInfo::encode):
        (WebKit::NetworkCache::SubresourceInfo::decode):
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):
        (WebKit::NetworkCache::SubresourceInfo::operator=):
        (WebKit::NetworkCache::SubresourcesEntry::SubresourcesEntry):
        (WebKit::NetworkCache::SubresourcesEntry::updateSubresourceLoads):
        (WebKit::NetworkCache::SubresourcesEntry::decodeStorageRecord): Deleted.
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourceInfo::SubresourceInfo):

2016-03-18  Enrica Casucci  <enrica@apple.com>

        Add id attribute to _WKActivatedElementInfo.
        https://bugs.webkit.org/show_bug.cgi?id=155666
        rdar://problem/25181956

        Reviewed by Beth Dakin.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:ID:rect:image:]):
        (-[_WKActivatedElementInfo ID]):
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:rect:image:]): Deleted.
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showAttachmentSheet]):
        (-[WKContentView _showLinkSheet]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2016-03-18  Antti Koivisto  <antti@apple.com>

        Protect against excessive cache traversal
        https://bugs.webkit.org/show_bug.cgi?id=155635
        rdar://problem/24241008

        Reviewed by Darin Adler.

        We can't handle unlimited number of parallel cache traversal requests from the client.
        We'll run out of dispatch queues and other system resources. CPU will spin.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::traverse):

            Add limit of maximum 3 traversals. When exceeded return nothing and log an error.

        * NetworkProcess/cache/NetworkCache.h:

2016-03-18  Darin Adler  <darin@apple.com>

        Disable Caches in Safari's Develop menu does not disable caches.
        https://bugs.webkit.org/show_bug.cgi?id=64483

        Reviewed by Antti Koivisto.

        * Shared/WebPreferencesDefinitions.h: Added ResourceCachingDisabled.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetResourceCachingDisabled): Added.
        (WKPreferencesGetResourceCachingDisabled): Added.
        * UIProcess/API/C/WKPreferencesRefPrivate.h: Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Push ResourceCachingDisabled setting
        into WebCore.

2016-03-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Try to fix GTK+ debug build after r198364.

        * WebProcess/gtk/WebProcessMainGtk.cpp: Use WTF::sleep().

2016-03-17  Alex Christensen  <achristensen@webkit.org>

        SpeculativeLoad needs to continue NetworkLoad when it receives a redirect response
        https://bugs.webkit.org/show_bug.cgi?id=155612

        Reviewed by Andy Estes.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):
        Call continueWillSendRequest.  Otherwise, we will hang a thread in the NetworkProcess
        if we are using ResourceHandle or we will not call the willPerformHTTPRedirection 
        completion handler if we are using NetworkSession.  This will cause us to stop loading
        from the server after the maximum number of connections is reached.

2016-03-17  Tim Horton  <timothy_horton@apple.com>

        Find-in-page indicator in Mail viewer is the wrong scale and cut off
        https://bugs.webkit.org/show_bug.cgi?id=155605
        <rdar://problem/23948165>

        Reviewed by Simon Fraser.

        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient didGetImageForMatchResult:]):
        Initialize the NSImage with the correct size, instead of inferring the
        size from the bitmap, so that we don't lose information about device pixel ratio.

2016-03-17  Anders Carlsson  <andersca@apple.com>

        Remove use of dyld_register_image_state_change_handler() in PluginProcessMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=155596

        Reviewed by Dan Bernstein.

        Use _dyld_register_func_for_add_image instead which is API. Use dladdr to find the image path given its header.

        * Platform/spi/Cocoa/DyldSPI.h: Removed.
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):
        * WebKit2.xcodeproj/project.pbxproj:

2016-03-17  Chris Dumez  <cdumez@apple.com>

        Set the WebContent process's main thread QoS to USER-INTERACTIVE
        https://bugs.webkit.org/show_bug.cgi?id=155595
        <rdar://problem/22534965>

        Reviewed by Antti Koivisto.

        Increase the WebContent process main thread's QoS to USER-INTERACTIVE
        instead of USER-INITIATED as it is drawing UI. However, use a relative
        priority of -1 so that its priority is lower than the one of the
        scrolling thread.

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

2016-03-17  Alex Christensen  <achristensen@webkit.org>

        Support manually accepting invalid SSL certificates with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=155442
        <rdar://problem/24847398>

        Reviewed by Darin Adler.

        When we click continue after getting a warning about an invalid SSL certificate, we call
        NSURLRequest setAllowsSpecificHTTPSCertificate in NetworkProcess::allowSpecificHTTPSCertificateForHost,
        which stores information in CFNetwork about the specific invalid SSL certificate we want to accept.
        If we see such a certificate during a server trust evaluation, we want to tell CFNetwork to accept it.
        This fixes a loop when going to https://badssl.com, clicking on expired, and clicking continue.

        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::transferSandboxExtensionToDownload):
        (WebKit::certificatesMatch):
        (WebKit::NetworkDataTask::allowsSpecificHTTPSCertificateForHost):
        (WebKit::NetworkDataTask::suggestedFilename):

2016-03-17  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed buildfix after r198070. Just for fun.

        * PlatformMac.cmake:

2016-03-17  Andy Estes  <aestes@apple.com>

        [Mac] Enable Content-Disposition: attachment sandbox
        https://bugs.webkit.org/show_bug.cgi?id=155578
        <rdar://problem/21886326>

        Reviewed by Dan Bernstein.

        Covered by the existing set of attachment sandbox tests, which have always been run on Mac.

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

2016-03-16  Beth Dakin  <bdakin@apple.com>

        Provide NSSpellChecker spellChecking methods with the current insertion point
        https://bugs.webkit.org/show_bug.cgi?id=155532
        -and corresponding-
        rdar://problem/24066952

        Reviewed by Simon Fraser.

        Pass the insertionPoint to the UIProcess
        * UIProcess/TextChecker.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::checkTextOfParagraph):
        (WebKit::WebPageProxy::getGuessesForWord):
        (WebKit::WebPageProxy::requestCheckingOfString):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::requestCheckingOfString):
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::requestCheckingOfString):
        (WebKit::TextChecker::checkTextOfParagraph):
        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::requestCheckingOfString):
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::ignoreWord):
        (WebKit::TextChecker::requestCheckingOfString):

        Extract the insertion point from the VisibleSelection that WebCore has 
        passed. 
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::insertionPointFromCurrentSelection):
        (WebKit::WebEditorClient::checkTextOfParagraph):
        (WebKit::WebEditorClient::getGuessesForWord):
        (WebKit::WebEditorClient::requestCheckingOfString):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2016-03-16  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r192184): CleanMyDrive 2's tutorial window is blank
        https://bugs.webkit.org/show_bug.cgi?id=155550
        <rdar://problem/24250689>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setDrawsTransparentBackground:]):
        The app is using this SPI via key-value coding, so just keeping the implementation
        is sufficient to make AppKit stop throwing an undefined key exception.
        Log once that this is deprecated (... it's also SPI) and then forward to setDrawsBackground.

2016-03-16  Daniel Bates  <dabates@apple.com>

        <video> and <audio> elements do not obey Content Security Policy on redirect
        https://bugs.webkit.org/show_bug.cgi?id=155509
        <rdar://problem/10234844>

        Reviewed by Alex Christensen.

        Use 0ms as the maximum buffering time for media resource just as we do currently.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime):

2016-03-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r198235, r198240, r198241, and
        r198252.

        Causing crashes on ARM

        Reverted changesets:

        "Remove compile time define for SEPARATED_HEAP"
        https://bugs.webkit.org/show_bug.cgi?id=155508
        http://trac.webkit.org/changeset/198235

        "Gardening: build fix after r198235."
        http://trac.webkit.org/changeset/198240

        "Build fix."
        http://trac.webkit.org/changeset/198241

        "Rename performJITMemcpy to something more inline with our
        normal webkit function names"
        https://bugs.webkit.org/show_bug.cgi?id=155525
        http://trac.webkit.org/changeset/198252

2016-03-16  Commit Queue  <commit-queue@webkit.org>

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

        Introduced several rendering issues in popular websites
        (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK] Limit the number of tiles according to the visible
        area"
        https://bugs.webkit.org/show_bug.cgi?id=126122
        http://trac.webkit.org/changeset/196803

2016-03-15  Enrica Casucci  <enrica@apple.com>

        Follow up to r195769.
        https://bugs.webkit.org/show_bug.cgi?id=155519
        rdar://problem/25146483

        Reviewed by Tim Horton.

        There are two code paths that lead to calling handleSyntheticClick()
        where we need to check if the default action can be performed on the
        data detector link.
        Only one was covered in r195769 and this patch addresses the missing one.
        I've also discovered that the point reported in DidNotHandleTapAsClick was
        incorrectly always (0, 0) and I've fixed it.

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

2016-03-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r198230.

        This change caused LayoutTests to fail on Mac

        Reverted changeset:

        "REGRESSION (r194660): Navigating to HTTPS sites may fail with
        error"
        https://bugs.webkit.org/show_bug.cgi?id=155455
        http://trac.webkit.org/changeset/198230

2016-03-15  Oliver Hunt  <oliver@apple.com>

        Remove compile time define for SEPARATED_HEAP
        https://bugs.webkit.org/show_bug.cgi?id=155508

        Reviewed by Mark Lam.

        Remove the feature define.

        * Configurations/FeatureDefines.xcconfig:

2016-03-15  Daniel Bates  <dabates@apple.com>

        REGRESSION (r194660): Navigating to HTTPS sites may fail with error
        https://bugs.webkit.org/show_bug.cgi?id=155455
        <rdar://problem/24308793>

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where navigating to an HTTPS site may fail because the Security Framework uses
        a cache directory that it does not have permission to use.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::codeSigningIdentifierForProcess): Queries the Security Framework for the code signed
        bundle identifier/code signing identifier.
        (WebKit::ChildProcess::initializeSandbox): Use the client identifier as part of the user directory
        suffix. Verify that the client identifier matches the code signed bundled identifier/code
        signing identifier for the code signed app/tool. Fix minor code style issue; use a C++-style cast
        instead of a C-style cast when casting an OSStatus to a long.
        (WebKit::findSecCodeForProcess): Deleted; incorporated logic into WebKit::codeSigningIdentifierForProcess().

2016-03-15  Antti Koivisto  <antti@apple.com>

        Add Antti to WebKit2 Owners file
        https://bugs.webkit.org/show_bug.cgi?id=155504

        Reviewed by Anders Carlsson and Sam Weinig.

        * Owners:

2016-03-15  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        EFL build has been broken since r198180
        https://bugs.webkit.org/show_bug.cgi?id=155488

        Unreviewed build fix.

        * WebProcess/UserContent/WebUserContentController.h: Use ENABLE(USER_MESSAGE_HANDLERS) guard. 

2016-03-15  Chris Dumez  <cdumez@apple.com>

        Regression(r197939): ASSERTION FAILED: url.containsOnlyASCII() in URL.cpp
        https://bugs.webkit.org/show_bug.cgi?id=155449
        <rdar://problem/25134826>

        Reviewed by Carlos Garcia Campos.

        Bump WK2 Network Disk Cache version after r197939 as the new cache format
        is not compatible with the old one and leads to assertions being hit when
        browsing in Debug builds.

        SubresourceInfo used to only contain a boolean and would therefore be
        serialized as "0" / "1". However, after r197939, a URL field was added
        and when trying to decode old cache entries with the new format, we
        would try to construct a URL from the String "0" or "1". This would
        assert because these are not valid URLs.

        * NetworkProcess/cache/NetworkCacheStorage.h:

2016-03-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r197981.

        Caused a massive PLT regression on Mac.

        Reverted changeset:

        "Font antialiasing (smoothing) changes when elements are
        rendered into compositing layers"
        https://bugs.webkit.org/show_bug.cgi?id=23364
        http://trac.webkit.org/changeset/197981

2016-03-14  Sam Weinig  <sam@webkit.org>

        Add a baseURL parameter to _WKUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=155219

        Reviewed by Tim Horton.

        - Moves to a model for user content where instead of using a WebCore::UserContentController
          object, we implement the new WebCore::UserContentProvider interface (on the existing 
          WebUserContentController object).
        - Uses this to maintain maps of UserStylesSheets and UserScripts along with their identifiers,
          freeing up the URL, which had been acting as the identifier, to be used as the baseURL which
          was what it was intended for.
        - Adds a baseURL property to _WKUserStyleSheet.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        Add support for sending WebUserContentControllerDataTypes.

        * Shared/WebUserContentControllerDataTypes.cpp: Added.
        (WebKit::WebUserScriptData::encode):
        (WebKit::WebUserScriptData::decode):
        (WebKit::WebUserStyleSheetData::encode):
        (WebKit::WebUserStyleSheetData::decode):
        * Shared/WebUserContentControllerDataTypes.h: Added.
        Add helper types for sending user content over IPC.

        * UIProcess/API/APIUserScript.cpp:
        (API::UserScript::generateUniqueURL):
        (API::UserScript::UserScript):
        * UIProcess/API/APIUserScript.h:
        * UIProcess/API/APIUserStyleSheet.cpp:
        (API::UserStyleSheet::generateUniqueURL):
        (API::UserStyleSheet::UserStyleSheet):
        * UIProcess/API/APIUserStyleSheet.h:
        Add identifiers for tracking across processes.

        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:userContentWorld:]):
        (-[_WKUserStyleSheet baseURL]):
        Add new initializer which takes a baseURL as well as an accessor for the baseURL.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addUserScript):
        (WebKit::WebUserContentControllerProxy::removeUserScript):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
        Pass identifiers as well as user content.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addUserScript):
        (WebKit::InjectedBundle::addUserStyleSheet):
        Move user content in via move semantics rather than using a unique_ptr.

        (WebKit::InjectedBundle::removeUserScript):
        (WebKit::InjectedBundle::removeUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScripts):
        (WebKit::InjectedBundle::removeUserStyleSheets):
        (WebKit::InjectedBundle::removeAllUserContent):
        Update for new function signatures.

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::WebUserContentController):
        (WebKit::WebUserContentController::~WebUserContentController):
        (WebKit::WebUserContentController::addUserContentWorlds):
        (WebKit::WebUserContentController::removeUserContentWorlds):
        (WebKit::WebUserContentController::addUserScripts):
        (WebKit::WebUserContentController::removeUserScript):
        (WebKit::WebUserContentController::removeAllUserScripts):
        (WebKit::WebUserContentController::addUserStyleSheets):
        (WebKit::WebUserContentController::removeUserStyleSheet):
        (WebKit::WebUserContentController::removeAllUserStyleSheets):
        (WebKit::WebUserContentController::addUserScriptMessageHandlers):
        (WebKit::WebUserContentController::removeUserScriptMessageHandler):
        (WebKit::WebUserContentController::addUserContentExtensions):
        (WebKit::WebUserContentController::removeUserContentExtension):
        (WebKit::WebUserContentController::removeAllUserContentExtensions):
        (WebKit::WebUserContentController::addUserScriptInternal):
        (WebKit::WebUserContentController::addUserScript):
        (WebKit::WebUserContentController::removeUserScriptWithURL):
        (WebKit::WebUserContentController::removeUserScriptInternal):
        (WebKit::WebUserContentController::removeUserScripts):
        (WebKit::WebUserContentController::addUserStyleSheetInternal):
        (WebKit::WebUserContentController::addUserStyleSheet):
        (WebKit::WebUserContentController::removeUserStyleSheetWithURL):
        (WebKit::WebUserContentController::removeUserStyleSheetInternal):
        (WebKit::WebUserContentController::removeUserStyleSheets):
        (WebKit::WebUserContentController::removeAllUserContent):
        (WebKit::WebUserContentController::forEachUserScript):
        (WebKit::WebUserContentController::forEachUserStyleSheet):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:
        Convert to inheriting from UserContentProvider, rather than containing a UserContentController.
        This means adding the storage for the user content, which has been simplified to avoid using
        unique_ptrs.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addUserScript):
        (WebKit::WebPage::addUserStyleSheet):
        (WebKit::WebPage::removeAllUserContent):
        Update to call the WebUserContentController, rather than going to the UserContentController, which
        no longer exists.

        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::userContentController):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        Return the WebUserContentController rather than old UserContentController.

2016-03-14  Joonghun Park  <jh718.park@samsung.com>

        Purge PassRefPtr from ArrayBuffer, ArchiveResource, Pasteboard, LegacyWebArchive and DataObjectGtk
        https://bugs.webkit.org/show_bug.cgi?id=150497

        Reviewed by Darin Adler.

        * Shared/APIWebArchive.mm:
        (API::WebArchive::WebArchive):
        * Shared/APIWebArchiveResource.mm:
        (API::WebArchiveResource::data):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::addArchiveResource):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::bufferForType):
        (WebKit::WebPlatformStrategies::readBufferFromPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::documentFragmentFromAttributedString):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::webArchiveData):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::resourceDataForFrame):

2016-03-14  Oliver Hunt  <oliver@apple.com>

        Temporarily disable the separated heap.
        https://bugs.webkit.org/show_bug.cgi?id=155472

        Reviewed by Geoffrey Garen.

        Temporarily disable this.

        * Configurations/FeatureDefines.xcconfig:

2016-03-14  Beth Dakin  <bdakin@apple.com>

        [iOS] WKPreviewAction conforms to NSCopying but doesn’t override -
        copyWithZone:
        https://bugs.webkit.org/show_bug.cgi?id=155395

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKPreviewActionItem.mm:
        (-[WKPreviewAction copyWithZone:]):

2016-03-14  Anders Carlsson  <andersca@apple.com>

        Remove usage of -[UIGestureRecognizer requireOtherGestureToFail:]
        https://bugs.webkit.org/show_bug.cgi?id=155461
        rdar://problem/25143282

        Reviewed by Beth Dakin.

        Use -[UIGestureRecognizer requireGestureRecognizerToFail:] instead, which has been API ever since UIGestureRecognizer was added.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _createAndConfigureDoubleTapGestureRecognizer]):

2016-03-14  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r191691): Can't Share Selected Text
        https://bugs.webkit.org/show_bug.cgi?id=155459
        rdar://problem/24893625

        Reviewed by Tim Horton.

        Add the selected text as well. Somehow this got lost in the refactoring.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::createShareMenuItem):

2016-03-14  Tim Horton  <timothy_horton@apple.com>

        Revert r194125 and r194186: We're going to fix this a different way.

        * Shared/NativeWebGestureEvent.h:
        * Shared/mac/NativeWebGestureEventMac.mm:
        (WebKit::pointForEvent):
        (WebKit::NativeWebGestureEvent::NativeWebGestureEvent):
        (WebKit::distanceForTouches): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView selectFindMatch:completionHandler:]):
        (-[WKWebView _web_superInputContext]):
        (-[WKWebView touchesBeganWithEvent:]): Deleted.
        (-[WKWebView touchesMovedWithEvent:]): Deleted.
        (-[WKWebView touchesEndedWithEvent:]): Deleted.
        (-[WKWebView touchesCancelledWithEvent:]): Deleted.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView namesOfPromisedFilesDroppedAtDestination:]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView touchesBeganWithEvent:]): Deleted.
        (-[WKView touchesMovedWithEvent:]): Deleted.
        (-[WKView touchesEndedWithEvent:]): Deleted.
        (-[WKView touchesCancelledWithEvent:]): Deleted.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::magnifyWithEvent):
        (WebKit::WebViewImpl::smartMagnifyWithEvent):
        (WebKit::WebViewImpl::rotateWithEvent):
        (WebKit::WebViewImpl::touchesOrderedByAge): Deleted.
        (WebKit::WebViewImpl::touchesBeganWithEvent): Deleted.
        (WebKit::WebViewImpl::touchesMovedWithEvent): Deleted.
        (WebKit::WebViewImpl::touchesEndedWithEvent): Deleted.
        (WebKit::WebViewImpl::touchesCancelledWithEvent): Deleted.

2016-03-14  Anders Carlsson  <andersca@apple.com>

        Fix build.

        Create an empty PDF selection.

        * Shared/mac/PDFKitImports.h:
        * Shared/mac/PDFKitImports.mm:
        (WebKit::pdfSelectionClass):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::nextMatchForString):

2016-03-14  Beth Dakin  <bdakin@apple.com>

        Unable to commit previews in Mobile Safari
        https://bugs.webkit.org/show_bug.cgi?id=155450
        -and corresponding-
        rdar://problem/25135529

        Reviewed by Tim Horton.

        _uiDelegateProvidedPreviewingViewController was being consulted before 
        invoking the old SPI, which was always wrong. It should have been consulted 
        before calling the new API! But also, it doesn’t seem to be necessary at all 
        since [WKContentView _previewItemController:commitPreview:] is only invoked 
        when a custom view controller has been provided.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _registerPreview]):
        (-[WKContentView _unregisterPreview]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        (-[WKContentView _previewItemController:commitPreview:]):

2016-03-14  Brent Fulgham  <bfulgham@apple.com>

        PingHandle delete's itself but pointer is still used by handleDataURL
        https://bugs.webkit.org/show_bug.cgi?id=154752
        <rdar://problem/24872347>

        Reviewed by Alex Christensen.

        When a PingLoad is destroyed, we should tell its client so that the client can clear the pointer it
        holds to the element to avoid accidentally attempting to use deallocated memory.

        * NetworkProcess/PingLoad.h:
        (WebKit::PingLoad::~PingLoad): Notify the client we are being destroyed.

2016-03-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ build after r198124.

        WebsiteDataTypes is now an OptionSet.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_clear_cache):

2016-03-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Reimplement webkit_web_context_clear_cache functionality.
        https://bugs.webkit.org/show_bug.cgi?id=146041

        Reviewed by Michael Catanzaro.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_clear_cache):

2016-03-14  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        Install WebKit2 WebProcess NetworkProcess on OSX when not building the Mac PORT
        https://bugs.webkit.org/show_bug.cgi?id=152651

        Reviewed by Philippe Normand.

        * CMakeLists.txt:

2016-03-13  Joseph Pecoraro  <pecoraro@apple.com>

        Remove ENABLE(ES6_TEMPLATE_LITERAL_SYNTAX) guards
        https://bugs.webkit.org/show_bug.cgi?id=155417

        Reviewed by Yusuke Suzuki.

        * Configurations/FeatureDefines.xcconfig:

2016-03-13  Dan Bernstein  <mitz@apple.com>

        [Mac] Injected bundle in relocatable WebContent service can’t use XPC services from other relocatable frameworks
        https://bugs.webkit.org/show_bug.cgi?id=155414
        <rdar://problem/24428418>

        Reviewed by Sam Weinig.

        * Configurations/DebugRelease.xcconfig:
          Set WK_WEBCONTENT_SERVICE_NEEDS_XPC_DOMAIN_EXTENSION_ENTITLEMENT to NO, because
          engineering builds are ad-hoc signed and therefore can’t have a private entitlement.

        * Configurations/WebContent-OSX.entitlements: Added. Includes the XPC domain extension
          entitlement.

        * Configurations/WebContentService.xcconfig:
          Set WK_WEBCONTENT_SERVICE_NEEDS_XPC_DOMAIN_EXTENSION_ENTITLEMENT to YES if not already set
          and the framework is relocatable. Set CODE_SIGN_ENTITLEMENTS to the new entitlements file
          if the domain extension entitlement is needed.

        * WebKit2.xcodeproj/project.pbxproj: Added reference to new file.

2016-03-13  Dean Jackson  <dino@apple.com>

        <attachment> should be a runtime-enabled feature
        https://bugs.webkit.org/show_bug.cgi?id=155413
        <rdar://problem/25120753>

        Reviewed by Sam Weinig and Anders Carlsson.

        Add an internal setting on WKWebViewConfiguration
        to enable the <attachment> element support.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _attachmentElementEnabled]):
        (-[WKWebViewConfiguration _setAttachmentElementEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-03-12  Sam Weinig  <sam@webkit.org>

        WebKit can easily crash below NetworkSession::dataTaskForIdentifier() with NSURLSession enabled
        <rdar://problem/25129946>
        https://bugs.webkit.org/show_bug.cgi?id=155401

        Reviewed by Alex Christensen.

        The issue was that NSURLSessionDataTasks can continue to invoke their NSURLSession's delegate methods
        after -[NSURLSession invalidateAndCancel] is called. So, when the NetworkSession was destroyed, and
        still had outstanding data tasks, the session delegate would get called, try to use the session, and
        crash. To fix this I:
        
        - Made NetworkSession RefCounted.
        - Gave NetworkSession two delegates, one for each NSURLSession.
        - Made each delegate have a strong reference to the NetworkSession that gets cleared out in the
          newly implemented URLSession:didBecomeInvalidWithError: method.
        - Changed from simply destroying the NetworkSession in SessionTracker::destroySession(), to derefing
          it and explicitly calling invalidateAndCancel on the two associated NSURLSessions (which in turn 
          eventually cause the URLSession:didBecomeInvalidWithError: to fire).
        - To ensure the correct lifetime of the WebCore::NetworkStorageSession, I made it a member of the
          NetworkSession. This also allowed some simplification inside SessionTracker.

        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::setPendingDownload):
        (WebKit::NetworkDataTask::pendingDownloadLocation):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::sessionID):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::~NetworkDataTask):
        (WebKit::NetworkDataTask::willPerformHTTPRedirection):
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate initWithNetworkSession:]):
        (-[WKNetworkSessionDelegate URLSession:didBecomeInvalidWithError:]):
        (WebKit::NetworkSession::setCustomProtocolManager):
        (WebKit::NetworkSession::create):
        (WebKit::NetworkSession::defaultSession):
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::invalidateAndCancel):
        (WebKit::NetworkSession::networkStorageSession):
        (WebKit::NetworkSession::clearCredentials):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * Shared/SessionTracker.cpp:
        (WebKit::identifierBase):
        (WebKit::SessionTracker::getIdentifierBase):
        (WebKit::SessionTracker::setIdentifierBase):
        (WebKit::staticSessionMap):
        (WebKit::SessionTracker::networkSession):
        (WebKit::SessionTracker::storageSession):
        (WebKit::staticStorageSessionMap):
        (WebKit::SessionTracker::sessionID):
        (WebKit::SessionTracker::setSession):
        (WebKit::SessionTracker::destroySession):
        (WebKit::SessionTracker::forEachNetworkStorageSession):
        (WebKit::storageSessionToID): Deleted.
        (WebKit::SessionTracker::storageSessionMap): Deleted.
        * Shared/SessionTracker.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
        (WebKit::WebFrameNetworkingContext::localFileContentSniffingEnabled):
        (WebKit::WebFrameNetworkingContext::scheduledRunLoopPairs):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
        (WebKit::WebFrameNetworkingContext::WebFrameNetworkingContext):

2016-03-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete dead SVG Font code
        https://bugs.webkit.org/show_bug.cgi?id=154718

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2016-03-12  Beth Dakin  <bdakin@apple.com>

        Make preview inline navigation work API
        https://bugs.webkit.org/show_bug.cgi?id=155383
        -and corresponding-
        rdar://problem/25117985

        Reviewed by Dan Bernstein.

        With this patch:
        _WKElementInfo is now WKElementInfo in file and class names. Header is now 
        public.

        _WKPreviewElementInfo is now WKPreviewElementInfo in file and class names. 
        Header is now public.

        _WKPreviewAction is now WKPreviewActionItem in filenames (header is now 
        public), the protocol _WKPreviewActionItem is now WKPreviewActionItem, and 
        the _WKPreviewAction class is now WKPreviewAction. (The internal header is 
        still project, of course.)
        and
        WKPreviewActionIdentifiersPrivate.h/mm is now
        WKPreviewActionItemIdentifiers.h/mm and all the the identifiers have been 
        updated. Header is now public.

        * Shared/API/Cocoa/WebKit.h:
        * UIProcess/API/Cocoa/WKElementInfo.h: Copied from UIProcess/API/Cocoa/_WKElementInfo.h.
        * UIProcess/API/Cocoa/WKElementInfo.mm: Copied from UIProcess/API/Cocoa/_WKElementInfo.mm.
        (-[WKElementInfo copyWithZone:]):
        (-[_WKElementInfo copyWithZone:]): Deleted.
        * UIProcess/API/Cocoa/WKElementInfoInternal.h: Copied from UIProcess/API/Cocoa/_WKElementInfoInternal.h.
        * UIProcess/API/Cocoa/WKPreviewActionIdentifiersPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKPreviewActionIdentifiersPrivate.mm: Removed.
        * UIProcess/API/Cocoa/WKPreviewActionItem.h: Copied from UIProcess/API/Cocoa/_WKPreviewAction.h.
        * UIProcess/API/Cocoa/WKPreviewActionItem.mm: Copied from UIProcess/API/Cocoa/_WKPreviewAction.mm.
        * UIProcess/API/Cocoa/WKPreviewActionItemIdentifiers.h: Copied from UIProcess/API/Cocoa/WKPreviewActionIdentifiersPrivate.h.
        * UIProcess/API/Cocoa/WKPreviewActionItemIdentifiers.mm: Copied from UIProcess/API/Cocoa/WKPreviewActionIdentifiersPrivate.mm.
        * UIProcess/API/Cocoa/WKPreviewActionItemInternal.h: Copied from UIProcess/API/Cocoa/_WKPreviewActionInternal.h.
        * UIProcess/API/Cocoa/WKPreviewElementInfo.h: Copied from UIProcess/API/Cocoa/_WKPreviewElementInfo.h.
        * UIProcess/API/Cocoa/WKPreviewElementInfo.mm: Copied from UIProcess/API/Cocoa/_WKPreviewElementInfo.mm.
        (-[WKPreviewElementInfo _initWithLinkURL:]):
        (-[_WKPreviewElementInfo _initWithLinkURL:]): Deleted.
        * UIProcess/API/Cocoa/WKPreviewElementInfoInternal.h: Copied from UIProcess/API/Cocoa/_WKPreviewElementInfoInternal.h.
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h:
        * UIProcess/API/Cocoa/_WKElementInfo.h: Removed.
        * UIProcess/API/Cocoa/_WKElementInfo.mm: Removed.
        * UIProcess/API/Cocoa/_WKElementInfoInternal.h: Removed.
        * UIProcess/API/Cocoa/_WKPreviewAction.h: Removed.
        * UIProcess/API/Cocoa/_WKPreviewAction.mm: Removed.
        * UIProcess/API/Cocoa/_WKPreviewActionInternal.h: Removed.
        * UIProcess/API/Cocoa/_WKPreviewElementInfo.h: Removed.
        * UIProcess/API/Cocoa/_WKPreviewElementInfo.mm: Removed.
        * UIProcess/API/Cocoa/_WKPreviewElementInfoInternal.h: Removed.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (previewIdentifierForElementAction):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        (-[WKContentView _previewItemController:commitPreview:]):
        * WebKit2.xcodeproj/project.pbxproj:

2016-03-12  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        [GTK][Mac] Use DYLD_LIBRARY_PATH on OSX rather then LD_LIBRARY_PATH
        https://bugs.webkit.org/show_bug.cgi?id=152650

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake:

2016-03-11  John Wilander  <wilander@apple.com>

        Move prevalent resource classifier from WebCore to WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=155242
        <rdar://problem/24913272>

        Reviewed by Andy Estes.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::create):
        (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):
        (WebKit::hasPrevalentResourceCharacteristics):
        (WebKit::classifyPrevalentResources):
            - Moved these two functions from WebCore.
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
            - Calls processStatistics with a lamda function to classify prevalent resources.
        * WebKit2.xcodeproj/project.pbxproj:
            - Fixed the ordering of source files.

2016-03-11  Sam Weinig  <sam@webkit.org>

        WebKit needs a new sandbox profile addition for DataDetectors
        <rdar://problem/25091102>

        Reviewed by Brent Fulgham.

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

2016-03-11  Chris Dumez  <cdumez@apple.com>

        Regression(r198040): WebKit2.DocumentStartUserScriptAlertCrashTest API test is crashing in debug
        https://bugs.webkit.org/show_bug.cgi?id=155382

        Reviewed by Alexey Proskuryakov.

        r198040 introduced an assertion to make sure we never call
        applicationBundleIsEqualTo() before setApplicationBundleIdentifier()
        is called. This new assertion found a bug as it turns out we were
        calling setApplicationBundleIdentifier() too late during the
        WebProcess initialization and some runtime applications checks were
        already done by then.

        To address the problem, this patch moves the
        setApplicationBundleIdentifier() call as early as possible during
        the WebProcess and the NetworkProcess initialization. It also moves
        it to the Cocoa specific files for clarity.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2016-03-11  Enrica Casucci  <enrica@apple.com>

        Use only selected text for Look up.
        https://bugs.webkit.org/show_bug.cgi?id=155380

        Reviewed by Tim Horton.

        The corresponding piece that uses the extended context for Look up
        is not ready yet. For the moment default to retrieving the selected text.

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

2016-03-11  Chelsea Pugh  <cpugh@apple.com>

        [iOS] Allow clients to specify text suggestions to be used for a form input session
        https://bugs.webkit.org/show_bug.cgi?id=155343

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKFormInputSession.h:
        * UIProcess/API/Cocoa/_WKInputDelegate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession suggestions]): Add a getter for suggestions.
        (-[WKFormInputSession setSuggestions:]): Add a setter, which calls setSuggestions with our suggestions on the input delegate.
        (-[WKContentView insertTextSuggestion:]): Call _webView:insertTextSuggestion:inInputSession: on our input delegate so clients know 
        a text suggestion was tapped.

2016-03-11  Anders Carlsson  <andersca@apple.com>

        Creating and releasing a WKBackForwardListItem crashes
        https://bugs.webkit.org/show_bug.cgi?id=155376
        rdar://problem/17377712

        Reviewed by Dan Bernstein.

        Make init unavailable.

        * UIProcess/API/Cocoa/WKBackForwardListItem.h:

2016-03-11  Beth Dakin  <bdakin@apple.com>

        Follow-up to:

        _WKPreviewAction should be in an internal header
        https://bugs.webkit.org/show_bug.cgi?id=155370

        Rubber-stamped by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKPreviewActionInternal.h:

2016-03-11  Beth Dakin  <bdakin@apple.com>

        _WKPreviewAction should be in an internal header
        https://bugs.webkit.org/show_bug.cgi?id=155370

        Reviewed by Tim Horton.

        Move _WKPreviewAction to an Internal header since only the protocol needs to 
        be SPI.
        * UIProcess/API/Cocoa/_WKPreviewAction.h:
        * UIProcess/API/Cocoa/_WKPreviewAction.mm:
        * UIProcess/API/Cocoa/_WKPreviewActionInternal.h: Added.
        * UIProcess/ios/WKContentViewInteraction.mm:
        * WebKit2.xcodeproj/project.pbxproj:

2016-03-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement Reflect.set without receiver support
        https://bugs.webkit.org/show_bug.cgi?id=155024

        Reviewed by Geoffrey Garen.

        NPJSObject::setProperty may call `methodTable()->put` operation, but we intentionally do not propagate it to the caller's ::put.
        In the current implementation, we just use the result of ::setProperty call.
        This is `true` when ::setProperty attempts to call `methodTable()->put`.
        In ::setProperty, after calling `methodTable()->put`, ::setProperty function clears the exception state.
        So this is not the same semantics to the simple data property store. Rather, this is like the accessor.
        In ECMA262 [[Set]], it returns true if there is a setter. So we just use the returned value of ::setProperty.
        This indicates that there is a setter for the given [[Set]] operation.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::put):
        * WebProcess/Plugins/Netscape/JSNPObject.h:

2016-03-10  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r197986): Don't try to link to undefined $(WEBKIT_SYSTEM_INTERFACE_LIBRARY)

        Follow-up build fix for:
            AX: Force allow user zoom
            <https://bugs.webkit.org/show_bug.cgi?id=155056>

        Fixes the following build failure:
            ld: library not found for -l-lAccessibility
            clang: error: linker command failed with exit code 1 (use -v to see invocation)

        * Configurations/WebKit.xcconfig: Remove
        "-l$(WEBKIT_SYSTEM_INTERFACE_LIBRARY)" from OTHER_LDFLAGS since
        that macro is not defined, and there is no need to link to
        libWebKitSystemInterface.a.

2016-03-10  Jeremy Jones  <jeremyj@apple.com>

        Set AVURLAssetUsesNoPersistentCacheKey on AVAsset to match caching policy.
        https://bugs.webkit.org/show_bug.cgi?id=155117
        rdar://problem/6802240

        Reviewed by Simon Fraser.

        Make AVAsset AVURLAssetUsesNoPersistentCacheKey match !m_websiteDataStore->isPersistent()
        This will prevent persistent media caches when webkit is using in-memory caching.

        * Shared/WebPageCreationParameters.cpp: Add mediaShouldUsePersistentCache.
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Add mediaShouldUsePersistentCache.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mediaShouldUsePersistentCache): Added.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_mediaUsesPersistentCache): Added.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::mediaShouldUsePersistentCache): Added.

2016-03-10  Nan Wang  <n_wang@apple.com>

        AX: Force allow user zoom
        https://bugs.webkit.org/show_bug.cgi?id=155056

        Reviewed by Simon Fraser.

        Linked libAccessibility library so that we can observe the accessibility
        setting change for the force always user scalable feature.

        * Configurations/WebKit.xcconfig:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldAllowPictureInPictureMediaPlayback):
        (forceAlwaysUserScalableChangedCallback):
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView dealloc]):
        (-[WKWebView _navigationGestureDidEnd]):
        (-[WKWebView _updateForceAlwaysUserScalable]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSize):
        (WebKit::WebPageProxy::updateForceAlwaysUserScalable):
        (WebKit::WebPageProxy::setMaximumUnobscuredSize):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::disableInspectorNodeSearch):
        (WebKit::WebPage::updateForceAlwaysUserScalable):
        (WebKit::innerFrameQuad):

2016-03-10  Simon Fraser  <simon.fraser@apple.com>

        Font antialiasing (smoothing) changes when elements are rendered into compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=23364

        Reviewed by Tim Horton.

        Send the ContentsFormat to the UI process (but nothing happens to it there yet).

        Allow internal clients to turn off smoothed layer text, so that WebKitTestRunner
        can disable it.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextEnableSmoothedLayerText):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::enableSmoothedLayerText):
        (WebKit::WebProcessPool::WebProcessPool): Deleted.
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::setContentsFormat):
        (WebKit::PlatformCALayerRemote::contentsFormat):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::enableSmoothedLayerText):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2016-03-10  Enrica Casucci  <enrica@apple.com>

        Expose additional WKDataDetectorTypes.
        https://bugs.webkit.org/show_bug.cgi?id=155331
        rdar://problem/24175813

        Reviewed by Tim Horton.

        Adding API to enable data detection of tracking numbers,
        flight number and spotlight suggestions.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (fromWKDataDetectorTypes):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

2016-03-10  Beth Dakin  <bdakin@apple.com>

        defaultActions in UIDelegate method 
        _webView:previewingViewControllerForElement:defaultActions: need to be 
        use-able by a client
        https://bugs.webkit.org/show_bug.cgi?id=155304
        -and corresponding-
        rdar://problem/24269296

        Reviewed by Anders Carlsson.

        This patch adds a new protocol, WKPreviewActionItem, which is a sub-protocol 
        of UIPreviewActionItem. The new protocol adds an identifier so that clients 
        can identify which of our default actions they want to use. In order for a 
        client to use our default action items, they need to return those actions in 
        their UIViewController's implementation of previewActionItems.

        Change the defaultActions to NSArray <id <WKPreviewActionItem>> *
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        This new file defines our sub-protocol and sub-class for WKPreviewActions.
        * UIProcess/API/Cocoa/_WKPreviewAction.h: Added.
        * UIProcess/API/Cocoa/_WKPreviewAction.mm: Added.
        (+[_WKPreviewAction actionWithIdentifier:title:style:handler:]):

        New BOOL _uiDelegateProvidedPreviewingViewController keeps track of whether 
        the client returned a view controller from 
        _webView:previewingViewControllerForElement:defaultActions:. If they did 
        return a view controller, then we should invoke 
        _webView:commitPreviewingViewController: at commit time. If they returned 
        nil, then they indicated that WebKit should continue with default previewing 
        behavior, so we will not invoke the UIDelegate’s commit method.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _registerPreview]):
        (-[WKContentView _unregisterPreview]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):

        In order for our default actions to be useful, we have to create 
        _WKPreviewActions.
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):

        Only invoke _webView:commitPreviewedViewController: if 
        _uiDelegateProvidedPreviewingViewController is YES.
        (-[WKContentView _previewItemController:commitPreview:]):
        * WebKit2.xcodeproj/project.pbxproj:

2016-03-10  Jer Noble  <jer.noble@apple.com>

        Add WebCore, WebKit, & WebKit2 preference/setting to enable Main Content heuristic.
        https://bugs.webkit.org/show_bug.cgi?id=155326
        <rdar://problem/25095408>

        Reviewed by Beth Dakin.

        Add SPI to get and set the new preference.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMainContentUserGestureOverrideEnabled):
        (WKPreferencesGetMainContentUserGestureOverrideEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _mainContentUserGestureOverrideEnabled]):
        (-[WKWebViewConfiguration _setMainContentUserGestureOverrideEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-03-10  Alex Christensen  <achristensen@webkit.org>

        Remove firing assertion after r197865.
        https://bugs.webkit.org/show_bug.cgi?id=155137
        rdar://problem/25096835

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        This assertion was firing.  I'm looking into why.

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

        Add separate WK and WK2 preferences for requiring user gestures for video media, distinct from user gestures for media generally
        https://bugs.webkit.org/show_bug.cgi?id=155141

        Reviewed by Beth Dakin.

        Add a new preference, videoPlaybackRequiresUserGesture, distinct from mediaPlaybackRequiresUserGesture. Legacy clients of 
        mediaPlaybackRequiresUserGesture will still be able to use it normally, as setting that preference to true will effectively
        set both audioPlaybackRequiresUserGesture and videoPlaybackRequiresUserGesture to true. Make these preferences all available
        universally, rather than just on PLATFORM(IOS). This requires adding a definition for -setRequiresUserActionForMediaPlayback:
        and -requiresUserActionForMediaPlayback on !PLATFORM(IOS).

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetVideoPlaybackRequiresUserGesture):
        (WKPreferencesGetVideoPlaybackRequiresUserGesture):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        (-[WKWebView _setObscuredInsets:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration requiresUserActionForMediaPlayback]):
        (-[WKWebViewConfiguration setRequiresUserActionForMediaPlayback:]):
        (-[WKWebViewConfiguration allowsInlineMediaPlayback]):
        (-[WKWebViewConfiguration setAllowsInlineMediaPlayback:]):
        (-[WKWebViewConfiguration _requiresUserActionForVideoPlayback]):
        (-[WKWebViewConfiguration _setRequiresUserActionForVideoPlayback:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-03-10  Commit Queue  <commit-queue@webkit.org>

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

        This change broke Windows, WinCairo, GTK and EFL builds
        (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "Add a baseURL parameter to _WKUserStyleSheet"
        https://bugs.webkit.org/show_bug.cgi?id=155219
        http://trac.webkit.org/changeset/197943

2016-03-10  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] push media stream state to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=155281

        Reviewed by Dean Jackson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame): Don't clear m_mediaState, it is done in
          WebPageProxy::resetState. This reverts a change added in r197929.
        

2016-03-08  Sam Weinig  <sam@webkit.org>

        Add a baseURL parameter to _WKUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=155219

        Reviewed by Tim Horton.

        - Moves to a model for user content where instead of using a WebCore::UserContentController
          object, we implement the new WebCore::UserContentProvider interface (on the existing 
          WebUserContentController object).
        - Uses this to maintain maps of UserStylesSheets and UserScripts along with their identifiers,
          freeing up the URL, which had been acting as the identifier, to be used as the baseURL which
          was what it was intended for.
        - Adds a baseURL property to _WKUserStyleSheet.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        Add support for sending WebUserContentControllerDataTypes.

        * Shared/WebUserContentControllerDataTypes.cpp: Added.
        (WebKit::WebUserScriptData::encode):
        (WebKit::WebUserScriptData::decode):
        (WebKit::WebUserStyleSheetData::encode):
        (WebKit::WebUserStyleSheetData::decode):
        * Shared/WebUserContentControllerDataTypes.h: Added.
        Add helper types for sending user content over IPC.

        * UIProcess/API/APIUserScript.cpp:
        (API::UserScript::generateUniqueURL):
        (API::UserScript::UserScript):
        * UIProcess/API/APIUserScript.h:
        * UIProcess/API/APIUserStyleSheet.cpp:
        (API::UserStyleSheet::generateUniqueURL):
        (API::UserStyleSheet::UserStyleSheet):
        * UIProcess/API/APIUserStyleSheet.h:
        Add identifiers for tracking across processes.

        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:userContentWorld:]):
        (-[_WKUserStyleSheet baseURL]):
        Add new initializer which takes a baseURL as well as an accessor for the baseURL.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addUserScript):
        (WebKit::WebUserContentControllerProxy::removeUserScript):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
        Pass identifiers as well as user content.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addUserScript):
        (WebKit::InjectedBundle::addUserStyleSheet):
        Move user content in via move semantics rather than using a unique_ptr.

        (WebKit::InjectedBundle::removeUserScript):
        (WebKit::InjectedBundle::removeUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScripts):
        (WebKit::InjectedBundle::removeUserStyleSheets):
        (WebKit::InjectedBundle::removeAllUserContent):
        Update for new function signatures.

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::WebUserContentController):
        (WebKit::WebUserContentController::~WebUserContentController):
        (WebKit::WebUserContentController::addUserContentWorlds):
        (WebKit::WebUserContentController::removeUserContentWorlds):
        (WebKit::WebUserContentController::addUserScripts):
        (WebKit::WebUserContentController::removeUserScript):
        (WebKit::WebUserContentController::removeAllUserScripts):
        (WebKit::WebUserContentController::addUserStyleSheets):
        (WebKit::WebUserContentController::removeUserStyleSheet):
        (WebKit::WebUserContentController::removeAllUserStyleSheets):
        (WebKit::WebUserContentController::addUserScriptMessageHandlers):
        (WebKit::WebUserContentController::removeUserScriptMessageHandler):
        (WebKit::WebUserContentController::addUserContentExtensions):
        (WebKit::WebUserContentController::removeUserContentExtension):
        (WebKit::WebUserContentController::removeAllUserContentExtensions):
        (WebKit::WebUserContentController::addUserScriptInternal):
        (WebKit::WebUserContentController::addUserScript):
        (WebKit::WebUserContentController::removeUserScriptWithURL):
        (WebKit::WebUserContentController::removeUserScriptInternal):
        (WebKit::WebUserContentController::removeUserScripts):
        (WebKit::WebUserContentController::addUserStyleSheetInternal):
        (WebKit::WebUserContentController::addUserStyleSheet):
        (WebKit::WebUserContentController::removeUserStyleSheetWithURL):
        (WebKit::WebUserContentController::removeUserStyleSheetInternal):
        (WebKit::WebUserContentController::removeUserStyleSheets):
        (WebKit::WebUserContentController::removeAllUserContent):
        (WebKit::WebUserContentController::forEachUserScript):
        (WebKit::WebUserContentController::forEachUserStyleSheet):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:
        Convert to inheriting from UserContentProvider, rather than containing a UserContentController.
        This means adding the storage for the user content, which has been simplified to avoid using
        unique_ptrs.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addUserScript):
        (WebKit::WebPage::addUserStyleSheet):
        (WebKit::WebPage::removeAllUserContent):
        Update to call the WebUserContentController, rather than going to the UserContentController, which
        no longer exists.

        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::userContentController):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        Return the WebUserContentController rather than old UserContentController.

2016-03-10  Commit Queue  <commit-queue@webkit.org>

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

        Rolling out this change due to breaking the build and
        LayoutTests. (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "Font antialiasing (smoothing) changes when elements are
        rendered into compositing layers"
        https://bugs.webkit.org/show_bug.cgi?id=23364
        http://trac.webkit.org/changeset/197923

2016-03-10  Chris Dumez  <cdumez@apple.com>

        Speculative revalidation requests do not have their 'first party for cookies' URL set
        https://bugs.webkit.org/show_bug.cgi?id=155284
        <rdar://problem/25053203>

        Reviewed by Antti Koivisto.

        Speculative revalidation requests did not have their 'first party for cookies'
        URL set. This means the underlying NSURLRequest has a nil mainDocumentURL.
        Without a way to determine whether the cookie is in a third-party context,
        CFNetwork defaults to accepting all cookies for these resources.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCache::Coder<WebCore::URL>::encode):
        (WebKit::NetworkCache::Coder<WebCore::URL>::decode):
        * NetworkProcess/cache/NetworkCacheCoders.h:
        Add template specialization to support encoding / decoding WebCore::URL.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        Set the "first party for cookies" URL on the revalidation request.

        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::registerSubresourceLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::saveToDiskIfReady):
        Now keep the subresources' ResourceRequests, in addition to their key, so we can later
        extract the 'first party for cookies' URL from the request and save it to disk.

        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        Pass the ResourceRequest in addition to the key to
        PendingFrameLoad::registerSubresourceLoad().

        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry):
        Add an extra SubresourceInfo parameter, in addition to the Entry, so we
        have access to the first party for cookies URL. Pass this URL to
        constructRevalidationRequest().

        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        Add an extra SubresourceInfo parameter, in addition to the Entry, so we
        have access to the first party for cookies URL.

        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        Pass the SubresourceInfo to preloadEntry().

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:

        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourcesEntry::SubresourceInfo::encode):
        (WebKit::NetworkCache::SubresourcesEntry::SubresourceInfo::decode):
        Encode / Decode new firstPartyForCookies member.

        (WebKit::NetworkCache::SubresourcesEntry::SubresourcesEntry):
        (WebKit::NetworkCache::SubresourcesEntry::updateSubresourceLoads):
        Take SubresourceLoad objects in, instead of simple Key objects so we have
        access to the ResourceRequest. We extract the first party for cookies URL
        from the request and pass it to the SubresourceInfo constructor.

        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourcesEntry::SubresourceInfo::SubresourceInfo):
        (WebKit::NetworkCache::SubresourcesEntry::SubresourceLoad::SubresourceLoad):

2016-02-22  Jer Noble  <jer.noble@apple.com>

        Enable AVFoundationNSURLSessionEnabled by default
        https://bugs.webkit.org/show_bug.cgi?id=154469

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesDefinitions.h:

2016-03-10  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, revert changes accidentally committed with previous patch.

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

2016-03-10  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] push media stream state to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=155281

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetMediaState): New.
        * UIProcess/API/C/WKPagePrivate.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame): Clear m_mediaState.
        (WebKit::WebPageProxy::isPlayingMediaDidChange): Call m_pageClient.isPlayingMediaDidChange when
          audio or video state changes, call m_uiClient->isPlayingAudioDidChange when audio, vidoe,
          or media stream state changes.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::mediaStateFlags): New.

2016-03-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Artifacts when using web view background color
        https://bugs.webkit.org/show_bug.cgi?id=155229

        Reviewed by Mario Sanchez Prada.

        This is because when using a web view color, we fill with the
        color every rectangle updated by the web process, but we should
        always fill the entire backing store before rendering the actual
        contents on top.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display): Ensure the web process always
        renders the whole visible rectangle when background is rendered by
        the UI process.

2016-03-09  Simon Fraser  <simon.fraser@apple.com>

        Font antialiasing (smoothing) changes when elements are rendered into compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=23364
        rdar://problem/7288429

        Reviewed by Tim Horton.
        
        Send the ContentsFormat to the UI process (but nothing happens to it there yet).

        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::setContentsFormat):
        (WebKit::PlatformCALayerRemote::contentsFormat):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2016-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        Add runtime flags for shadow DOM and custom elements
        https://bugs.webkit.org/show_bug.cgi?id=155213

        Reviewed by Dean Jackson.

        Set the runtime flag based on preferences. Enable shadow DOM and disable custom elements by default.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetShadowDOMEnabled):
        (WKPreferencesGetShadowDOMEnabled):
        (WKPreferencesSetCustomElementsEnabled):
        (WKPreferencesGetCustomElementsEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-03-09  Brent Fulgham  <bfulgham@apple.com>

        Handling 'allowUniversalAccessFromFileURLs' on WKWebViewConfiguration causes test breakage
        https://bugs.webkit.org/show_bug.cgi?id=155265
        <rdar://problem/11101440>

        Reviewed by Andy Estes.

        We require "AllowUniversalAccessFromFileURLs" to permit file URLs from accessing
        localStorage. However, this setting is not available on the Cocoa WKPreference (by design).
        Instead, you need to set this value on the WKWebViewConfiguration.
        
        Back out the work-around landed in r197889, 

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Remove test workaround.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Set the correct flag on
        the WKWebViewConfiguration.

2016-03-09  Enrica Casucci  <enrica@apple.com>

        Retrieve additional context for some data detector link for preview and action menu.
        https://bugs.webkit.org/show_bug.cgi?id=155278
        rdar://problem/24884951

        Reviewed by Tim Horton.

        Data detector results for items like calendar events, can be augmented
        retrieving the text surrounding the link.

        * Platform/spi/ios/DataDetectorsUISPI.h:
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2016-03-09  Gavin Barraclough  <barraclough@apple.com>

        Last opened tab does not receive SetHiddenPageTimerThrottlingIncreaseLimit message
        https://bugs.webkit.org/show_bug.cgi?id=155126

        Reviewed by Anders Carlson.

        WebPageProxy will increment the hidden page throttling counter from within its constructor,
        which currently causes the WebProcessPool to try to synchronously message all processes.
        The web page triggering the increment then fails to receive the message, since it was
        still being constructed. Make the update of the limit async, such that the page is fully
        constructed before the WebProcessPool processes the update.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_hiddenPageThrottlingAutoIncreasesCounter):
            - This now schedules a zero-delay timer to handle the update.
        (WebKit::m_hiddenPageThrottlingTimer):
            - This is now responsible for calling updateHiddenPageThrottlingAutoIncreaseLimit.
        * UIProcess/WebProcessPool.h:
            - Added m_hiddenPageThrottlingTimer.

2016-03-09  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r197149): Missing availability checks when soft-linking DataDetectors.framework
        <http://webkit.org/b/155258>

        Reviewed by Andy Estes.

        * Platform/mac/MenuUtilities.mm:
        (WebKit::menuItemForTelephoneNumber):
        (WebKit::menuForTelephoneNumber):
        - Add check that returns early if DataDetectors.framework is not
          available.

        * Shared/mac/WebHitTestResultData.mm:
        (WebKit::WebHitTestResultData::platformDecode):
        - Add Debug assertion.  The soft-linked code should never be
          called if there was no actionContext passed in.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::dismissContentRelativeChildWindowsFromViewOnly):
        - Protect calls to DDActionsManager with availability check.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        - Protect calls to DDActionsManager with availability check.
        (-[WKImmediateActionController _animationControllerForDataDetectedText]):
        (-[WKImmediateActionController _animationControllerForDataDetectedLink]):
        - Add check that returns early if DataDetectors.framework is not
          available.

2016-03-09  Keith Rollin  <krollin@apple.com>

        Add state dumping facility
        https://bugs.webkit.org/show_bug.cgi?id=154930
        <rdar://problem/24939135>

        Reviewed by Anders Carlsson.

        Collect the times at which pages are loaded. Dump them when an OS
        state dump is triggered.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::lastPageLoadTime):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::registerWithStateDumper):
        (WebKit::WebProcess::platformInitializeProcess):

2016-03-09  Anders Carlsson  <andersca@apple.com>

        _WKWebsiteDataSize.h should be an SPI header.

        Rubber-stamped by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj:

2016-03-09  Brent Fulgham  <bfulgham@apple.com>

        Handling 'allowUniversalAccessFromFileURLs' on WKWebViewConfiguration causes test breakage
        https://bugs.webkit.org/show_bug.cgi?id=155265

        Unreviewed work-around to allow testing to continue.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Workaround build break.

2016-03-09  Alex Christensen  <achristensen@webkit.org>

        Fix use-after-free when cancelling synchronous XHR when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=155253

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueWillSendRequest):
        Store the completion handler on the stack before calling didFail, which deletes the
        NetworkLoad, so we don't access m_redirectCompletionHandler after deleting the NetworkLoad.

2016-03-09  Commit Queue  <commit-queue@webkit.org>

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

        Caused assertions, and wasn't reviewed by a WK2 owner
        (Requested by andersca on #webkit).

        Reverted changeset:

        "Last opened tab does not receive
        SetHiddenPageTimerThrottlingIncreaseLimit message"
        https://bugs.webkit.org/show_bug.cgi?id=155126
        http://trac.webkit.org/changeset/197698

2016-03-09  Conrad Shultz  <conrad_shultz@apple.com>

        WebsiteDataStore::Configuration::legacyWebsiteDataStoreConfiguration() should respect the passed-in configuration
        https://bugs.webkit.org/show_bug.cgi?id=155250

        Reviewed by Anders Carlsson.

        Note that the legacy directories are already set by default in ProcessPoolConfiguration::createWithLegacyOptions(),
        which is also where the shouldHaveLegacyDataStore flag, which will cause this code path to be reached, is set.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):
        Use the passed-in configuration to set the application cache, network cache, and media keys storage directories.

2016-03-09  Chris Dumez  <cdumez@apple.com>

        Speculative disk cache resource revalidations are sometimes wasted
        https://bugs.webkit.org/show_bug.cgi?id=155187
        <rdar://problem/25032905>

        Reviewed by Antti Koivisto.

        Speculative disk cache resource revalidations were sometimes wasted.

        We would sometimes correctly revalidate a resource but the
        NetworkResourceLoader then either:
        1. Fail to reuse the speculatively validated entry
        2. Reuse the speculatively validated entry but then validate it again

        Bug 1 was caused by the revalidated entry key sometimes being
        different from the cached entry key. This could happen when
        revalidation fails (the server did not send back a 304) in
        which case we call NetworkCache::store() which creates a new
        cache Entry, generating a cache key from our revalidation
        request. If the original request has a cache partition or a
        range, then the keys would not match because we did not set
        the cache partition or the range on the revalidation request.
        This has been addressed by setting the cache partition on the
        revalidation request in constructRevalidationRequest() and by
        not doing revalidation if the original request had a 'range'
        header.

        Bug 2 was caused by us marking a speculatively revalidated entry
        as "not needing revalidating" only in Cache::update(). Cache::update()
        is only called in the case the revalidation was successful (server
        returned a 304). If revalidation was not successful, Cache::store()
        would be called instead was we would fail to update the
        needsRevalidation flag. NetworkResourceLoader would then validate
        again the resource that was already speculatively revalidated.
        To address the problem, we now update the 'needsRevalidation' flag
        as soon as the speculative revalidation completes, in
        SpeculativeLoad::didComplete().

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::makeCacheKey):
        (WebKit::NetworkCache::Cache::update):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::setNeedsValidation):
        * NetworkProcess/cache/NetworkCacheEntry.h:
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::noPartitionString):
        (WebKit::NetworkCache::Key::Key):
        (WebKit::NetworkCache::Key::hasPartition):
        * NetworkProcess/cache/NetworkCacheKey.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::didComplete):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry):

2016-03-09  Brent Fulgham  <bfulgham@apple.com>

        Local HTML should be blocked from localStorage access unless "Disable Local File Restrictions" is checked
        https://bugs.webkit.org/show_bug.cgi?id=155185

        Reviewed by Anders Carlsson.
        <rdar://problem/11101440>

        Tested by TestWebKitAPI tests IndexedDB.IndexedDBMultiProcess and IndexedDB.IndexedDBPersistence.

        Allow Cocoa WKWebViewConfiguration access to the 'allowUniversalAccessFromFileURLs' setting.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (- [WKWebView _initializeWithConfiguration]): Set 'allowUniversalAccessFromFileURLsKey' in
        page configuration.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _allowUniversalAccessFromFileURLs]): Added,
        (-[WKWebViewConfiguration _setAllowUniversalAccessFromFileURLs:]): Added.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2016-03-09  Enrica Casucci  <enrica@apple.com>

        Add two finger tap on links.
        https://bugs.webkit.org/show_bug.cgi?id=155205
        rdar://problem/22937516

        Reviewed by Sam Weinig.

        Adds two finger tap gesture recognizer. When performed
        on a link, it calls the delegate.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView _twoFingerSingleTapGestureRecognized:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::handleTwoFingerTapAtPoint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTwoFingerTapAtPoint):

2016-03-09  Alex Christensen  <achristensen@webkit.org>

        Always call NSURLSession completion handlers
        https://bugs.webkit.org/show_bug.cgi?id=155137

        Reviewed by Darin Adler.

        There are some edge cases which should not be hit, but if they are they would cause the
        network process to hang and network resources to be leaked.  This can be avoided.
        There are also a few release asserts that do not need to crash release builds.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::didReceiveChallenge):
        (WebKit::NetworkDataTask::didCompleteWithError):
        (WebKit::NetworkDataTask::didReceiveResponse):
        (WebKit::NetworkDataTask::didReceiveData):
        (WebKit::NetworkDataTask::willPerformHTTPRedirection):
        (WebKit::NetworkDataTask::scheduleFailure):
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):

2016-03-08  Sam Weinig  <sam@webkit.org>

        Roll r197632 back in now that the bots have caught up.

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

2016-03-08  Oliver Hunt  <oliver@apple.com>

        Start moving to separated writable and executable mappings in the JIT
        https://bugs.webkit.org/show_bug.cgi?id=155178

        Reviewed by Fil Pizlo.

        Update feature defines.

        * Configurations/FeatureDefines.xcconfig:

2016-03-08  Brent Fulgham  <bfulgham@apple.com>

        [WK2][Mac] Allow processes to set "fast-dev-casheable" bit in Network Process
        https://bugs.webkit.org/show_bug.cgi?id=155189
        <rdar://problem/25042678>

        Reviewed by Alexey Proskuryakov.

        Update the NetworkProcess sandbox profiles with a declaration that using the
        system-fctl to touch the "hot file" flag (to support caching operations)
        is allowed. I should have done this in Bug 154503, but did not.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in: Add sandbox permission.

2016-03-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197793 and r197799.
        https://bugs.webkit.org/show_bug.cgi?id=155195

        something weird happened while landing this and everything
        broke (Requested by olliej on #webkit).

        Reverted changesets:

        "Start moving to separated writable and executable mappings in
        the JIT"
        https://bugs.webkit.org/show_bug.cgi?id=155178
        http://trac.webkit.org/changeset/197793

        "arm64 build fix after r197793."
        http://trac.webkit.org/changeset/197799

2016-03-08  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Grant explicit read access to ManagedPreferences
        https://bugs.webkit.org/show_bug.cgi?id=155173
        <rdar://problem/24910550>

        Reviewed by Alexey Proskuryakov.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: Add new
        read permission.

2016-03-08  Anders Carlsson  <andersca@apple.com>

        Ignore deprecation warnings.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::stopNSAppRunLoop):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::mouseButtonForEvent):
        (WebKit::mouseEventTypeForEvent):
        (WebKit::clickCountForEvent):
        (WebKit::globalPointForEvent):
        (WebKit::pointForEvent):
        (WebKit::textFromEvent):
        (WebKit::unmodifiedTextFromEvent):
        (WebKit::isKeypadEvent):
        (WebKit::isKeyUpEvent):
        (WebKit::modifiersForEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (toNSEventModifierFlags):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::updateContentInsetsIfAutomatic):
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        (WebKit::WebViewImpl::postFakeMouseMovedEventForFlagsChangedEvent):
        (WebKit::WebViewImpl::createFullScreenWindow):
        (WebKit::WebViewImpl::sendToolTipMouseExited):
        (WebKit::WebViewImpl::sendToolTipMouseEntered):
        (WebKit::applicationFlagsForDrag):
        (WebKit::WebViewImpl::setLastMouseDownEvent):
        (WebKit::WebViewImpl::doneWithKeyEvent):
        (WebKit::WebViewImpl::collectKeyboardLayoutCommandsForEvent):
        (WebKit::WebViewImpl::performKeyEquivalent):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::beginModal):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCanAttach):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate):
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::modifierFlagsFromWebEvent):
        (WebKit::getEventTypeFromWebEvent):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::cssAlignmentValueForNSTextAlignment):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):

2016-03-08  Oliver Hunt  <oliver@apple.com>

        Start moving to separated writable and executable mappings in the JIT
        https://bugs.webkit.org/show_bug.cgi?id=155178

        Reviewed by Filip Pizlo.

        Update feature defines.

        * Configurations/FeatureDefines.xcconfig:

2016-03-08  Commit Queue  <commit-queue@webkit.org>

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

        Has platform-specific code in non-platform files (Requested by
        smfr on #webkit).

        Reverted changeset:

        "AX: Force allow user zoom"
        https://bugs.webkit.org/show_bug.cgi?id=155056
        http://trac.webkit.org/changeset/197766

2016-03-04  Ada Chan  <adachan@apple.com>

        Fix lifetime issues regarding WebVideoFullscreenInterfaceMac
        https://bugs.webkit.org/show_bug.cgi?id=155130

        Reviewed by Beth Dakin.

        Now that both fullscreen and video controls manager rely on WebVideoFullscreenInterface,
        we now keep track of a "client count" for each context ID so we'll only remove it
        from the context map after all the "clients" are done with it.

        Before this change, every time WebVideoFullscreenManager::setUpVideoControlsManager()
        is called, the existing interface is cleared and a new one is created even when there's
        an existing interface for that. With this change, we reuse the existing interface for
        the video element.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::invalidate):
        Also clear out m_clientCounts.
        (WebKit::WebVideoFullscreenManagerProxy::addClientForContext):
        If the context ID is not in m_clientCounts yet, add the count of 1 to
        that table for that ID. Otherwise, increment the count by 1.
        (WebKit::WebVideoFullscreenManagerProxy::removeClientForContext):
        Assert that we have added this context id to m_clientCounts before.
        Decrement the count. If it reaches 0, remove this context ID from both
        m_clientCounts and m_contextMap.
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID):
        We have started a new fullscreen session using this interface. Call
        addClientForContext() to update the client count.
        (WebKit::WebVideoFullscreenManagerProxy::setUpVideoControlsManagerWithID):
        If the current controls manager set up has the same context ID as the one
        passed in, we don't have to do anything. Otherwise, if we have set up
        the video controls manager with a different ID before, call removeClientForContext()
        on the old ID to decrement its client count. Set m_controlsManagerContextId
        to the new value and call addClientForContext() with it.
        (WebKit::WebVideoFullscreenManagerProxy::didCleanupFullscreen):
        Instead of removing the mapping from m_contextMap directly, reset the fullscreen
        mode on the interface and call removeClientForContext(), which removes the mapping
        only if there's no more client using the interface.
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::~WebVideoFullscreenManager):
        Clear m_clientCounts.
        (WebKit::WebVideoFullscreenManager::removeContext):
        Add a helper method for removing the context.
        (WebKit::WebVideoFullscreenManager::addClientForContext):
        If the context ID is not in m_clientCounts yet, add the count of 1 to
        that table for that ID. Otherwise, increment the count by 1.
        (WebKit::WebVideoFullscreenManager::removeClientForContext):
        Assert that we have added this context id to m_clientCounts before.
        Decrement the count. If it reaches 0, remove this context ID from
        m_clientCounts and call removeContext() to clean up this context.
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement):
        We have started a new fullscreen session using this interface. Call
        addClientForContext() to update the client count. Create a layer hosting
        context if it's not there.
        (WebKit::WebVideoFullscreenManager::setUpVideoControlsManager):
        If we have set up a context for this video element before, see if it's
        the one we are currently managing video controls for. If it is, return early.
        Otherwise, call removeClientForContext() on the previous m_controlsManagerContextId
        and update m_controlsManagerContextId to the context ID of this video element.
        If there's no context created for this video element yet, set one up.
        Send a SetUpVideoControlsManagerWithID message to the proxy object in the UI process
        so it'll update its controls manager context ID. Also, conditionalize all of this
        under PLATFORM(MAC) to be consistent with WebVideoFullscreenManagerProxy.
        (WebKit::WebVideoFullscreenManager::didCleanupFullscreen):
        Just reset the fullscreen mode on the interface and call removeClientForContext() which
        only cleans up the context if there's no more client using it.

2016-03-08  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Add automation protocol methods for navigation

        https://bugs.webkit.org/show_bug.cgi?id=155163
        rdar://problem/25029054

        Reviewed by Darin Adler.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::getBrowsingContexts): Set url.
        (WebKit::WebAutomationSession::getBrowsingContext): Added.
        (WebKit::WebAutomationSession::navigateBrowsingContext): Added.
        (WebKit::WebAutomationSession::goBackInBrowsingContext): Added.
        (WebKit::WebAutomationSession::goForwardInBrowsingContext): Added.
        (WebKit::WebAutomationSession::reloadBrowsingContext): Added.
        * UIProcess/Automation/WebAutomationSession.h:

2016-03-08  Nan Wang  <n_wang@apple.com>

        AX: Force allow user zoom
        https://bugs.webkit.org/show_bug.cgi?id=155056

        Reviewed by Chris Fleizach.

        Soft linked libAccessibility library so that we can observe the accessibility
        setting change for the force always user scalable feature.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::forceAlwaysUserScalableChangedCallback):
        (WebKit::WebPage::create):
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::preferencesDidChange):
        (WebKit::WebPage::updateForceAlwaysUserScalable):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:

2016-03-08  Csaba Osztrogonác  <ossy@webkit.org>

        One more unreviewed speculative buildfix after r197728.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):

2016-03-08  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative buildfix after r197728.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):

2016-03-08  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Make WebAutomationSession::closeBrowsingContext work as expected

        https://bugs.webkit.org/show_bug.cgi?id=155162
        rdar://problem/25027191

        Reviewed by Brian Burg.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::closeBrowsingContext):
        Call closePage, the same method ultimately used by window.close().

        * UIProcess/WebPageProxy.h: Make closePage public.

2016-03-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r197062): [GTK] Transparent backgrounds no longer work after r197062
        https://bugs.webkit.org/show_bug.cgi?id=155119

        Reviewed by Martin Robinson.

        This is because after r197062 we are now realizing the view too
        early, even before the toplevel window has been realized, forcing
        the toplevel window to be realized. If the RGBA visual is set on
        the window after it has been realzied it doesn't have any
        effect. We should wait until the toplevel window is realized to
        realize the web view, giving time to the application to set RGBA
        visual and background color. If the toplevel window is already
        realized we realize the web view immediately, so that this doesn't
        affect the tearing problems fixed in r197062.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (toplevelWindowRealized):
        (webkitWebViewBaseSetToplevelOnScreenWindow):

2016-03-07  Keith Rollin  <krollin@apple.com>

        Enhance logging: Use "always on" macros
        https://bugs.webkit.org/show_bug.cgi?id=154499
        <rdar://problem/24757730>

        Reviewed by Chris Dumez.

        Make use of new logging macros by reporting on frame and resource
        load activity.

        Connection updated to report IPC errors, helping us identify when
        messaging between processes breaks down.

        ChildProcess updated to log if it is terminating early. Some
        sysdiagnose logging from customers indicate that this is happening in
        the wild.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::isAlwaysOnLoggingAllowed):
        * NetworkProcess/NetworkResourceLoader.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForSyncReply):
        * Shared/ChildProcess.cpp:
        (WebKit::didCloseOnConnectionWorkQueue):
        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didReceiveResource):
        (WebKit::WebResourceLoader::isAlwaysOnLoggingAllowed):
        * WebProcess/Network/WebResourceLoader.h:

2016-03-07  Brent Fulgham  <bfulgham@apple.com>

        Reduce startup and shutdown cost of resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=155120
        <rdar://problem/25010167>

        Reviewed by Andy Estes.

        Use a dedicated WorkQueue to process resource load statistics data. Allow
        processing to load (and save) previously stored statistics asynchronously so
        that it does not delay startup.
        
        Now that we have a more rational storage situation, get rid of the 'writeToDisk'
        method since it is no longer needed in the WK2 layer.

        Move all of the Resource Load Statistics file handling code from WebCore to this
        API layer.

        * UIProcess/WebResourceLoadStatisticsStore.cpp:
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore): Initialize
        member variable with storage path, rather than passing to WebCore code.
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated): Revised to
        use the new WorkQueue code.
        (WebKit::WebResourceLoadStatisticsStore::setResourceLoadStatisticsEnabled): When
        activating the feature, purge any old statistics before loading from disk.
        (WebKit::WebResourceLoadStatisticsStore::readDataFromDiskIfNeeded): Added.
        (WebKit::WebResourceLoadStatisticsStore::processWillOpenConnection): Added.
        (WebKit::WebResourceLoadStatisticsStore::processDidCloseConnection): Added.
        (WebKit::WebResourceLoadStatisticsStore::applicationWillTerminate): Make sure all
        of the WorkQueue tasks are done before terminating.
        (WebKit::WebResourceLoadStatisticsStore::persistentStoragePath): Moved from WebCore.
        (WebKit::WebResourceLoadStatisticsStore::writeEncoderToDisk): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::createDecoderFromDisk): Ditto.
        (WebKit::WebResourceLoadStatisticsStore::writeToDisk): Deleted.
        * UIProcess/WebResourceLoadStatisticsStore.h:
        (WebKit::WebResourceLoadStatisticsStore::coreStore):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::webProcessWillOpenConnection): Call new WebResourceLoadStatisticsStore code.
        (WebKit::WebsiteDataStore::webProcessDidCloseConnection): Ditto.

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

        Fix cookies with private browsing and NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=155147
        rdar://problem/25018279

        Reviewed by Brady Eidson.

        In the NetworkSession constructor, we look for a NetworkStorageSession in the SessionTracker
        and use that NetworkStorageSession's CFHTTPCookieStorageRef in the NSURLSessionConfiguration.
        NetworkStorageSessions were being set in SessionTracker's storageSessionMap after NetworkSessions
        were created, causing the NSHTTPCookieStorage of the NSURLSession to be different from the
        CFHTTPCookieStorageRef used by document.cookie in newly created private browsing sessions.
        This fixes that problem by passing the NetworkStorageSession as a constructor parameter to the
        NetworkSession so it can use the correct CFHTTPCookieStorageRef in its NSURLSessionConfiguration
        before it is in the storageSessionMap.

        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::sessionID):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::defaultSession):
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):

2016-03-07  Brent Fulgham  <bfulgham@apple.com>

        Correct bug in resource load statistics debug flag for legacy clients
        https://bugs.webkit.org/show_bug.cgi?id=155118
        <rdar://problem/25020088>

        Reviewed by Andy Estes.

        Some clients launch WebKit2 using the "legacy" configuration for the website data store.
        The Resource Load Statistics code was not added to this type of configuration, which
        prevents various WebKit2 clients from using this code.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration): Tell the legacy initializer where to
        find the resource load statistics data.

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

        Cleanup: Add convenience function URL::procotolIsBlob()
        https://bugs.webkit.org/show_bug.cgi?id=155127
        <rdar://problem/25016829>

        Reviewed by Brent Fulgham.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad): Modified to use URL::protocolIsBlob().
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canHandleRequest): Ditto.

2016-03-07  Simon Fraser  <simon.fraser@apple.com>

        Use CGColorSpaceCopyICCData instead of CGColorSpaceCopyICCProfile
        https://bugs.webkit.org/show_bug.cgi?id=155123
        rdar://problem/24990256

        Reviewed by Tim Horton.
        
        On newer OSes, use CGColorSpaceCopyICCData().

        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::encode):

2016-03-07  Gavin Barraclough  <barraclough@apple.com>

        Last opened tab does not receive SetHiddenPageTimerThrottlingIncreaseLimit message
        https://bugs.webkit.org/show_bug.cgi?id=155126

        Reviewed by Chris Dumez.

        WebPageProxy will increment the hidden page throttling counter from within its constructor,
        which currently causes the WebProcessPool to try to synchronously message all processes.
        The web page triggering the increment then fails to receive the message, since it was
        still being constructed. Make the update of the limit async, such that the page is fully
        constructed before the WebProcessPool processes the update.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::m_hiddenPageThrottlingAutoIncreasesCounter):
            - This now schedules a zero-delay timer to handle the update.
        (WebKit::m_hiddenPageThrottlingTimer):
            - This is now responsible for calling updateHiddenPageThrottlingAutoIncreaseLimit.
        * UIProcess/WebProcessPool.h:
            - Added m_hiddenPageThrottlingTimer.

2016-03-05  Enrica Casucci  <enrica@apple.com>

        Support preview on attachment elements.
        https://bugs.webkit.org/show_bug.cgi?id=155074
        rdar://problem/24806079

        Reviewed by Sam Weinig.

        Allowing preview to start on attachment elements.
        Adding a private UIDelegate method to provide the data for the preview.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):

2016-03-06  Andreas Kling  <akling@apple.com>

        Reduce page cache capacity from 3 to 2.
        <https://webkit.org/b/155087>

        Reviewed by Antti Koivisto.

        It's extremely rare that users go back more than 2 pages in the page cache,
        and nowadays the network cache makes even un-cached pages fast to reload.

        Trimming the page cache from 3 to 2 entries has a very nice effect on heap
        fragmentation. I'm seeing a ~5% progression on the iPad PLUM test locally;
        average memory usage across 300 loads goes from ~121MB to ~114MB.

        * Shared/CacheModel.cpp:
        (WebKit::calculateCacheSizes):

2016-03-05  Sam Weinig  <sam@webkit.org>

        Revert usage of autofill field name for use with UITextInputTraits
        until our bots can catch up.

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

2016-03-05  Chris Dumez  <cdumez@apple.com>

        Consolidate RuntimeApplicationChecks and RuntimeApplicationChecksIOS
        https://bugs.webkit.org/show_bug.cgi?id=155035

        Reviewed by Darin Adler.

        Update runtime application checks.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        * UIProcess/Cocoa/VersionChecks.mm:
        (WebKit::linkedOnOrAfter):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory):
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::expectsLegacyImplicitRubberBandControl):
        (WebKit::WebPageProxy::appleMailPaginationQuirkEnabled):

2016-03-05  Sam Weinig  <sam@webkit.org>

        Add support for processing the autofill field name out of form control elements ultimately to aid input methods
        <rdar://problem/23041180>
        https://bugs.webkit.org/show_bug.cgi?id=155079

        Reviewed by Enrica Casucci.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        Add AutofillFieldName. Convert some coders to use encodeEnum/decodeEnum instead of casting.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textInputTraits]):
        Map AutofillFieldNames to the associated UITextContentTypes.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):
        Extract the AutofillFieldNames onto the AssistedNodeInformation for <input> elements 
        and <textarea> elements.

2016-03-05  Timothy Hatcher  <timothy@apple.com>

        Implement the Automation protocol commands by tracking WebPageProxy objects
        that are controlled by automation and assigning them a UUID handle.

        https://bugs.webkit.org/show_bug.cgi?id=154953
        rdar://problem/24947489

        Reviewed by Brian Burg.

        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::didRequestNewWindow):
        Return a WebPageProxy instead of void so it can be assigned a UUID handle.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h:
        Return a WKPageRef from _automationSessionDidRequestNewWindow:.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::webPageProxyForHandle):
        (WebKit::WebAutomationSession::handleForWebPageProxy):
        (WebKit::WebAutomationSession::getBrowsingContexts):
        (WebKit::WebAutomationSession::createBrowsingContext):
        (WebKit::WebAutomationSession::closeBrowsingContext):
        (WebKit::WebAutomationSession::switchToBrowsingContext):

        * UIProcess/Automation/WebAutomationSession.h:
        Added new methods and maps to track pages and handles.

        * UIProcess/Cocoa/AutomationSessionClient.h:
        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::didRequestNewWindow):
        Return a WebPageProxy from the WKPageRef.

        * UIProcess/WebPageProxy.h: Make setFocus public.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setAutomationSession):
        Set the WebProcessPool on the WebAutomationSession so it can be used to find
        WebPageProxy objects controlled by automation.

2016-03-05  Timothy Hatcher  <timothy@apple.com>

        Rename Automation protocol methods to use "BrowsingContext" instead of "Window".
        Also flesh out the protocol commands more by adding switchToBrowsingContext
        and return a BrowsingContextHandle for createBrowsingContext.

        https://bugs.webkit.org/show_bug.cgi?id=154953
        rdar://problem/24947489

        Reviewed by Brian Burg.

        * UIProcess/Automation/Automation.json:
        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::getBrowsingContexts):
        (WebKit::WebAutomationSession::createBrowsingContext):
        (WebKit::WebAutomationSession::closeBrowsingContext):
        (WebKit::WebAutomationSession::switchToBrowsingContext):
        (WebKit::WebAutomationSession::getWindows): Deleted.
        (WebKit::WebAutomationSession::openWindow): Deleted.
        (WebKit::WebAutomationSession::closeWindow): Deleted.
        * UIProcess/Automation/WebAutomationSession.h:

2016-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Support Reflect.construct
        https://bugs.webkit.org/show_bug.cgi?id=147330

        Reviewed by Saam Barati.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::JSNPMethod::getCallData):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getCallData):
        (WebKit::JSNPObject::getConstructData):
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::hasMethod):
        (WebKit::NPJSObject::construct):
        (WebKit::NPJSObject::invoke):

2016-03-04  Alex Christensen  <achristensen@webkit.org>

        Fix file mime-types when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=155058

        Reviewed by Andy Estes.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        Call adjustMIMETypeIfNecessary like we do in connection didReceiveResponse in 
        WebCoreResourceHandleAsOperationQueueDelegate.mm.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        Don't content sniff file urls.  This check is analogous to ResourceHandle::shouldContentSniffURL.

2016-03-04  Sam Weinig  <sam@webkit.org>

        [WebKit2] Add WebKit2 equivalent of -[WebView _insertNewlineInQuotedContent]
        <rdar://problem/24943591>
        https://bugs.webkit.org/show_bug.cgi?id=155057

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageInsertNewlineInQuotedContent):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertNewlineInQuotedContent):
        * WebProcess/WebPage/WebPage.h:
        Expose WKBundlePageInsertNewlineInQuotedContent as SPI.

2016-03-04  Brent Fulgham  <bfulgham@apple.com>

        Stub API to support a debug menu option for measuring resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=154998
        <rdar://problem/24944604>

        Reviewed by Andy Estes.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::resourceLoadStatisticsEnabled): Added stub.
        (API::WebsiteDataStore::setResourceLoadStatisticsEnabled): Ditto.
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreSetResourceLoadStatisticsEnabled): Added method that calls through
        to the underlying APIWebsiteDataStore class.
        (WKWebsiteDataStoreGetResourceLoadStatisticsEnabled): Ditto.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:

2016-03-03  Enrica Casucci  <enrica@apple.com>

        Add a mechanism to customize the long press action.
        https://bugs.webkit.org/show_bug.cgi?id=154995
        rdar://problem/24823732

        Reviewed by Tim Horton.

        Adding a new private delegate method to allow clients to
        replace the action sheet displayed for images and links.
        The change also adds support for attachment elements.

        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showImageSheet]):
        (-[WKContentView _showAttachmentSheet]):
        (-[WKContentView _showLinkSheet]):
        (-[WKContentView _actionForLongPress]):
        (-[WKContentView actionSheetAssistant:shouldIncludeAppLinkActionsForElement:]):
        (-[WKContentView actionSheetAssistant:showCustomSheetForElement:]):
        (-[WKContentView actionSheetAssistant:decideActionsForElement:defaultActions:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2016-03-04  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Gather resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=154278
        <rdar://problem/24702892>

        Reviewed by Andy Estes.

        Revise the WebProcess to notify the UIProcess about resource load statistics. These
        updates are not time-critical, and do not need to be done in concert with the actual
        load. As resource loads are made, each WebProcess notifies the UIProcess of the new
        load counts, then clears its local state. These statistics are then aggregated in
        the UIProcess.

        * CMakeLists.txt: Add new ResourceLoadStatisticsState files to build.
        * DerivedSources.make: Ditto.
        * Platform/IPC/ArgumentCoders.h: Update to support HashCountedSets.
        * PlatformEfl.cmake: Add new ResourceLoadStatisticsState files to build.
        * PlatformGTK.cmake: Ditto.
        * PlatformMac.cmake: Ditto.
        * Shared/API/APIObject.h: Add new ResourceLoadStatistics type.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ExceptionDetails>::decode): Support new ResourceLoadStatistics type.
        (IPC::ArgumentCoder<ResourceLoadStatistics>::encode): Added.
        (IPC::ArgumentCoder<ResourceLoadStatistics>::decode): Added.
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Handle 'resourceLoadStatisticsEnabled' flag.
        (WebKit::WebProcessCreationParameters::decode): Ditto.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration): Add storage location for the
        resource load statistics.
        (API::ProcessPoolConfiguration::copy): Handle the new storage location and the feature flag.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultResourceLoadStatisticsDirectory): Added stub.
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultResourceLoadStatisticsDirectory): Added.
        (API::WebsiteDataStore::defaultDataStoreConfiguration): Added support for the new resource
        load statistics storage location.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]): Sync Process Pool configuration parameters
        with the state of our websiteData object's "ResourceLoadStatisticsEnabled" flag, so that
        new processes are created in the right state.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore _resourceLoadStatisticsEnabled]): Added.
        (-[WKWebsiteDataStore _setResourceLoadStatisticsEnabled:]): Added.
        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess): Handle new flag for enabling resource
        load statistics.
        * UIProcess/WebResourceLoadStatisticsStore.cpp: Added.
        (WebKit::WebResourceLoadStatisticsStore::create):
        (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::~WebResourceLoadStatisticsStore):
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsUpdated):
        (WebKit::WebResourceLoadStatisticsStore::setResourceLoadStatisticsEnabled):
        (WebKit::WebResourceLoadStatisticsStore::resourceLoadStatisticsEnabled):
        (WebKit::WebResourceLoadStatisticsStore::readDataFromDiskIfNeeded):
        (WebKit::WebResourceLoadStatisticsStore::writeToDisk):
        (WebKit::WebResourceLoadStatisticsStore::applicationWillTerminate):
        * UIProcess/WebResourceLoadStatisticsStore.h: Added.
        (WebKit::WebResourceLoadStatisticsStore::coreStore):
        * UIProcess/WebResourceLoadStatisticsStore.messages.in: Added.
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStore::platformInitialize): Register a termination handler
        to close down the resource load statistics store.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore): Initialize the new WebResourceLoadStatisticsStore
        member.
        (WebKit::WebsiteDataStore::webProcessWillOpenConnection): Register the WebResourceLoadStatisticsStore
        object as a work queue message receiver
        (WebKit::WebsiteDataStore::webProcessDidCloseConnection): Unregister WebResourceLoadStatisticsStore.
        (WebKit::WebsiteDataStore::resourceLoadStatisticsEnabled): Added.
        (WebKit::WebsiteDataStore::setResourceLoadStatisticsEnabled): Ditto.
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::resourceLoadStatisticsStore): Added.
        * WebKit2.xcodeproj/project.pbxproj: Add new ResourceLoadStatisticsState files to build.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Take into account the new parameter
        specifying whether resource load statistics are being captured.
        (WebKit::WebProcess::WebProcess): Initialized statistics changed notification timer.
        (WebKit::WebProcess::statisticsChangedTimerFired): Added. Send bundles of site load
        statistics to the UIProcess on a set interval. Clear out local cache after each send.
        (WebKit::WebProcess::setResourceLoadStatisticsEnabled): Added.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Add new SetResourceLoadStatisticsEnabled message.

2016-03-04  Daniel Bates  <dabates@apple.com>

        Temporarily use bundle identifier as part of user directory suffix
        https://bugs.webkit.org/show_bug.cgi?id=155042
        <rdar://problem/24983174>

        Reviewed by Brent Fulgham and Brady Eidson.

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

2016-03-04  Alex Christensen  <achristensen@webkit.org>

        Release build fix after r197572.
        https://bugs.webkit.org/show_bug.cgi?id=154993

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):

2016-03-04  Alex Christensen  <achristensen@webkit.org>

        Use NSURLSession for loading in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=154993

        Reviewed by Sam Weinig.

        * config.h:

2016-03-04  Alex Christensen  <achristensen@webkit.org>

        Use NetworkSession for pings
        https://bugs.webkit.org/show_bug.cgi?id=154984

        Reviewed by Antti Koivisto.

        Before this patch, we were using NSURLConnection for pings when the rest of the loading was being 
        done with NSURLSession.  To fix this, I implemented PingLoad, which is the NetworkSession equivalent
        of PingHandle.

        This fixes http/tests/security/contentSecurityPolicy/report-status-code-zero-when-using-https.html

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing):
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
        * NetworkProcess/PingLoad.h: Added.
        (WebKit::PingLoad::PingLoad):
        (WebKit::PingLoad::willPerformHTTPRedirection):
        (WebKit::PingLoad::didReceiveChallenge):
        (WebKit::PingLoad::didReceiveResponseNetworkSession):
        (WebKit::PingLoad::didReceiveData):
        (WebKit::PingLoad::didCompleteWithError):
        (WebKit::PingLoad::didBecomeDownload):
        (WebKit::PingLoad::didSendData):
        (WebKit::PingLoad::wasBlocked):
        (WebKit::PingLoad::cannotShowURL):
        (WebKit::PingLoad::timeoutTimerFired):
        (WebKit::PingLoad::~PingLoad):
        * WebKit2.xcodeproj/project.pbxproj:

2016-03-04  Timothy Hatcher  <timothy@apple.com>

        Inform WebKit and WebCore if a page is controlled by automation.

        https://bugs.webkit.org/show_bug.cgi?id=154991
        rdar://problem/24965784

        Reviewed by Joseph Pecoraro.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetIsControlledByAutomation):
        (WKPageSetControlledByAutomation):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setControlledByAutomation):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isControlledByAutomation):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageIsControlledByAutomation):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):
        (WebKit::WebPage::isControlledByAutomation):
        (WebKit::WebPage::setControlledByAutomation):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-03-03  Chris Dumez  <cdumez@apple.com>

        Regression(r196770): Unable to use HipChat Mac app
        https://bugs.webkit.org/show_bug.cgi?id=154999
        <rdar://problem/24931959>

        Reviewed by Darin Adler.

        Have the NetworkProcess and the WebProcess pass the UIProcess bundle
        identifier to WebCore so that we can do app detection of applications
        using a WK2 WebView (such as HipChat).

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

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

        Use larger tiles when possible to reduce per-tile painting overhead
        https://bugs.webkit.org/show_bug.cgi?id=154985
        rdar://problem/23635219

        Reviewed by Tim Horton.

        Do a bit of #include cleanup.

        * Shared/mac/RemoteLayerBackingStore.mm:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2016-03-03  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Use std::make_unique<> when creating std::unique_ptr<>
        https://bugs.webkit.org/show_bug.cgi?id=154574

        Reviewed by Darin Adler.

        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::open):
        * NetworkProcess/cache/NetworkCacheStatistics.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createColorChooser):

2016-03-03  Alex Christensen  <achristensen@webkit.org>

        Move SPI to CFNetworkSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=154992

        Reviewed by Andy Estes.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::applyBasicAuthorizationHeader):

2016-03-03  Alex Christensen  <achristensen@webkit.org>

        Use CredentialStorage with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154939

        Reviewed by Darin Adler.

        * config.h:
        Added compile-time flag to help us be able to keep track and remove this code when we can.
        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::pendingDownloadLocation):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearCachedCredentials):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSession::sessionID):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::applyBasicAuthorizationHeader):
        (WebKit::NetworkDataTask::NetworkDataTask):
        Use a credential storage and preemptively apply basic authentication headers if we have credentials from the storage.
        This is analogous to code in ResourceHandle::createNSURLConnection.
        
        (WebKit::NetworkDataTask::didReceiveChallenge):
        Make this look more like ResourceHandle::didReceiveAuthenticationChallenge.
        The call to tryPasswordBasedAuthentication was moved from the delegate callback to here.
        
        (WebKit::NetworkDataTask::willPerformHTTPRedirection):
        Use credentials from the credential storage if they exist.  This is analogous to code in ResourceHandle::willSendRequest.
        
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        Use credentials from the credential storage if they exist.  This is analogous to code in ResourceHandle::tryHandlePasswordBasedAuthentication.
        
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        If we are given a credential with CredentialPersistenceForSession, put it in the credential storage and give 
        CFNetwork a credential with CredentialPersistenceNone so it won't automatically be used again until the credential
        storage says its ok to use again.  This gives us the ability to clear session credentials when logout credentials are used.
        This is analogous to code in ResourceHandle::receivedCredential.
        
        (WebKit::NetworkSession::defaultSession):
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkSession::clearCredentials): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearCachedCredentials):
        (WebKit::WebProcess::focusedWebPage):
        We no longer need to clear credentials from the NSURLSessions because we don't store session credentials in them.
        Instead, calling CredentialStorage.clearCredentials is sufficient.

2016-03-03  Andy Estes  <aestes@apple.com>

        Adopt CFNetwork storage partitioning SPI
        https://bugs.webkit.org/show_bug.cgi?id=154957
        rdar://problem/23614620

        Reviewed by Darin Adler.

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask): Computed the storage partition identifier for the new session task.
        If non-empty, set it using a NSURLSessionTask SPI.

2016-03-03  Alex Christensen  <achristensen@webkit.org>

        [WK2] testRunner.setPrivateBrowsingEnabled doesn't work with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=115274

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        (WebKit::NetworkConnectionToWebProcess::ensureLegacyPrivateBrowsingSession):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        (WebKit::WebProcess::ensureLegacyPrivateBrowsingSessionInNetworkProcess):
        (WebKit::WebProcess::pluginProcessConnectionManager):
        * WebProcess/WebProcess.h:

2016-03-02  Alex Christensen  <achristensen@webkit.org>

        Properly cancel downloads when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154893

        Reviewed by Brady Eidson.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::cancel):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):

2016-03-01  Ada Chan  <adachan@apple.com>

        Update the media element's presentation mode properly after going in and out of full screen via the Full Screen API
        https://bugs.webkit.org/show_bug.cgi?id=154834

        Reviewed by Simon Fraser.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode):
        Call the new exitFullscreenWithoutAnimationToMode() method on WebVideoFullscreenInterfaceMac.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exitVideoFullscreenToModeWithoutAnimation):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::exitVideoFullscreenToModeWithoutAnimation):

2016-03-02  Beth Dakin  <bdakin@apple.com>

        Crashes in media tests after http://trac.webkit.org/changeset/197461
        https://bugs.webkit.org/show_bug.cgi?id=154933

        Reviewed by Eric Carlson.

        Since the controlsManagerInterface is not guaranteed to exist, it doesn't 
        make sense to return a reference. Return a pointer instead.
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::isVisible):
        (WebKit::WebVideoFullscreenManagerProxy::controlsManagerInterface):
        (WebKit::WebVideoFullscreenManagerProxy::fullscreenMayReturnToInline):

2016-03-02  Beth Dakin  <bdakin@apple.com>

        Add support for playbackControlsManager
        https://bugs.webkit.org/show_bug.cgi?id=154742
        -and corresponding-
        rdar://problem/23833753

        Reviewed by Jer Noble.

        WebVideoFullscreenManagerProxy ensures the model and interface for the 
        UIProcess side of the playbackControlsManager. It also caches the 
        m_controlsManagerContextId so that it can return the 
        controlsManagerInterface.
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setUpVideoControlsManagerWithID):
        (WebKit::WebVideoFullscreenManagerProxy::controlsManagerInterface):

        Pipe isPlayingMediaDidChange() to WebViewImpl, and use that information to 
        update WebViewImplAdditions.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::isPlayingMediaDidChange):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        (WebKit::WebPageProxy::isPlayingVideoWithAudio):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isPlayingAudio):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isPlayingMediaDidChange):

        Pipe setUpVideoControlsManager to the WebVideoFullscreenManager.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setUpVideoControlsManager):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

        Ensure the model an interface for the playbackControlsManager on the 
        WebProcess side and pass the message to the UIProcess to do the same.
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::setUpVideoControlsManager):

2016-03-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r197409): [GTK] Web process always crashes on WebPage construction after r197409
        https://bugs.webkit.org/show_bug.cgi?id=154918

        Reviewed by Žan Doberšek.

        We have an incorrect check in DrawingAreaImpl constructor that has
        never actually worked because it uses the page settings before
        they were initialized. But that has been fixed in r197409 and now
        we are always forcing accelerated compositing mode incorrectly,
        because m_alwaysUseCompositing is set in the constructor and never
        changed again.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl): Remove code to set
        settings and m_alwaysUseCompositing, since that should be done in
        updatePreferences().
        (WebKit::DrawingAreaImpl::updatePreferences): Update the settings
        accordingly and always update m_alwaysUseCompositing when AC is
        enabled and forced in the settings.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): WebPage::updatePreferences() calls
        DrawingArea::updatePreferences(), but since r197409 it happens
        before the drawing area has been created. So, call
        DrawingArea::updatePreferences() in the constructor right after
        the main frame has been created, since
        DrawingArea::updatePreferences() uses the main frame.

2016-02-29  Ada Chan  <adachan@apple.com>

        Adopt the new version of AVOutputDeviceMenuController's showMenuForRect method.
        https://bugs.webkit.org/show_bug.cgi?id=154823

        Reviewed by Tim Horton.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPlaybackTargetPicker):
        (WebKit::WebPageProxy::customPlaybackActionSelected):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::showPlaybackTargetPicker):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::customPlaybackActionSelected):

2016-02-29  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Stub support for WebsiteDataTypeResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=154689
        <rdar://problem/24702576>

        Reviewed by Sam Weinig.

        * Shared/WebsiteData/WebsiteDataType.h: Add new WebsiteDataTypeResourceLoadStatistics.
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString): Handle new type.
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes): Ditto.
        (WebKit::toWKWebsiteDataTypes): Ditto.
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h: Add new _WebsiteDataTypeResourceLoadStatistics.

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

        Correctly keep track of NetworkDataTasks with and without credentials when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154876

        Reviewed by Brady Eidson.

        I was seeing an assertion failure from ASSERT(!m_session.m_dataTaskMap.contains(taskIdentifier()))
        in the NetworkDataTask constructor sometimes.  This is because a task identifier is not enough information
        to uniquely find a NetworkDataTask in a NetworkSession since r196034 because there are two NSURLSessions
        in a NetworkSession, one with credentials and one without.  The assertion would fire in a case like if we
        made the first NetworkDataTask with credentials (taskIdentifier is 1) and the first NetworkDataTask 
        without credentials before the first NetworkDataTask with credentials was finished.  In that case, the 
        taskIdentifier would also be 1, which would conflict with the other taskIdentifier.  That taskIdentifier
        would uniquely identify the task in the correct NSURLSession, though, so the solution is to keep a map
        for each NSURLSession in the NetworkSession.

        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::~NetworkDataTask):
        (WebKit::NetworkDataTask::suspend):
        (WebKit::serverTrustCredential):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:]):
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        (WebKit::NetworkSession::clearCredentials):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkSession::addDownloadID):

2016-03-01  Andreas Kling  <akling@apple.com>

        REGRESSION (r154616): Accelerated drawing is off during the initial load
        <https://webkit.org/b/123812>

        Reviewed by Tim Horton.

        Load preferences before instantiating the first DrawingArea. This ensures that we do the
        initial paint using accelerated drawing, and avoids allocating persistent data structures
        only needed by the software rendering path.

        * WebProcess/WebPage/WebPage.cpp:

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

        Fix tests when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154866

        Reviewed by Brady Eidson.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::globalCustomProtocolManager):
        (WebKit::NetworkSession::setCustomProtocolManager):
        
        Use a static NeverDestroyed instead of a local NeverDestroyed.
        This fix was suggested by Darin after I broke the custom protocol tests in r197362.
        
        (WebKit::NetworkSession::clearCredentials):
        
        In r197223 I added code that I thought cleared the credentials of a session, but it was
        actually trying (and failing) to remove the credentials from the NSURLCredentialStorage that
        were stored with NSURLCredentialPersistencePermanent.
        This was causing credentials stored in an NSURLSession with NSURLCredentialPersistenceForSession
        to remain for the next tests, and was causing credentials from previous tests, usually from
        http/tests/loading/basic-credentials-sent-automatically.html, to be used in future tests.
        Creating a new NSURLSession is the equivalent of CredentialStorage::clearCredentials because it
        removes all credentials stored with NSURLCredentialPersistenceForSession.

2016-03-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkCache: Web process leaks resource buffer when using shareable reasources
        https://bugs.webkit.org/show_bug.cgi?id=154852

        Reviewed by Darin Adler.

        ResourceLoader::didReceiveBuffer() expects a PassRefPtr, but we
        are passing a raw pointer making PassRefPtr to take another
        reference instead of transfering the ownership as expected.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResource):

2016-02-29  Zan Dobersek  <zdobersek@igalia.com>

        ThreadedCompositor: clean up composition-specific resources before shutting down the thread
        https://bugs.webkit.org/show_bug.cgi?id=154793

        Reviewed by Carlos Garcia Campos.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::runCompositingThread): Before concluding the
        compositing thread run, clean up all the resources that were allocated at
        the start, and in the reverse order. Specifically, we now also deallocate
        the CoordinatedGraphicsScene and the SimpleViewportController objects. This
        way these are not deallocated on the main thread when the ThreadedCompositor
        destructor would otherwise clean them up.

2016-02-29  Zan Dobersek  <zdobersek@igalia.com>

        ThreadSafeCoordinatedSurface: remove the unused private create() static method
        https://bugs.webkit.org/show_bug.cgi?id=154792

        Reviewed by Carlos Garcia Campos.

        Remove the static ThreadSafeCoordinatedSurface::create() method that accepted
        a std::unique_ptr<ImageBuffer> object as its third parameter. This was not used
        anywhere.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp:
        (WebKit::ThreadSafeCoordinatedSurface::create): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.h:

2016-02-29  Simon Fraser  <simon.fraser@apple.com>

        Remove the experimental feature of antialiased font dilation
        https://bugs.webkit.org/show_bug.cgi?id=154843

        Reviewed by Zalan Bujtas.

        Remove the "antialiased font dilation" code path, and related prefs.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAntialiasedFontDilationEnabled):
        (WKPreferencesGetAntialiasedFontDilationEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _antialiasedFontDilationEnabled]): Deleted.
        (-[WKPreferences _setAntialiasedFontDilationEnabled:]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Deleted.

2016-02-29  Brady Eidson  <beidson@apple.com>

        Modern IDB: WebKit 2 IPC layer easily confused about multiple web processes being connected.
        https://bugs.webkit.org/show_bug.cgi?id=154837

        Reviewed by Alex Christensen.

        The crux of the bug is that WebProcesses cannot assign themselves server-unique identifiers...
        The server must do that for them.
        
        A once-per-session-per-WebProcess sync message and a few updates to connection management fix this.
        
        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::didReceiveSyncMessage):
        (WebKit::generateConnectionToServerIdentifier):
        (WebKit::DatabaseToWebProcessConnection::establishIDBConnectionToServer):
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * DatabaseProcess/DatabaseToWebProcessConnection.messages.in:

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
        (WebKit::generateConnectionToServerIdentifier): Deleted.

        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::didReceiveMessage):
        (WebKit::WebToDatabaseProcessConnection::idbConnectionToServerForSession):
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:

2016-02-29  Alex Christensen  <achristensen@webkit.org>

        Don't call NetworkProcess::singleton from WebProcess when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154829

        Reviewed by Anders Carlsson.

        We were calling NetworkProcess::singleton when making the default session in the 
        WebProcess, which caused bad things to happen.  We also were never clearing the 
        credentials in the WebProcess between tests because it used to always call
        NetworkProcess::singleton, which caused flaky tests.

        This fixes repeatable crashes in http/tests/media/media-document-referer.html and 
        http/tests/media/media-document.html when using NetworkSession.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::~NetworkProcess):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::configurationForType):
        (WebKit::globalCustomProtocolManager):
        (WebKit::NetworkSession::setCustomProtocolManager):
        (WebKit::NetworkSession::defaultSession):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearCachedCredentials):

2016-02-29  Gavin Barraclough  <barraclough@apple.com>

        RefCounter<T>::Event -> RefCounterEvent
        https://bugs.webkit.org/show_bug.cgi?id=154767

        Reviewed by Darin Adler.

        RefCounter<T>::Event is kinda verbose to use, and there is no need for this
        to be specific to a particular typeof RefCounter. Move the enum class up to
        the top level & rename to RefCounterEvent.

        Also remove UserObservablePageToken - this is vestigial & not really offering
        anything over just using UserObservablePageCounter::Token directly.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::PluginProcessManager):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        (WebKit::PluginProcessManager::updateProcessSuppressionDisabled):
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::ProcessThrottler):
        (WebKit::m_backgroundCounter):
        (WebKit::m_suspendMessageCount):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::m_processSuppressionDisabledForPageCounter):
        (WebKit::m_hiddenPageThrottlingAutoIncreasesCounter):
        * UIProcess/WebProcessPool.h:

2016-02-29  Konstantin Tokarev  <annulen@yandex.ru>

        Fixed compilation with !ENABLE(DATABASE_PROCESS).
        https://bugs.webkit.org/show_bug.cgi?id=154813

        Reviewed by Michael Catanzaro.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::terminateDatabaseProcess): Added missing #if
        guard.

2016-02-29  Adrien Plazas  <aplazas@igalia.com>

        [GTK] Touch slider test fails due to assertion in webkitWebViewBaseTouchEvent()
        https://bugs.webkit.org/show_bug.cgi?id=153829

        Reviewed by Carlos Garcia Campos.

        Once a touch event sequence is identified as a gesture, remove it
        from the list of handled touch events.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseTouchEvent):

2016-02-29  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed buildfix after r197177. Just for fun.

        * PlatformMac.cmake:

2016-02-28  Sam Weinig  <sam@webkit.org>

        Reimplement WKPageGroup in terms of WKUserContentController
        https://bugs.webkit.org/show_bug.cgi?id=154804

        Reviewed by Dan Bernstein.

        Instead of having both WebPageGroup and WebUserContentControllerProxy both keep track
        of user scripts and user stylesheets, give WebPageGroup a WebUserContentControllerProxy
        and let it take care of things. This allows us to remove a ton of duplicate code, and
        provides a convenient way for clients currently using PageGroup based user content insertion
        to start using UserContentController, since they can now be used at the same time.

        When using WKPageConfigurationRef, the rule is:
            - If you don't set a WKUserContentControllerRef, the one from the WKPageGroupRef will be used.
            - If you do set a WKUserContentControllerRef, it will be used, and the one from the WKPageGroupRef
              will do nothing for that web view.

        * DerivedSources.make:
        Remove WebPageGroupProxy. It no longer is a MessageReceiver.

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        Stop encoding/decoding user content, instead just encode the identifier to the UserContentController.

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupGetUserContentController):
        * UIProcess/API/C/WKPageGroup.h:
        Add getter for the underlying WKUserContentControllerRef.

        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::retainWK):
        Add retainWK() helper to match RetainPtr's retainPtr() helper.

        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::WebPageGroup):
        (WebKit::WebPageGroup::userContentController):
        (WebKit::WebPageGroup::addUserStyleSheet):
        (WebKit::WebPageGroup::addUserScript):
        (WebKit::WebPageGroup::removeAllUserStyleSheets):
        (WebKit::WebPageGroup::removeAllUserScripts):
        (WebKit::WebPageGroup::removeAllUserContent):
        (WebKit::WebPageGroup::addUserContentExtension):
        (WebKit::WebPageGroup::removeUserContentExtension):
        (WebKit::WebPageGroup::removeAllUserContentExtensions):
        * UIProcess/WebPageGroup.h:
        Pass through to the WebUserContentControllerProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::finishInitializingWebPageAfterProcessLaunch):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        WebPageProxies always have a WebUserContentControllerProxy now, so it can go in a Ref and
        a few branches can be removed.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):
        If a UserContentController is not passed in, use the one from the PageGroup.

        * WebKit2.xcodeproj/project.pbxproj:
        Remove files.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        Add some #includes that are now needed.

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::getOrCreate):
        * WebProcess/UserContent/WebUserContentController.h:
        Modernize WebUserContentController::getOrCreate to return a Ref.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):
        (WebKit::WebPage::addUserScript):
        (WebKit::WebPage::addUserStyleSheet):
        (WebKit::WebPage::removeAllUserContent):
        * WebProcess/WebPage/WebPage.h:
        Store the WebUserContentController in Ref, remove unnecessary branches/asserts.

        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):
        (WebKit::WebPageGroupProxy::~WebPageGroupProxy):
        (WebKit::WebPageGroupProxy::userContentController):
        (WebKit::WebPageGroupProxy::addUserStyleSheet): Deleted.
        (WebKit::WebPageGroupProxy::addUserScript): Deleted.
        (WebKit::WebPageGroupProxy::removeAllUserStyleSheets): Deleted.
        (WebKit::WebPageGroupProxy::removeAllUserScripts): Deleted.
        (WebKit::WebPageGroupProxy::removeAllUserContent): Deleted.
        (WebKit::WebPageGroupProxy::addUserContentExtension): Deleted.
        (WebKit::WebPageGroupProxy::removeUserContentExtension): Deleted.
        (WebKit::WebPageGroupProxy::removeAllUserContentExtensions): Deleted.
        * WebProcess/WebPage/WebPageGroupProxy.h:
        Store a WebUserContentController in a Ref, remove now unnecessary message handling functions.

        * WebProcess/WebPage/WebPageGroupProxy.messages.in:
        Removed.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        Remove routing to WebPageGroupProxy, which is no longer a MessageReceiver.

2016-02-28  Sam Weinig  <sam@webkit.org>

        Bind _WKUserStyleSheets to _WKUserContentWorlds to allow for grouping of user content by associating to a world
        https://bugs.webkit.org/show_bug.cgi?id=154798

        Reviewed by Dan Bernstein.

        Treat _WKUserStyleSheets like WKUserScripts and allow them to be bound to a _WKUserContentWorld.
        The immediate benefit of this is allowing a client to bind a set of user content (scripts and stylesheets
        for now) to a world and have them easily remove all user content associated with that world easily.

        * Shared/API/APIArray.h:
        Add helpers removeAllMatching and removeAllOfTypeMatching.

        * UIProcess/API/APIUserStyleSheet.h:
        Add API::UserContentWorld member.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _removeAllUserScriptsAssociatedWithUserContentWorld:]):
        (-[WKUserContentController _removeAllUserStyleSheetsAssociatedWithUserContentWorld:]):
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        Add _removeAllUserScriptsAssociatedWithUserContentWorld and _removeAllUserStyleSheetsAssociatedWithUserContentWorld.

        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:userContentWorld:]):
        (toStringVector): Deleted.
        * UIProcess/API/Cocoa/_WKUserContentWorldInternal.h:
        (API::toStringVector):
        Move toStringVector to a location where it can be shared.

        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:userContentWorld:]):
        Add new initializer which has a world to be bound to. While here, match WKUserScript and add support for the 
        legacy whitelist and blacklists.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::removeProcess):
        (WebKit::WebUserContentControllerProxy::addUserContentWorldUse):
        (WebKit::WebUserContentControllerProxy::shouldSendRemoveUserContentWorldsMessage):
        (WebKit::WebUserContentControllerProxy::removeUserContentWorldUses):
        (WebKit::WebUserContentControllerProxy::addUserScript):
        (WebKit::WebUserContentControllerProxy::removeUserScript):
        (WebKit::WebUserContentControllerProxy::removeAllUserScripts):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        Refactor to share the code which decides whether to send AddUserContentWorlds/RemoveUserContentWorlds
        messages.

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserContentWorlds):
        (WebKit::WebUserContentController::removeUserContentWorlds):
        (WebKit::WebUserContentController::addUserScripts):
        (WebKit::WebUserContentController::removeUserScript):
        (WebKit::WebUserContentController::removeAllUserScripts):
        (WebKit::WebUserContentController::addUserStyleSheets):
        (WebKit::WebUserContentController::removeUserStyleSheet):
        (WebKit::WebUserContentController::removeAllUserStyleSheets):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:
        Add support for binding stylesheets to worlds and allow removing all the scripts/stylesheets from a 
        set of worlds at once by passing Vectors of world identifiers in the remove messages.

2016-02-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r197204, r197207, r197211, r197217,
        r197218, and r197219.
        https://bugs.webkit.org/show_bug.cgi?id=154780

        Caused crashes in WebVideoFullscreenManagerProxy (Requested by
        ap on #webkit).

        Reverted changesets:

        "Add support for playbackControlsManager"
        https://bugs.webkit.org/show_bug.cgi?id=154742
        http://trac.webkit.org/changeset/197204

        "Attempted build fix."
        http://trac.webkit.org/changeset/197207

        "Attempted build fix."
        http://trac.webkit.org/changeset/197211

        "Attempted 32-bit build fix."
        http://trac.webkit.org/changeset/197217

        "Another 32-bit build fix."
        http://trac.webkit.org/changeset/197218

        "32-bit!!!"
        http://trac.webkit.org/changeset/197219

2016-02-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ clean build.

        Add missing header include.

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:

2016-02-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Network cache: old pages returned by disk cache on history navigation after session is restored
        https://bugs.webkit.org/show_bug.cgi?id=153230

        Reviewed by Chris Dumez.

        Since r181734, the network cache never revalidates resources for
        history navigation. This is good for the memory cache, but in the
        case of disk cache, we might end up with outdated pages when
        restoring the session. When restoring the session happens because
        of an API request (we also restore the session when recovering
        from a web process crash), we should revalidate back forward list
        requests in the disk cache if needed. This will only happen the
        first time they are loaded after a session restore. After a web process
        crash, resources will be used uncondionally from the disk cache.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItemFromUIProcess): Use Ref&&
        instead of PassRefPtr.
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WePage::WebPage): Call restoreSessionInternal passing
        No as restoredByAPIRequest parameter.
        (WebKit::WebPage::restoreSessionInternal): Set restoredFromSession
        flag to the created HistoryItem if the item was restored from
        session by an API request.
        (WebKit::WebPage::restoreSession): Call restoreSessionInternal
        passing Yes as restoredByAPIRequest parameter.
        * WebProcess/WebPage/WebPage.h:

2016-02-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix a typo.

        Unreviewed. Shame I didn't notice in the previous commit.

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::removeUserContentWorld):

2016-02-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix GTK and maybe EFL build after r197172.

        Unreviewed.

        * CMakeLists.txt:
        * UIProcess/API/gtk/WebKitUserContent.cpp:
        (_WebKitUserScript::_WebKitUserScript):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::removeUserContentWorld):
        (WebKit::WebUserContentController::addUserScripts):
        (WebKit::WebUserContentController::removeUserScript):
        (WebKit::WebUserContentController::removeAllUserScripts):

2016-02-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Fix order of parameters in gtkdoc for webkit_web_view_get_snapshot

        Unreviewed.

        * UIProcess/API/gtk/WebKitWebView.cpp:

2016-02-26  Brady Eidson  <beidson@apple.com>

        Modern IDB: New database versions are never committed to SQLite.
        <rdar://problem/24860952> and https://bugs.webkit.org/show_bug.cgi?id=154741
        
        Modern IDB: If a database handle is not open, files are not actually deleted from disk
        https://bugs.webkit.org/show_bug.cgi?id=154756

        Reviewed by Alex Christensen.

        Add WK2 SPI to force termination of the database process.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _terminateDatabaseProcess]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::terminateDatabaseProcess):
        * UIProcess/WebProcessPool.h:

2016-02-26  Alex Christensen  <achristensen@webkit.org>

        Clear credentials and prevent unauthorized credential storage when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154755

        Reviewed by Brady Eidson.

        Credentials from previous tests were being used sometimes, notably in 
        http/tests/misc/401-alternative-content.php when running multiple credential-based
        tests with the same WebKitTestRunner.

        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearCachedCredentials):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::clearCredentials):
        (WebKit::NetworkSession::dataTaskForIdentifier):

2016-02-26  Gavin Barraclough  <barraclough@apple.com>

        Page TimerAlignmentIntervalIncrease mechanism should have upper limit
        https://bugs.webkit.org/show_bug.cgi?id=154744

        Reviewed by Geoff Garen.

        There would be diminishing returns from throttling timers in background pages infinitely.
        Add a heuristic to limit appropriately.

        The flow of data here is WebPageProxy informs WebProcessPool of the number of pages
        participating in this mechanism, WebProcessPool computes an apropriate limit and pushes
        this out to the WebProcesses, which in turn update each of their pages.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
            - Call updateHidenPageThrottingAutoIncreases on creation.
        (WebKit::WebPageProxy::updateHidenPageThrottingAutoIncreases):
            - If increasing timer throttling is enabled increment the counter on WebProcessPool.
        (WebKit::WebPageProxy::preferencesDidChange):
            - Call updateHidenPageThrottingAutoIncreases on preferences change.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
            - initialize new RefCounter.
        (WebKit::WebProcessPool::updateHidenPageThrottingAutoIncreaseLimit):
            - When count of participating pages changes, update the limit.
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::setHiddenPageTimerThrottlingIncreaseLimit):
            - Propagate limit to WebCore::Page.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setHiddenPageTimerThrottlingIncreaseLimit):
            - Propagate limit to WebPages.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
            - Added new message.

2016-02-26  Beth Dakin  <bdakin@apple.com>

        Attempted build fix.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setUpVideoControlsManagerWithID):
        (WebKit::WebVideoFullscreenManagerProxy::resetMediaState):

2016-02-26  Anders Carlsson  <andersca@apple.com>

        Fix Yosemite build.

        * UIProcess/API/Cocoa/_WKWebsiteDataSize.mm:
        (-[_WKWebsiteDataSize sizeOfDataTypes:]):

2016-02-26  Beth Dakin  <bdakin@apple.com>

        Add support for playbackControlsManager
        https://bugs.webkit.org/show_bug.cgi?id=154742
        -and corresponding-
        rdar://problem/23833753

        Reviewed by Jer Noble.

        WebVideoFullscreenManagerProxy ensures the model and interface for the 
        UIProcess side of the playbackControlsManager. It also caches the 
        m_controlsManagerContextId so that it can return the 
        controlsManagerInterface.
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setUpVideoControlsManagerWithID):
        (WebKit::WebVideoFullscreenManagerProxy::controlsManagerInterface):

        Pipe isPlayingMediaDidChange() to WebViewImpl, and use that information to 
        update WebViewImplAdditions.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::isPlayingMediaDidChange):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        (WebKit::WebPageProxy::isPlayingVideoWithAudio):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isPlayingAudio):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isPlayingMediaDidChange):

        Pipe setUpVideoControlsManager to the WebVideoFullscreenManager.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setUpVideoControlsManager):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

        Ensure the model an interface for the playbackControlsManager on the 
        WebProcess side and pass the message to the UIProcess to do the same.
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::setUpVideoControlsManager):

2016-02-26  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore/WKWebsiteDataRecord needs to provide size information about each type of data
        https://bugs.webkit.org/show_bug.cgi?id=154750

        Reviewed by Tim Horton.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::fetchWebsiteData):
        WebsiteData::Entry now takes a size.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        If necessary, compute sizes.

        (WebKit::NetworkProcess::fetchWebsiteData):
        Just pass 0 for the CF cache for now.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        FetchWebsiteData now takes a OptionSet<WebsiteDataFetchOption>.

        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::Entry::encode):
        (WebKit::WebsiteData::Entry::decode):
        Encode and decode the size.

        * Shared/WebsiteData/WebsiteData.h:
        Add size.

        * Shared/WebsiteData/WebsiteDataFetchOption.h:
        Add new enum.

        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        Pass an empty OptionSet<WebsiteDataFetchOption>.

        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetCacheOrigins):
        Pass an empty OptionSet<WebsiteDataFetchOption>.

        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (-[WKWebsiteDataRecord description]):
        If we have a size, print it out as well.

        (-[WKWebsiteDataRecord _dataSize]):
        Return a size if we have one.

        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        Call through to the SPI.

        (-[WKWebsiteDataStore _fetchDataRecordsOfTypes:withOptions:completionHandler:]):
        Compute the right options.

        * UIProcess/API/Cocoa/WKWebsiteDataStoreInternal.h:
        Import WKWebsiteDataStorePrivate.h.

        * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
        Add SPI.

        * UIProcess/API/Cocoa/_WKWebsiteDataSize.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataSize.mm:
        (-[_WKWebsiteDataSize initWithSize:]):
        (-[_WKWebsiteDataSize totalSize]):
        (-[_WKWebsiteDataSize sizeOfDataTypes:]):
        Add _WKWebsiteDataSize header.

        * UIProcess/API/Cocoa/_WKWebsiteDataSizeInternal.h: Add IPI header.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        This now takes a OptionSet<WebsiteDataFetchOption>.

        * UIProcess/Network/NetworkProcessProxy.h:
        Update members.

        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        Add a hash map from types to sizes.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        This now takes a OptionSet<WebsiteDataFetchOption>.

        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Update member functions.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::fetchWebsiteData):
        This now takes a OptionSet<WebsiteDataFetchOption>.

2016-02-26  Anders Carlsson  <andersca@apple.com>

        Add a toWebsiteDataType and reimplement toWebsiteDataTypes using it
        https://bugs.webkit.org/show_bug.cgi?id=154746

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataType):
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):

2016-02-26  Anders Carlsson  <andersca@apple.com>

        Add WTF::OptionSet and use it for the website data types enum
        https://bugs.webkit.org/show_bug.cgi?id=154733

        Reviewed by Geoffrey Garen.

        This is a pretty mechanical change:
        
        Convert all uses of the WebsiteDataTypes enum to WTF::OptionSet. Rename the WebsiteDataTypes enum to
        WebsiteDataType (since it only represents a single data type), and rename headers. Encode and decode WTF::OptionSet properly.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::fetchWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<OptionSet<T>>::encode):
        (IPC::ArgumentCoder<OptionSet<T>>::decode):
        * Scripts/webkit/messages.py:
        (class_template_headers):
        * Shared/WebsiteData/WebsiteData.h:
        * Shared/WebsiteData/WebsiteDataType.h: Renamed from Source/WebKit2/Shared/WebsiteData/WebsiteDataTypes.h.
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        (WKApplicationCacheManagerDeleteAllEntries):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (toWebsiteDataTypes):
        (WKResourceCacheManagerClearCacheForOrigin):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::fetchWebsiteData):
        (WebKit::DatabaseProcessProxy::deleteWebsiteData):
        (WebKit::DatabaseProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::add):
        (WebKit::WebsiteDataRecord::addCookieHostName):
        (WebKit::WebsiteDataRecord::addPluginDataHostName):
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessTypeForDataFetch):
        (WebKit::computeWebProcessAccessTypeForDataFetch):
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::computeNetworkProcessAccessTypeForDataRemoval):
        (WebKit::computeWebProcessAccessTypeForDataRemoval):
        (WebKit::WebsiteDataStore::removeData):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::fetchWebsiteData):
        (WebKit::WebProcess::deleteWebsiteData):
        (WebKit::WebProcess::deleteWebsiteDataForOrigins):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2016-02-26  Sam Weinig  <sam@webkit.org>

        Try to fix the Yosemite build again.

        * UIProcess/API/Cocoa/WKUserScript.mm:
        (toStringVector):
        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:userContentWorld:]):

2016-02-26  Sam Weinig  <sam@webkit.org>

        Try to fix the Yosemite build.

        * UIProcess/API/Cocoa/WKUserScriptPrivate.h:

2016-02-25  Anders Carlsson  <andersca@apple.com>

        Cache::traverse should pass the record info to its traversal handler
        https://bugs.webkit.org/show_bug.cgi?id=154695

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::clearDiskCacheEntries):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::traverse):
        * NetworkProcess/cache/NetworkCache.h:

2016-02-25  Gavin Barraclough  <barraclough@apple.com>

        RefCounter value changed callback should be called on all changes (not just zero edge).
        https://bugs.webkit.org/show_bug.cgi?id=154699

        Reviewed by Anders Carlsson.

        RefCounter currently only triggers a callback when the count goes from zero
        to non-zero and vice-versa. Change that, to be useful to more clients.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::PluginProcessManager):
            - Updated for change in RefCounter callback siganture.
        * UIProcess/Plugins/PluginProcessManager.h:
            - Updated for change in RefCounter callback siganture.
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        (WebKit::PluginProcessManager::updateProcessSuppressionDisabled):
            - updated logic for enabling process supression.
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::ProcessThrottler):
            - Updated for change in RefCounter callback siganture.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
            - Updated for change in RefCounter callback siganture.

2016-02-26  Andreas Kling  <akling@apple.com>

        Remove unused CFNetwork disk cache mmap optimization in WebKit2.
        <https://webkit.org/b/154727>

        Reviewed by Darin Adler.

        Nuke all the code related to the mmap optimization we had for CFNetwork's disk cache.
        This code has not been used since we moved to the WebKit2 network cache.

        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sendBufferMaybeAborting): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformLowMemoryHandler): Deleted.
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa): Deleted.
        * NetworkProcess/mac/NetworkDiskCacheMonitor.h: Removed.
        * NetworkProcess/mac/NetworkDiskCacheMonitor.mm: Removed.
        * NetworkProcess/mac/NetworkLoadMac.mm:
        (WebKit::NetworkLoad::willCacheResponseAsync): Deleted.
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-26  Commit Queue  <commit-queue@webkit.org>

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

        crashing on some devices (Requested by kling on #webkit).

        Reverted changeset:

        "[Darwin] Use vm_kernel_page_size for WTF::pageSize()."
        https://bugs.webkit.org/show_bug.cgi?id=154726
        http://trac.webkit.org/changeset/197168

2016-02-25  Sam Weinig  <sam@webkit.org>

        Allow WKUserScripts to be run in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=154701

        Reviewed by Anders Carlsson.

        Adds support for using isolated worlds, called _WKUserContentWorlds in the SPI,
        from the UIProcess.

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        * UIProcess/API/APIUserContentWorld.cpp: Added.
        (API::generateIdentifier):
        (API::UserContentWorld::worldWithName):
        (API::UserContentWorld::normalWorld):
        (API::UserContentWorld::UserContentWorld):
        (API::UserContentWorld::~UserContentWorld):
        * UIProcess/API/APIUserContentWorld.h: Added.
        Add new UserContentWorld type.

        * UIProcess/API/APIUserScript.h:
        Bind each user script to a particular _WKUserContentWorld.

        * UIProcess/API/C/WKUserScriptRef.cpp:
        (WKUserScriptCreateWithSource):
        (WKUserScriptCopySource):
        Existing APIs create user scripts for the normal world, preserving existing behavior.

        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript initWithSource:injectionTime:forMainFrameOnly:]):
        Existing APIs create user scripts for the normal world, preserving existing behavior.

        (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:userContentWorld:]):
        Add a new initializer which takes a world to bind to.  Also add support for the legacy whitelist/blacklist mechanism
        while we are here, as the expected client needs these as well.

        (-[WKUserScript _userContentWorld]):
        Add accessor for the bound world.

        * UIProcess/API/Cocoa/WKUserScriptInternal.h:
        * UIProcess/API/Cocoa/WKUserScriptPrivate.h: Added.
        Add new private header.

        * UIProcess/API/Cocoa/_WKUserContentWorld.h: Added.
        * UIProcess/API/Cocoa/_WKUserContentWorld.mm: Added.
        (+[_WKUserContentWorld worldWithName:]):
        (+[_WKUserContentWorld normalWorld]):
        (-[_WKUserContentWorld dealloc]):
        (-[_WKUserContentWorld name]):
        (-[_WKUserContentWorld _apiObject]):
        * UIProcess/API/Cocoa/_WKUserContentWorldInternal.h: Added.
        Add SPI wrapper.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addUserScript):
        (WebKit::WebUserContentControllerProxy::removeUserScript):
        (WebKit::WebUserContentControllerProxy::removeAllUserScripts):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        (WebKit::WebUserContentControllerProxy::userScripts):
        (WebKit::WebUserContentControllerProxy::userStyleSheets):
        Add support for registering the worlds with the associated WebContentProcesses and then using
        their identifiers to map user scripts to the correct world.
        
        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm:
        (-[WKWebProcessPlugInScriptWorld name]):
        Expose the name property.

        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        (WKBundleScriptWorldCopyName):
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h:
        Expose the name property.

        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::allWorlds):
        (WebKit::InjectedBundleScriptWorld::create):
        (WebKit::InjectedBundleScriptWorld::getOrCreate):
        (WebKit::InjectedBundleScriptWorld::normalWorld):
        (WebKit::InjectedBundleScriptWorld::InjectedBundleScriptWorld):
        (WebKit::InjectedBundleScriptWorld::~InjectedBundleScriptWorld):
        (WebKit::InjectedBundleScriptWorld::coreWorld):
        (WebKit::InjectedBundleScriptWorld::clearWrappers):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:
        (WebKit::InjectedBundleScriptWorld::name):
        Add the name property and do some drive-by RefPtr -> Ref conversions.

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::userContentControllers):
        (WebKit::worldMap):
        (WebKit::WebUserContentController::getOrCreate):
        (WebKit::WebUserContentController::~WebUserContentController):
        (WebKit::WebUserContentController::addUserContentWorlds):
        (WebKit::WebUserContentController::removeUserContentWorld):
        (WebKit::WebUserContentController::addUserScripts):
        (WebKit::WebUserContentController::removeUserScript):
        (WebKit::WebUserContentController::removeAllUserScripts):
        (WebKit::WebUserContentController::addUserStyleSheets):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:
        Track and use worlds passed from the UIProcess.

2016-02-26  Andreas Kling  <akling@apple.com>

        [Darwin] Use vm_kernel_page_size for WTF::pageSize().
        <https://webkit.org/b/154726>

        Reviewed by Antti Koivisto.

        Use WTF::pageSize() for the SharedMemory page size.

        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::systemPageSize):

2016-02-25  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Remove WebUIPopupMenuClient
        https://bugs.webkit.org/show_bug.cgi?id=154717

        Reviewed by Gyuyoung Kim.

        WebUIPopupMenuClient is only for EFL to expose WebPopupMenuProxy and WebPopupItem to WK C APIs.
        This patch removes it and related code.

        * PlatformEfl.cmake: Removed WKPopupItem related files from source list.
        * UIProcess/API/C/efl/WKAPICastEfl.h: Removed WKPopupMenu related code.
        * UIProcess/API/C/efl/WKPageEfl.cpp: Removed.
        * UIProcess/API/C/efl/WKPageEfl.h: Removed.
        * UIProcess/API/C/efl/WKPopupItem.cpp: Removed.
        * UIProcess/API/C/efl/WKPopupItem.h: Removed.
        * UIProcess/API/C/efl/WKPopupMenuListener.cpp: Removed.
        * UIProcess/API/C/efl/WKPopupMenuListener.h: Removed.
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::requestPopupMenu):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_popup_menu.cpp:
        (EwkPopupMenu::EwkPopupMenu):
        (EwkPopupMenu::close):
        (EwkPopupMenu::setSelectedIndex):
        * UIProcess/API/efl/ewk_popup_menu_item.cpp: Used WebPopupItem and others instead of WK C APIs.
        * UIProcess/API/efl/ewk_popup_menu_item_private.h: Ditto.
        * UIProcess/API/efl/ewk_popup_menu_private.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Removed unnecessary EFL guards.
        (WebKit::WebPageProxy::showPopupMenu): Ditto.
        (WebKit::WebPageProxy::hidePopupMenu): Ditto.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPopupMenuProxy.h:
        * UIProcess/efl/PageUIClientEfl.cpp: Removed WKPopupMenuListener related code.
        (WebKit::PageUIClientEfl::PageUIClientEfl): Deleted.
        (WebKit::PageUIClientEfl::showPopupMenu): Deleted.
        (WebKit::PageUIClientEfl::hidePopupMenu): Deleted.
        * UIProcess/efl/PageUIClientEfl.h:
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::initializeUIPopupMenuClient): Deleted.
        * UIProcess/efl/WebPopupMenuListenerEfl.cpp:
        (WebKit::WebPopupMenuListenerEfl::WebPopupMenuListenerEfl): Deleted.
        (WebKit::WebPopupMenuListenerEfl::valueChanged): Deleted.
        * UIProcess/efl/WebPopupMenuListenerEfl.h:
        (WebKit::WebPopupMenuListenerEfl::create): Deleted.
        * UIProcess/efl/WebPopupMenuProxyEfl.cpp: Used WebPopupItem and others instead of WK C APIs.
        * UIProcess/efl/WebPopupMenuProxyEfl.h: Ditto.
        (WebKit::WebPopupMenuProxyEfl::create):
        * UIProcess/efl/WebUIPopupMenuClient.cpp: Removed.
        * UIProcess/efl/WebUIPopupMenuClient.h: Removed.
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::createPopupMenuProxy): Used WebPopupItem and others instead of WK C APIs.

2016-02-25  Andreas Kling  <akling@apple.com>

        [iOS] Enable PageCache backing store clearing optimization for WebKit2.
        <https://webkit.org/b/154712>

        Reviewed by Anders Carlsson.

        We had an optimization for iOS where we'd tear down the compositing tree for
        pages in the page cache, to save memory, but we were only enabling it when
        instantiating a WebKit1 web view.

        This patch enables the optimization for WebKit2 as well.

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

2016-02-25  Ada Chan  <adachan@apple.com>

        Update the definition of ENABLE_VIDEO_PRESENTATION_MODE for Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=154702

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2016-02-25  Jiewen Tan  <jiewen_tan@apple.com>

        Restrict information passed with navigation action which is triggered by untrusted event
        https://bugs.webkit.org/show_bug.cgi?id=154571
        <rdar://problem/15967937>

        Reviewed by Andy Estes.

        When navigation action is triggered by an untrusted event, we should be more restricted of
        what information should be passed to the clients to lower the risk that clients could
        be fooled by the untrusted event.

        In this patch, we drop the modifiers for key state events and set the mouse button to NoButton
        for mouse events.

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::modifiersForNavigationAction):

2016-02-25  Ada Chan  <adachan@apple.com>

        Hook up fullscreenMayReturnToInline() in WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=154661

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:

2016-02-25  Gavin Barraclough  <barraclough@apple.com>

        Should template RefCounter instead of RefCounter::Token
        https://bugs.webkit.org/show_bug.cgi?id=154691

        Reviewed by Anders Carlsson.

        Mechanical update per RefCounter interface change.

        * UIProcess/Plugins/PluginProcessManager.h:
        (WebKit::PluginProcessManager::processSuppressionDisabledToken):
        (WebKit::PluginProcessManager::processSuppressionDisabled):
        * UIProcess/ProcessThrottler.h:
        (WebKit::ProcessThrottler::foregroundActivityToken):
        (WebKit::ProcessThrottler::backgroundActivityToken):
        * UIProcess/WebProcessPool.h:

2016-02-25  Brady Eidson  <beidson@apple.com>

        Remove LegacyIDB.
        https://bugs.webkit.org/show_bug.cgi?id=150854

        Reviewed by Alex Christensen.

        * CMakeLists.txt:
        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::getOrCreateLegacyUniqueIDBDatabase): Deleted.
        (WebKit::DatabaseProcess::removeLegacyUniqueIDBDatabase): Deleted.
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::didClose):
        (WebKit::DatabaseToWebProcessConnection::didReceiveMessage): Deleted.
        (WebKit::DatabaseToWebProcessConnection::didReceiveSyncMessage): Deleted.
        (WebKit::DatabaseToWebProcessConnection::establishIDBConnection): Deleted.
        (WebKit::DatabaseToWebProcessConnection::removeDatabaseProcessIDBConnection): Deleted.
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * DatabaseProcess/DatabaseToWebProcessConnection.messages.in:
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp: Removed.
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h: Removed.
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in: Removed.
        * DatabaseProcess/IndexedDB/IDBIdentifier.h: Removed.
        * DatabaseProcess/IndexedDB/IDBSerialization.cpp: Removed.
        * DatabaseProcess/IndexedDB/IDBSerialization.h: Removed.
        * DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp: Removed.
        * DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h: Removed.
        * DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabaseIdentifier.cpp: Removed.
        * DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabaseIdentifier.h: Removed.
        * DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h: Removed.
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp: Removed.
        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.h: Removed.
        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBTransaction.cpp: Removed.
        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBTransaction.h: Removed.
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp: Removed.
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h: Removed.
        * DerivedSources.make:
        * Shared/WebCrossThreadCopier.cpp:
        (WebCore::LegacyUniqueIDBDatabaseIdentifier>::copy): Deleted.
        (WebCore::IDBIdentifier>::copy): Deleted.
        * Shared/WebCrossThreadCopier.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp: Removed.
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h: Removed.
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp: Removed.
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h: Removed.
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in: Removed.
        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::createIDBFactoryBackend): Deleted.
        * WebProcess/Databases/WebDatabaseProvider.h:
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::didReceiveMessage): Deleted.
        (WebKit::WebToDatabaseProcessConnection::registerWebIDBServerConnection): Deleted.
        (WebKit::WebToDatabaseProcessConnection::removeWebIDBServerConnection): Deleted.
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:

2016-02-25  Brady Eidson  <beidson@apple.com>

        Modern IDB: WebKit 2 IPC layer.
        https://bugs.webkit.org/show_bug.cgi?id=153808

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad): This ASSERT fires on most WK2 tests. Alex said remove it.
        
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::putOrAdd): Properly encode the overwrite flag.
        
        * WebProcess/Databases/WebDatabaseProvider.h: Enable Modern IDB.

2016-02-25  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] MediaDeviceInfo deviceId and groupId must be unique to the page's origin
        https://bugs.webkit.org/show_bug.cgi?id=153163
        <rdar://problem/24334526>

        Reviewed by Tim Horton.

        * CMakeLists.txt: Add WKFrameHandleRef.cpp.

        * Shared/API/c/WKBase.h: Add WKFrameHandleRef.
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::decidePolicyForUserMediaPermissionRequest): Add parameter top level document
          security context.
        (API::UIClient::checkUserMediaPermissionForOrigin): Ditto.

        * UIProcess/API/C/WKAPICast.h: Add FrameHandle.

        * UIProcess/API/C/WKFrameHandleRef.cpp: Added.
        * UIProcess/API/C/WKFrameHandleRef.h: Added.

        * UIProcess/API/C/WKFrameInfoRef.cpp:
        (WKFrameInfoGetFrameHandleRef): Added.
        * UIProcess/API/C/WKFrameInfoRef.h:

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient): Add parameters to decidePolicyForUserMediaPermissionRequest and
          checkUserMediaPermissionForOrigin for top level document security context.

        * UIProcess/API/C/WKPageUIClient.h: Ditto.

        * UIProcess/API/C/WKUserMediaPermissionCheck.cpp:
        (WKUserMediaPermissionCheckSetUserMediaAccessInfo): Renamed from WKUserMediaPermissionCheckSetHasPersistentPermission,
          add parameter for top level document security context.
        (WKUserMediaPermissionCheckSetHasPersistentPermission): Deleted.
        * UIProcess/API/C/WKUserMediaPermissionCheck.h:

        * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp:
        (webkitUserMediaPermissionRequestCreate): Add top level document origin.

        * UIProcess/UserMediaPermissionCheckProxy.cpp:
        (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo): Renamed from setHasPersistentPermission.
        (WebKit::UserMediaPermissionCheckProxy::setHasPersistentPermission): Deleted.
        * UIProcess/UserMediaPermissionCheckProxy.h:

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::didCompleteUserMediaPermissionCheck): Add parameter
         for device id hash salt.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::requiresAudio): Deleted, unused.
        (WebKit::UserMediaPermissionRequestProxy::requiresVideo): Ditto.
        (WebKit::UserMediaPermissionRequestProxy::firstVideoDeviceUID): Ditto.
        (WebKit::UserMediaPermissionRequestProxy::firstAudioDeviceUID): Ditto.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): Pass through parameter for top
          level document security context.
        (WebKit::WebPageProxy::checkUserMediaPermissionForFrame): Ditto.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebKit2.xcodeproj/project.pbxproj: Add WKFrameHandleRef.cpp|.h.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startUserMediaRequest): Pass through parameter for top
          level document security context.
        (WebKit::UserMediaPermissionRequestManager::startUserMediaPermissionCheck): Ditto.
        (WebKit::UserMediaPermissionRequestManager::didCompleteUserMediaPermissionCheck): Pass through
          device id hash salt.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:

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

2016-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Tearing when entering AC mode
        https://bugs.webkit.org/show_bug.cgi?id=150955

        Reviewed by Michael Catanzaro.

        When entering accelerated compositing mode, we keep rendering the
        non accelerated contents until we have the first frame of
        accelerated compositing contents. When the view is created hidden,
        for example when the browser opens a link in a new tab, the view
        is not realized until it is mapped. The native surface handle for
        compositing, needed by the web process to render accelerated
        compositing contents, is not available until the view is realized,
        because it depends on the properties of the parent. When a web
        view is mapped for the first time, and then realized, we send the
        native surface handle for compositing to the web process, and keep
        rendering the non composited contents until we get the first
        frame, but in this case we never had non composited contents and
        we end up rendering an untinitalized surface. This sometimes just
        produces flickering and sometimes rendering artifacts.
        We can prevent this from happening by realizing the web view as
        soon as possible. A GtkWidget can't be realized until it has been
        added to a toplevel, so we can realize our view right after it is
        added to a toplevel window, and wait until the view is actually
        mapped to notify the web process that it has been added to a
        window. This way can we enter accelerated compositing mode before
        the web view is mapped, so that when mapped we don't try to paint
        the previous contents and don't need to wait for the first frame.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (toplevelWindowFocusInEvent): Handle the case of the window being
        hidden when receiving focus in. According to
        gtk_window_focus_in_event, this can happen.
        (webkitWebViewBaseSetToplevelOnScreenWindow): When the web view is
        removed from its toplevel parent, update the IsInWindow and
        WindowIsActive flags accordingly. When the view is added to a
        toplevel, realize it and don't update the window flags, they will be
        updated when the view is mapped the first time.
        (webkitWebViewBaseMap): Also update IsInWindow and WindowIsActive
        flags if needed. This way, if for example you open a youtube video
        in a new tab, the video won't start playing until you visit the
        tab, like we did when the view was realized on map.
        (webkitWebViewBaseHierarchyChanged): Use hierarchy-changed signal
        instead of parent-set to be notified when the view is added to or
        removed from a toplevel.
        (webkit_web_view_base_class_init): Implement hierarchy-changed
        instead of parent-set.
        (webkitWebViewBaseRealize): Do not call
        webkitWebViewBaseSetToplevelOnScreenWindow on realize, it's now
        webkitWebViewBaseSetToplevelOnScreenWindow the one realizing the view.
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createBackend): Do not realize the view
        here, it should be realized already at this point. If it's not
        realized at this point is because it hasn't been added to a
        toplevel and gtk_widget_realize will not work anyway.
        (WebKit::BackingStore::paint): This is changing the cairo source
        operator, so save/restore the cairo context to ensure it doesn't
        affect other drawing done after this.

2016-02-24  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        [web-animations] Add AnimationTimeline, DocumentTimeline and add extensions to Document interface
        https://bugs.webkit.org/show_bug.cgi?id=151688

        Reviewed by Dean Jackson.

        Enables the WEB_ANIMATIONS compiler switch.

        * Configurations/FeatureDefines.xcconfig:

2016-02-24  Gavin Barraclough  <barraclough@apple.com>

        Add WKPreference for HiddenPageDOMTimerThrottlingAutoIncreases
        https://bugs.webkit.org/show_bug.cgi?id=154655

        Reviewed by Geoff Garen.

        Just plumbing WebCore.settings.setHiddenPageDOMTimerThrottlingAutoIncreases through as
        WKPreferencesSetHiddenPageDOMTimerThrottlingAutoIncreases.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetHiddenPageDOMTimerThrottlingAutoIncreases):
        (WKPreferencesGetHiddenPageDOMTimerThrottlingAutoIncreases):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _hiddenPageDOMTimerThrottlingAutoIncreases]):
        (-[WKPreferences _setHiddenPageDOMTimerThrottlingAutoIncreases:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-02-24  Alex Christensen  <achristensen@webkit.org>

        Fix downloads when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154620

        Reviewed by Brady Eidson.

        This fixes all the _WKDownload API tests when using NetworkSession.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::willDecidePendingDownloadDestination):
        When we store the NetworkDataTask in m_downloadsWaitingForDestination, we want to remove its owner
        from m_pendingDownloads to prevent memory leaks.
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
        If a file exists and the UIProcess has told us to overwrite the file, delete the file
        before starting a new download in its place.  This used to be done by CFNetwork in
        NSURLDownload's setDestination:allowOverwrite:, but the NSURLSession equivalent (setting
        NSURLSessionDataTask's _pathToDownloadTaskFile attribute) does not overwrite the file for us.
        (WebKit::DownloadManager::cancelDownload):
        If a download is canceled while it is waiting for its destination from the UIProcess, the Download
        object does not exist yet.  Instead, we have a completion handler stored in m_downloadsWaitingForDestination.
        In this case, we want to send the UIProcess a DownloadProxy::DidCancel message, which I did through
        NetworkProcess::pendingDownloadCanceled because the DownloadManager is not a MessageSender, and then
        call the completion handler with PolicyIgnore to cancel the download.
        (WebKit::DownloadManager::downloadFinished):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::PendingDownload::didBecomeDownload):
        (WebKit::PendingDownload::didFailLoading):
        (WebKit::PendingDownload::messageSenderConnection):
        (WebKit::PendingDownload::didConvertToDownload): Deleted.
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::cancel):
        Send a didCancel message to the UIProcess when a download was cancelled.
        Use cancelByProducingResumeData so we can resume canceled downloads.
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        didConvertToDownload is needed when using NetworkSession to tell the NetworkResourceLoader
        not to call cancel on the NetworkLoad after converting it to a download.
        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::setPendingDownload):
        (WebKit::NetworkDataTask::pendingDownloadLocation):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::setPendingDownloadID):
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        Don't call findPendingDownloadLocation as a method on the NetworkDataTask to avoid memory leaks
        in DownloadManager.m_pendingDownloads.
        (WebKit::NetworkLoad::didBecomeDownload):
        Call m_client.didBecomeDownload which is being separated from didConvertToDownload.  The former is
        called after the NetworkDataTask becomes a Download, the latter is called as soon as 
        convertMainResourceLoadToDownload is called.
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::continueWillSendRequest):
        (WebKit::NetworkProcess::pendingDownloadCanceled):
        Send a DownloadProxy::DidCancel message when a pending download is canceled.
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        (WebKit::NetworkProcess::continueDecidePendingDownloadDestination):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didConvertToDownload):
        (WebKit::NetworkResourceLoader::didBecomeDownload):
        Separate setting m_didConvertToDownload, which needs to happen before the didReceiveResponse completion
        handler is called to tell the NetworkResourceLoader not to call cancel in NetworkResourceLoader::abort,
        from deleting the NetworkLoad, which can be done after the NSURLSessionDataTask has been converted to a
        NSURLSessionDownloadTask.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::failureTimerFired):
        (WebKit::NetworkDataTask::setPendingDownloadLocation):
        (WebKit::NetworkDataTask::transferSandboxExtensionToDownload):
        (WebKit::NetworkDataTask::suggestedFilename):
        (WebKit::NetworkDataTask::currentRequest):
        (WebKit::NetworkDataTask::findPendingDownloadLocation): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        Take the downloadID if it failed because we will report that download as failed and not use it again.
        (WebKit::NetworkSession::takeDownloadID):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync):
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):

2016-02-24  Anders Carlsson  <andersca@apple.com>

        Add more WebKitAdditions extension points
        https://bugs.webkit.org/show_bug.cgi?id=154648
        rdar://problem/24820040

        Reviewed by Beth Dakin.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-02-24  Ryosuke Niwa  <rniwa@webkit.org>

        Move FocusNavigationScope into FocusController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=154630

        Reviewed by Darin Adler.

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

2016-02-23  Brian Burg  <bburg@apple.com>

        Web Inspector: don't run the protocol generator once per output file
        https://bugs.webkit.org/show_bug.cgi?id=154635

        Reviewed by Myles C. Maxfield.

        * DerivedSources.make: Use $(firstword, ...) to take just one file as
        the target to be built so that the generator runs only once. Make isn't
        really designed to coalesce multiple file outputs to one production rule.

2016-02-23  Dan Bernstein  <mitz@apple.com>

        [Xcode] Linker errors display mangled names, but no longer should
        https://bugs.webkit.org/show_bug.cgi?id=154632

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Stop setting LINKER_DISPLAYS_MANGLED_NAMES to YES.

2016-02-23  Gavin Barraclough  <barraclough@apple.com>

        Remove HIDDEN_PAGE_DOM_TIMER_THROTTLING feature define
        https://bugs.webkit.org/show_bug.cgi?id=112323

        Reviewed by Chris Dumez.

        This feature is controlled by a runtime switch, and defaults off.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebView should implement NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=137160
        rdar://problem/17380562

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController initWithCoder:]):
        We need to call [self init] here, so that the wrapper will be initialized.

        * UIProcess/API/Cocoa/WKWebView.h:
        -initWithCoder: shouldn't be unavailable, it should be a designated initializer.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _initializeWithConfiguration:]):
        Move initialization out into a common method.

        (-[WKWebView initWithFrame:configuration:]):
        Call -initializeWithConfiguration: here.

        (-[WKWebView initWithCoder:]):
        Decode everything.

        (-[WKWebView encodeWithCoder:]):
        Encode everything.

2016-02-23  Anders Carlsson  <andersca@apple.com>

        Fix an API test.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultDataStore):
        Make sure to initialize WebKit2.

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebViewConfiguration should encode more of its properties
        https://bugs.webkit.org/show_bug.cgi?id=154611

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKUserContentController should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154609

        Reviewed by Sam Weinig.

        Since we just want to be able to encode WKUserContentController from WKWebViewConfiguration,
        we don't encode anything inside WKUserContentController.

        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController encodeWithCoder:]):
        (-[WKUserContentController initWithCoder:]):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKProcessPool should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154608

        Reviewed by Sam Weinig.

        Add +[WKProcessPool _sharedProcessPool] and encode/decode whether the process pool is shared.

        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool encodeWithCoder:]):
        (-[WKProcessPool initWithCoder:]):
        (+[WKProcessPool _sharedProcessPool]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154605

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore initWithCoder:]):
        (-[WKWebsiteDataStore encodeWithCoder:]):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration initWithCoder:]):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKWebViewConfiguration should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154602

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration encodeWithCoder:]):
        (-[WKWebViewConfiguration initWithCoder:]):

2016-02-23  Anders Carlsson  <andersca@apple.com>

        WKPreferences should conform to NSCoding
        https://bugs.webkit.org/show_bug.cgi?id=154597

        Reviewed by Sam Weinig.

        Add NSCoding implementation.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences encodeWithCoder:]):
        (-[WKPreferences initWithCoder:]):

2016-02-23  Alex Christensen  <achristensen@webkit.org>

        Implement downloads with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154473

        Reviewed by Brady Eidson.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::~Download):
        (WebKit::Download::didStart):
        (WebKit::Download::shouldDecodeSourceDataOfMIMEType):
        (WebKit::Download::decideDestinationWithSuggestedFilename):
        (WebKit::Download::didCreateDestination):
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::downloadID):
        (WebKit::Download::setSandboxExtension):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::dataTaskBecameDownloadTask):
        (WebKit::DownloadManager::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::DownloadManager::continueWillSendRequest):
        (WebKit::DownloadManager::willDecidePendingDownloadDestination):
        (WebKit::DownloadManager::continueDecidePendingDownloadDestination):
        (WebKit::DownloadManager::convertHandleToDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::clearClient):

        NetworkDataTasks can now outlive their client, so we need to make client a pointer
        with the ability to be nulled from the client's destructor.

        (WebKit::NetworkDataTask::pendingDownloadID):
        (WebKit::NetworkDataTask::pendingDownload):
        (WebKit::NetworkDataTask::setPendingDownload):
        (WebKit::NetworkDataTask::pendingDownloadLocation):
        (WebKit::NetworkDataTask::client): Deleted.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::setPendingDownloadID):
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):

        Don't call the didReceiveResponse completion handler immediately when we know we are
        going to turn the load into a download.  Instead, save the completion handler until
        after we have determined the download destination and set it in the NetworkDataTask.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::continueWillSendRequest):
        (WebKit::NetworkProcess::findPendingDownloadLocation):
        (WebKit::NetworkProcess::continueDecidePendingDownloadDestination):
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::~NetworkDataTask):
        (WebKit::NetworkDataTask::didSendData):
        (WebKit::NetworkDataTask::didReceiveChallenge):
        (WebKit::NetworkDataTask::didCompleteWithError):
        (WebKit::NetworkDataTask::didReceiveResponse):
        (WebKit::NetworkDataTask::didReceiveData):
        (WebKit::NetworkDataTask::didBecomeDownload):
        (WebKit::NetworkDataTask::willPerformHTTPRedirection):
        (WebKit::NetworkDataTask::scheduleFailure):
        (WebKit::NetworkDataTask::failureTimerFired):
        (WebKit::NetworkDataTask::findPendingDownloadLocation):
        (WebKit::NetworkDataTask::setPendingDownloadLocation):
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        (WebKit::NetworkDataTask::transferSandboxExtensionToDownload):
        (WebKit::NetworkDataTask::currentRequest):
        (WebKit::NetworkDataTask::cancel):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:]):
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        
        This delegate callback is used for downloads, too.

        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        
        Call didCreateDestination now, which is after the file has been opened on the disk.
        A DownloadProxy::DidStart message is now sent from NetworkProcess::findPendingDownloadLocation before
        we ask the UIProcess where the download should end up on disk.
        Null check the NetworkDataTask's client before using it because it is now a pointer that could be null. 
        
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::shouldDecodeSourceDataOfMIMEType):
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilenameAsync):
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadProxy::didCreateDestination):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:

2016-02-23  Brian Burg  <bburg@apple.com>

        Connect WebAutomationSession to its backend dispatcher as if it were an agent and add stub implementations
        https://bugs.webkit.org/show_bug.cgi?id=154518
        <rdar://problem/24761096>

        Reviewed by Timothy Hatcher.

        Add a domain dispatcher for the 'Automation' domain, and register the
        WebAutomationSession itself as the handler for Automation commands.
        Stub out these command implementations so the code will compile.

        * UIProcess/Automation/Automation.json:
        Fix the createWindow command's parameters and description.
        Add an ErrorMessage string enumeration and document how it can be used
        to signal well-known errors to the frontend.

        * UIProcess/Automation/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::WebAutomationSession):
        Add the domain backend dispatcher. It further parses commands that were deemed
        valid by the generic dispatcher and match the 'Automation' domain prefix.

        (WebKit::WebAutomationSession::getWindows):
        (WebKit::WebAutomationSession::openWindow):
        (WebKit::WebAutomationSession::closeWindow):
        Stub these out with our new ErrorMessage enumeration and a macro to
        make this code pattern more readable.

        * UIProcess/Automation/WebAutomationSession.h:
        Add new declarations and members.

2016-02-23  Antti Koivisto  <antti@apple.com>

        Remove tab suspension code
        https://bugs.webkit.org/show_bug.cgi?id=154585

        Reviewed by Andreas Kling.

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

2016-02-22  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Merge WebView and WebViewEfl
        https://bugs.webkit.org/show_bug.cgi?id=154445

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Removed WebViewEfl.cpp from source list.
        * UIProcess/API/C/efl/WKViewEfl.cpp: Removed type cast for WebViewEfl.
        * UIProcess/API/efl/EwkView.cpp: Ditto.
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/GestureRecognizer.cpp: Removed type cast for WebViewEfl.
        * UIProcess/API/efl/WebAccessibility.cpp: Removed unnecessary includes.
        * UIProcess/API/efl/ewk_view.cpp: Ditto.
        * UIProcess/efl/ViewClientEfl.cpp: Ditto.
        * UIProcess/efl/WebColorPickerClient.cpp: Ditto.
        * UIProcess/efl/WebColorPickerClient.h:
        * UIProcess/efl/WebColorPickerEfl.cpp:
        (WebKit::WebColorPickerEfl::WebColorPickerEfl):
        * UIProcess/efl/WebColorPickerEfl.h:
        (WebKit::WebColorPickerEfl::create):
        * UIProcess/efl/WebView.cpp:
        * UIProcess/efl/WebView.h:
        * UIProcess/efl/WebViewEfl.cpp: Removed.
        * UIProcess/efl/WebViewEfl.h: Ditto.

2016-02-22  Brian Burg  <bburg@apple.com>

        Web Inspector: add 'Automation' protocol domain and generate its backend classes separately in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=154509
        <rdar://problem/24759098>

        Reviewed by Timothy Hatcher.

        Add a new 'Automation' domain which presents an RPC interface
        for sending automation commands to an active WebAutomationSession
        in the UIProcess via RemoteInspector. This is similar to how the
        Inspector backend communicates bidirectionally with a remote
        Inspector frontend.

        Add build system logic to generate JSON-RPC protocol bindings
        for the 'Automation' domain using the inspector code generators.

        Move automation-related files that are not API or SPI into their
        own directory.

        * Configurations/BaseTarget.xcconfig: Tell where JavaScriptCore's
        private headers are, since that's where the code generators live.

        * CMakeLists.txt: Look in UIProcess/Automation directory.
        * PlatformMac.cmake:
        * DerivedSources.make: Generate protocol bindings for a single domain.
        The names of the generated files will be improved in a follow-up patch
        so that they do not clash with generated files in JavaScriptCore.

        * UIProcess/Automation/Automation.json: Added.
        * UIProcess/Automation/WebAutomationSession.cpp: Renamed from Source/WebKit2/UIProcess/WebAutomationSession.cpp.
        (WebKit::WebAutomationSession::WebAutomationSession):
        (WebKit::WebAutomationSession::~WebAutomationSession):
        Set up a backend dispatcher and frontend router. They will be used later.

        (WebKit::WebAutomationSession::dispatchMessageFromRemote):
        Forward messages from the remote to the backend dispatcher. When
        an agent / command handler is registered, it will receive the message.

        (WebKit::WebAutomationSession::connect):
        (WebKit::WebAutomationSession::disconnect):
        Connenct and disconnect the frontend router to the remote channel.

        * UIProcess/Automation/WebAutomationSession.h: Renamed from Source/WebKit2/UIProcess/WebAutomationSession.h.
        * WebKit2.xcodeproj/project.pbxproj: Add and move files.

2016-02-16  Ada Chan  <adachan@apple.com>

        Implement basic functionality in WebVideoFullscreenInterfaceMac.
        https://bugs.webkit.org/show_bug.cgi?id=153241

        Reviewed by Beth Dakin.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID):
        (WebKit::WebVideoFullscreenManagerProxy::exitFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::preparedToReturnToInline):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::rootViewToWindow):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::rootViewToWindow):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::supportsVideoFullscreen):
        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::supportsVideoFullscreen):

2016-02-22  Commit Queue  <commit-queue@webkit.org>

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

        This change causes timeouts and crashes in LayoutTests
        (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "Enable AVFoundationNSURLSessionEnabled by default"
        https://bugs.webkit.org/show_bug.cgi?id=154469
        http://trac.webkit.org/changeset/196935

2016-02-22  Anders Carlsson  <andersca@apple.com>

        Remove _mockCaptureDevicesEnabled getter and setter
        https://bugs.webkit.org/show_bug.cgi?id=154550

        Reviewed by Beth Dakin.

        The _mockCaptureDevicesEnabled property isn't declared anywhere, and this
        should be a WKWebViewConfiguration parameter if we ever want to expose it in the modern API.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _mockCaptureDevicesEnabled]): Deleted.
        (-[WKPreferences _setMockCaptureDevicesEnabled:]): Deleted.

2016-02-22  Konstantin Tokarev  <annulen@yandex.ru>

        [cmake] Moved library setup code to WEBKIT_FRAMEWORK macro.
        https://bugs.webkit.org/show_bug.cgi?id=154450

        Reviewed by Alex Christensen.

        * CMakeLists.txt: Used WebKit2_SOURCES variable instead of separate
        WebKit2_DERIVED_SOURCES for compatibility with WEBKIT_FRAMEWORK macro.
        There is no real need to separate derived sources from others.
        * PlatformGTK.cmake: Ditto.

2016-02-22  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake] Unreviewed build fix after r196942.

        * CMakeLists.txt: WKPluginSiteDataManager.cpp is gone.

2016-02-22  Keith Rollin  <krollin@apple.com>

        Add mechanism to disable memory pressure handling
        https://bugs.webkit.org/show_bug.cgi?id=154254
        <rdar://problem/24662616>

        Reviewed by Chris Dumez.

        Add a mechanism to disable WebKit's response to memory pressure
        triggers. This was asked for by another group for testing purposes.

        In order to disable WebKit's memory pressure handling, execute the
        following from the command line:

            defaults write com.apple.Safari WebKitSuppressMemoryPressureHandler -bool true

        To revert to standard behavior, delete the key or set it to False.

        This flag is used when a new sub-process is being spawned. The value
        is read and stored in an initialization parameter block, which is then
        sent to the new sub-process.

        In actuality, only the UI, WebContent, and Network processes heed the
        flag. The Plugin process isn't instrumented to heed this flag for
        three reasons. First, the Plugin process installs its memory pressure
        handler in initializeProcess, not initializePluginProcess. This is
        contrary to when the other processes install their handlers, which is
        in initialize<PluginType>Process, not initializeProcess. So in order
        to accomodate the Plugin process, we'd need to modify
        ChildProcessInitializationParameters. Doing this is awkward at best,
        but also seems to be opposed to what's supposed to be done in
        initializeProcess and conveyed in
        ChildProcessInitializationParameters. And even if we did add a boolean
        to this structure and added support for conveying it through the XPC
        port, it would end up being a Plugin process-only boolean in a general
        parameter block, which seems asymmetric with the other processes.
        Second, there's no convenient Cocoa function called in the flow that
        spawns the Plugin process, meaning that there's no convenient place to
        call NSUserDefaults to get the flag's value. And third, the Plugin
        process doesn't elegantly respond to the memory pressure trigger
        anyway. It might terminate itself, but that's it. As for the Database
        process, it doesn't seem to support responding to memory pressure at
        all, so we don't send it a flag telling it to ignore it.

        Internally, the memory pressure handler is suppressed by not calling
        MemoryPressureHandler::install() if the flag is set. In the case of
        the Network process, the flag is saved so that it can be checked later
        in other places that manually kick off the memory pressure handling
        procedure.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * NetworkProcess/NetworkProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2016-02-22  Anders Carlsson  <andersca@apple.com>

        Get rid of WKPluginSiteDataManager
        https://bugs.webkit.org/show_bug.cgi?id=154470

        Reviewed by Tim Horton.

        * Shared/API/c/WKBase.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetPluginSiteDataManager): Deleted.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKPluginSiteDataManager.cpp: Removed.
        (WKPluginSiteDataManagerGetTypeID): Deleted.
        (WKPluginSiteDataManagerGetSitesWithData): Deleted.
        (WKPluginSiteDataManagerClearSiteData): Deleted.
        (WKPluginSiteDataManagerClearAllSiteData): Deleted.
        * UIProcess/API/C/WKPluginSiteDataManager.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-21  Brent Fulgham  <bfulgham@apple.com>

        [WK2][Mac] Allow processes to set "fast-dev-casheable" bit
        https://bugs.webkit.org/show_bug.cgi?id=154503
        <rdar://problem/22920815>

        Reviewed by Alexey Proskuryakov.

        Update the various sandbox profiles with a declaration that using the
        system-fctl to touch the "hot file" flag (to support caching operations)
        is allowed.

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in: Add sandbox permission.
        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb: Ditto.
        * WebProcess/com.apple.WebProcess.sb.in: Ditto.

2016-02-22  Commit Queue  <commit-queue@webkit.org>

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

        it broke Production builds (Requested by brrian on #webkit).

        Reverted changeset:

        "Web Inspector: add 'Automation' protocol domain and generate
        its backend classes separately in WebKit2"
        https://bugs.webkit.org/show_bug.cgi?id=154509
        http://trac.webkit.org/changeset/196891

2016-02-22  Jer Noble  <jer.noble@apple.com>

        Enable AVFoundationNSURLSessionEnabled by default
        https://bugs.webkit.org/show_bug.cgi?id=154469

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesDefinitions.h:

2016-02-21  Brian Burg  <bburg@apple.com>

        Web Inspector: add 'Automation' protocol domain and generate its backend classes separately in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=154509
        <rdar://problem/24759098>

        Reviewed by Timothy Hatcher.

        Add a new 'Automation' domain which presents an RPC interface
        for sending automation commands to an active WebAutomationSession
        in the UIProcess via RemoteInspector. This is similar to how the
        Inspector backend communicates bidirectionally with a remote
        Inspector frontend.

        Add build system logic to generate JSON-RPC protocol bindings
        for the 'Automation' domain using the inspector code generators.

        Move automation-related files that are not API or SPI into their
        own directory.

        * Configurations/BaseTarget.xcconfig: Tell where JavaScriptCore's
        private headers are, since that's where the code generators live.

        * CMakeLists.txt: Look in UIProcess/Automation directory.
        * PlatformMac.cmake:
        * DerivedSources.make: Generate protocol bindings for a single domain.
        The names of the generated files will be improved in a follow-up patch
        so that they do not clash with generated files in JavaScriptCore.

        * UIProcess/Automation/Automation.json: Added.
        * UIProcess/Automation/WebAutomationSession.cpp: Renamed from Source/WebKit2/UIProcess/WebAutomationSession.cpp.
        (WebKit::WebAutomationSession::WebAutomationSession):
        (WebKit::WebAutomationSession::~WebAutomationSession):
        Set up a backend dispatcher and frontend router. They will be used later.

        (WebKit::WebAutomationSession::dispatchMessageFromRemote):
        Forward messages from the remote to the backend dispatcher. When
        an agent / command handler is registered, it will receive the message.

        (WebKit::WebAutomationSession::connect):
        (WebKit::WebAutomationSession::disconnect):
        Connenct and disconnect the frontend router to the remote channel.

        * UIProcess/Automation/WebAutomationSession.h: Renamed from Source/WebKit2/UIProcess/WebAutomationSession.h.
        * WebKit2.xcodeproj/project.pbxproj: Add and move files.

2016-02-20  Olivier Blin  <olivier.blin@softathome.com>

        [cmake] Use ICU include dirs in WebKit2 and WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=154479

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt:

2016-02-19  Brian Burg  <bburg@apple.com>

        WebAutomationSession should tell its delegate when its remote end disconnects
        https://bugs.webkit.org/show_bug.cgi?id=154426
        <rdar://problem/24732382>

        Reviewed by Timothy Hatcher.

        The client might want to free up resources or close spawned windows
        if the remote end has disconnected from the automation session.

        * UIProcess/API/APIAutomationSessionClient.h:
        (API::AutomationSessionClient::didDisconnectFromRemote): Added.
        (API::AutomationSessionClient::didRequestNewWindow):
        Remove WebProcessPool* argument as it is never used.

        * UIProcess/API/Cocoa/_WKAutomationSession.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.mm:
        (-[_WKAutomationSession isPaired]):
        Expose whether the session is paired with a remote end.

        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h: Add method.
        * UIProcess/Cocoa/AutomationSessionClient.h: Add method.
        Remove WebProcessPool* argument as it is never used.

        * UIProcess/Cocoa/AutomationSessionClient.mm:
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::AutomationSessionClient::didRequestNewWindow):
        (WebKit::AutomationSessionClient::didDisconnectFromRemote):
        Add necessary forwarding boilerplate.

        * UIProcess/WebAutomationSession.cpp:
        (WebKit::WebAutomationSession::disconnect): Inform the client.

2016-02-19  Beth Dakin  <bdakin@apple.com>

        Enhance EditorState to include TypingAttributes, alignment, and color
        https://bugs.webkit.org/show_bug.cgi?id=154424

        Reviewed by Dean Jackson and Sam Weinig.

        TypingAttributes is already available for iOS and GTK. This patch hooks 
        that up on Mac as well, and it moves the calculation of that to the shared 
        file since there is no reason for this to be written in an iOS-only way. This 
        patch also adds textColor and textAlignment to EditorState, and since those 
        are not technically platform-specific either, they are also calculated in the 
        shared editorState() function.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState):

2016-02-19  Anders Carlsson  <andersca@apple.com>

        Purge as much as we can from WKDeprecatedFunctions.cpp
        https://bugs.webkit.org/show_bug.cgi?id=154459

        Reviewed by Sam Weinig.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKArrayIsMutable): Deleted.
        (WKPageSetVisibilityState): Deleted.
        (WKDictionaryIsMutable): Deleted.
        (WKDictionaryAddItem): Deleted.
        (WKDictionaryRemoveItem): Deleted.
        (WKPreferencesSetRegionBasedColumnsEnabled): Deleted.
        (WKPreferencesGetRegionBasedColumnsEnabled): Deleted.
        (WKPreferencesSetMultithreadedWebGLEnabled): Deleted.
        (WKPreferencesGetMultithreadedWebGLEnabled): Deleted.
        (WKPreferencesSetScreenFontSubstitutionEnabled): Deleted.
        (WKPreferencesGetScreenFontSubstitutionEnabled): Deleted.
        (WKInspectorIsDebuggingJavaScript): Deleted.
        (WKInspectorToggleJavaScriptDebugging): Deleted.
        (WKInspectorIsProfilingJavaScript): Deleted.
        (WKInspectorToggleJavaScriptProfiling): Deleted.
        (WKContextGetProcessModel): Deleted.
        (WKGraphicsContextGetCGContext): Deleted.
        (WKContextGetProcessSuppressionEnabled): Deleted.
        (WKContextSetProcessSuppressionEnabled): Deleted.

2016-02-19  Brady Eidson  <beidson@apple.com>

        Add "databaseProcessDidCrash" to the WKContextClient; Adopt it in WKTR.
        https://bugs.webkit.org/show_bug.cgi?id=154428

        Reviewed by Jer Noble.

        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextGetDatabaseProcessIdentifier):

        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::databaseProcessDidCrash):
        * UIProcess/WebContextClient.h:

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::databaseProcessCrashed):
        (WebKit::WebProcessPool::databaseProcessIdentifier):
        * UIProcess/WebProcessPool.h:

2016-02-18  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Limit the number of tiles according to the visible area
        https://bugs.webkit.org/show_bug.cgi?id=126122

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize): Because we creates
        nonCompositingLayer with a size of current view, we should not apply
        the currently visible rect when creating / deleting tiles.
        (WebKit::LayerTreeHostGtk::flushPendingLayerChanges): Passes the current
        visible rect to the GraphicsLayers.

2016-02-18  Brady Eidson  <beidson@apple.com>

        Modern IDB: Fix IDBGetResult encoder/decoder.
        https://bugs.webkit.org/show_bug.cgi?id=154421

        Reviewed by Alex Christensen.

        No new tests, as Modern IDB is still disabled for WK2.
        
        But if you manually enable it, "Basic IndexedDB Seems To Work"

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

2016-02-18  Brady Eidson  <beidson@apple.com>

        Modern IDB: Implement server->client operations in WK2.
        https://bugs.webkit.org/show_bug.cgi?id=154411

        Reviewed by Alex Christensen.

        No change in behavior yet; Just laying the groundwork.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::~WebIDBConnectionToClient):

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::didDeleteDatabase):
        (WebKit::WebIDBConnectionToServer::didOpenDatabase):
        (WebKit::WebIDBConnectionToServer::didAbortTransaction):
        (WebKit::WebIDBConnectionToServer::didCommitTransaction):
        (WebKit::WebIDBConnectionToServer::didCreateObjectStore):
        (WebKit::WebIDBConnectionToServer::didDeleteObjectStore):
        (WebKit::WebIDBConnectionToServer::didClearObjectStore):
        (WebKit::WebIDBConnectionToServer::didCreateIndex):
        (WebKit::WebIDBConnectionToServer::didDeleteIndex):
        (WebKit::WebIDBConnectionToServer::didPutOrAdd):
        (WebKit::WebIDBConnectionToServer::didGetRecord):
        (WebKit::WebIDBConnectionToServer::didGetCount):
        (WebKit::WebIDBConnectionToServer::didDeleteRecord):
        (WebKit::WebIDBConnectionToServer::didOpenCursor):
        (WebKit::WebIDBConnectionToServer::didIterateCursor):
        (WebKit::WebIDBConnectionToServer::fireVersionChangeEvent):
        (WebKit::WebIDBConnectionToServer::didStartTransaction):
        (WebKit::WebIDBConnectionToServer::notifyOpenDBRequestBlocked):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::didReceiveMessage):

2016-02-18  Brian Burg  <bburg@apple.com>

        RemoteInspector deadlocks if _WKAutomationDelegate creates/registers a target synchronously
        https://bugs.webkit.org/show_bug.cgi?id=154359
        <rdar://problem/24708897>

        Reviewed by Joseph Pecoraro.

        * UIProcess/Cocoa/AutomationClient.mm:
        (WebKit::AutomationClient::requestAutomationSession):
        Make an NSString out of the String reference so it gets captured correctly.

2016-02-18  Brady Eidson  <beidson@apple.com>

        Modern IDB: Implement client->server operations in WK2.
        https://bugs.webkit.org/show_bug.cgi?id=154400

        Reviewed by Alex Christensen.

        No change in behavior yet; Just laying the groundwork.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::idbServer):
        * DatabaseProcess/DatabaseProcess.h:

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::didReceiveMessage):
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::deleteDatabase):
        (WebKit::WebIDBConnectionToClient::openDatabase):
        (WebKit::WebIDBConnectionToClient::abortTransaction):
        (WebKit::WebIDBConnectionToClient::commitTransaction):
        (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToClient::createObjectStore):
        (WebKit::WebIDBConnectionToClient::deleteObjectStore):
        (WebKit::WebIDBConnectionToClient::clearObjectStore):
        (WebKit::WebIDBConnectionToClient::createIndex):
        (WebKit::WebIDBConnectionToClient::deleteIndex):
        (WebKit::WebIDBConnectionToClient::putOrAdd):
        (WebKit::WebIDBConnectionToClient::getRecord):
        (WebKit::WebIDBConnectionToClient::getCount):
        (WebKit::WebIDBConnectionToClient::deleteRecord):
        (WebKit::WebIDBConnectionToClient::openCursor):
        (WebKit::WebIDBConnectionToClient::iterateCursor):
        (WebKit::WebIDBConnectionToClient::establishTransaction):
        (WebKit::WebIDBConnectionToClient::databaseConnectionClosed):
        (WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

2016-02-18  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][Threaded Compositor] The web inspector doesn't work when using the threaded compositor
        https://bugs.webkit.org/show_bug.cgi?id=154067

        Reviewed by Carlos Garcia Campos.

        The forceCompositingMode should be true for threaded compositor. We set it true for a normal webView
        in _WebKitSettingsPrivate() but we do not for inspector anywhere. So DrawingArea is not
        properly created for the inspector. Let's move the setting to WebPreferences::platformInitializeStore
        which is a common place for the webView and the inspector.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate::_WebKitSettingsPrivate): Deleted.
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):

2016-02-18  Commit Queue  <commit-queue@webkit.org>

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

        Broke Safari (Requested by andersca on #webkit).

        Reverted changeset:

        "Remove two unused functions"
        https://bugs.webkit.org/show_bug.cgi?id=154397
        http://trac.webkit.org/changeset/196765

2016-02-18  Anders Carlsson  <andersca@apple.com>

        Remove two unused functions
        https://bugs.webkit.org/show_bug.cgi?id=154397

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetPluginSiteDataManager): Deleted.
        (WKContextGetResourceCacheManager): Deleted.
        * UIProcess/API/C/WKContext.h:

2016-02-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use G_TYPE_ERROR instead of G_TYPE_POINTER for GError parameters of signals
        https://bugs.webkit.org/show_bug.cgi?id=153786

        Reviewed by Michael Catanzaro.

        It's binary compatible and it's needed by binding generator to
        properly identify those parameters as GError.

        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkit_download_class_init):
        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        (webkit_print_operation_class_init):
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkit_web_resource_class_init):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        * UIProcess/API/gtk/webkit2marshal.list:

2016-02-18  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Move WebView from CoordinatedGraphics to efl
        https://bugs.webkit.org/show_bug.cgi?id=154332

        Reviewed by Csaba Osztrogonác.

        * PlatformEfl.cmake:
        * UIProcess/efl/WebView.cpp: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp.
        * UIProcess/efl/WebView.h: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h.
        * UIProcess/efl/WebViewClient.cpp: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/WebViewClient.cpp.
        * UIProcess/efl/WebViewClient.h: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/WebViewClient.h.

2016-02-17  Brady Eidson  <beidson@apple.com>

        Modern IDB: Rename some "UniqueIDBDatabase" classes that conflict with new classes in WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=154363.

        Reviewed by Alex Christensen.

        Adding "Legacy" to the front of the name fixes problems for now.
        
        And all of this gunk will go away after Modern IDB is done, anyways.
        
        * CMakeLists.txt:
        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::getOrCreateLegacyUniqueIDBDatabase):
        (WebKit::DatabaseProcess::removeLegacyUniqueIDBDatabase):
        (WebKit::DatabaseProcess::getOrCreateUniqueIDBDatabase): Deleted.
        (WebKit::DatabaseProcess::removeUniqueIDBDatabase): Deleted.
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp:
        (WebKit::DatabaseProcessIDBConnection::establishConnection):
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:
        * DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.cpp: Renamed from Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp.
        (WebKit::LegacyUniqueIDBDatabase::calculateAbsoluteDatabaseFilename):
        (WebKit::LegacyUniqueIDBDatabase::LegacyUniqueIDBDatabase):
        (WebKit::LegacyUniqueIDBDatabase::~LegacyUniqueIDBDatabase):
        (WebKit::LegacyUniqueIDBDatabase::filenameForDatabaseName):
        (WebKit::LegacyUniqueIDBDatabase::databaseFilenameIdentifier):
        (WebKit::LegacyUniqueIDBDatabase::canShareDatabases):
        (WebKit::LegacyUniqueIDBDatabase::registerConnection):
        (WebKit::LegacyUniqueIDBDatabase::unregisterConnection):
        (WebKit::LegacyUniqueIDBDatabase::shutdown):
        (WebKit::LegacyUniqueIDBDatabase::shutdownBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::didShutdownBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::deleteDatabase):
        (WebKit::LegacyUniqueIDBDatabase::getOrEstablishIDBDatabaseMetadata):
        (WebKit::LegacyUniqueIDBDatabase::openBackingStoreAndReadMetadata):
        (WebKit::LegacyUniqueIDBDatabase::didOpenBackingStoreAndReadMetadata):
        (WebKit::LegacyUniqueIDBDatabase::openTransaction):
        (WebKit::LegacyUniqueIDBDatabase::beginTransaction):
        (WebKit::LegacyUniqueIDBDatabase::commitTransaction):
        (WebKit::LegacyUniqueIDBDatabase::resetTransaction):
        (WebKit::LegacyUniqueIDBDatabase::rollbackTransaction):
        (WebKit::LegacyUniqueIDBDatabase::postTransactionOperation):
        (WebKit::LegacyUniqueIDBDatabase::didCompleteTransactionOperation):
        (WebKit::LegacyUniqueIDBDatabase::changeDatabaseVersion):
        (WebKit::LegacyUniqueIDBDatabase::didChangeDatabaseVersion):
        (WebKit::LegacyUniqueIDBDatabase::didCreateObjectStore):
        (WebKit::LegacyUniqueIDBDatabase::didDeleteObjectStore):
        (WebKit::LegacyUniqueIDBDatabase::didClearObjectStore):
        (WebKit::LegacyUniqueIDBDatabase::didCreateIndex):
        (WebKit::LegacyUniqueIDBDatabase::didDeleteIndex):
        (WebKit::LegacyUniqueIDBDatabase::didCompleteBoolRequest):
        (WebKit::LegacyUniqueIDBDatabase::createObjectStore):
        (WebKit::LegacyUniqueIDBDatabase::deleteObjectStore):
        (WebKit::LegacyUniqueIDBDatabase::clearObjectStore):
        (WebKit::LegacyUniqueIDBDatabase::createIndex):
        (WebKit::LegacyUniqueIDBDatabase::deleteIndex):
        (WebKit::LegacyUniqueIDBDatabase::putRecord):
        (WebKit::LegacyUniqueIDBDatabase::getRecord):
        (WebKit::LegacyUniqueIDBDatabase::openCursor):
        (WebKit::LegacyUniqueIDBDatabase::cursorAdvance):
        (WebKit::LegacyUniqueIDBDatabase::cursorIterate):
        (WebKit::LegacyUniqueIDBDatabase::count):
        (WebKit::LegacyUniqueIDBDatabase::deleteRange):
        (WebKit::LegacyUniqueIDBDatabase::openBackingStoreTransaction):
        (WebKit::LegacyUniqueIDBDatabase::beginBackingStoreTransaction):
        (WebKit::LegacyUniqueIDBDatabase::commitBackingStoreTransaction):
        (WebKit::LegacyUniqueIDBDatabase::resetBackingStoreTransaction):
        (WebKit::LegacyUniqueIDBDatabase::rollbackBackingStoreTransaction):
        (WebKit::LegacyUniqueIDBDatabase::changeDatabaseVersionInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::createObjectStoreInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::deleteObjectStoreInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::clearObjectStoreInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::createIndexInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::deleteIndexInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::putRecordInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::didPutRecordInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::getRecordFromBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::didGetRecordFromBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::openCursorInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::didOpenCursorInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::advanceCursorInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::didAdvanceCursorInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::iterateCursorInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::didIterateCursorInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::countInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::didCountInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::deleteRangeInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::didDeleteRangeInBackingStore):
        (WebKit::LegacyUniqueIDBDatabase::didEstablishTransaction):
        (WebKit::LegacyUniqueIDBDatabase::didResetTransaction):
        (WebKit::LegacyUniqueIDBDatabase::resetAllTransactions):
        (WebKit::LegacyUniqueIDBDatabase::finalizeRollback):
        (WebKit::LegacyUniqueIDBDatabase::absoluteDatabaseDirectory):
        (WebKit::LegacyUniqueIDBDatabase::postMainThreadTask):
        (WebKit::LegacyUniqueIDBDatabase::performNextMainThreadTask):
        (WebKit::LegacyUniqueIDBDatabase::postDatabaseTask):
        (WebKit::LegacyUniqueIDBDatabase::performNextDatabaseTask):
        * DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabase.h: Renamed from Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h.
        (WebKit::LegacyUniqueIDBDatabase::create):
        (WebKit::LegacyUniqueIDBDatabase::identifier):
        * DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabaseIdentifier.cpp: Renamed from Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.cpp.
        (WebKit::LegacyUniqueIDBDatabaseIdentifier::LegacyUniqueIDBDatabaseIdentifier):
        (WebKit::LegacyUniqueIDBDatabaseIdentifier::isHashTableDeletedValue):
        (WebKit::LegacyUniqueIDBDatabaseIdentifier::hash):
        (WebKit::LegacyUniqueIDBDatabaseIdentifier::isNull):
        (WebKit::LegacyUniqueIDBDatabaseIdentifier::isolatedCopy):
        (WebKit::operator==):
        * DatabaseProcess/IndexedDB/LegacyUniqueIDBDatabaseIdentifier.h: Renamed from Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.h.
        (WebKit::LegacyUniqueIDBDatabaseIdentifier::databaseName):
        (WebKit::LegacyUniqueIDBDatabaseIdentifier::openingOrigin):
        (WebKit::LegacyUniqueIDBDatabaseIdentifier::mainFrameOrigin):
        (WebKit::LegacyUniqueIDBDatabaseIdentifierHash::hash):
        (WebKit::LegacyUniqueIDBDatabaseIdentifierHash::equal):
        (WebKit::LegacyUniqueIDBDatabaseIdentifierHashTraits::isEmptyValue):
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::UniqueIDBDatabaseBackingStoreSQLite):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::getOrEstablishMetadata):
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h:
        * Shared/WebCrossThreadCopier.cpp:
        (WebCore::LegacyUniqueIDBDatabaseIdentifier>::copy):
        (WebCore::UniqueIDBDatabaseIdentifier>::copy): Deleted.
        * Shared/WebCrossThreadCopier.h:
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-17  Anders Carlsson  <andersca@apple.com>

        Remove WebContextSupplement::shouldTerminate, it's no longer used
        https://bugs.webkit.org/show_bug.cgi?id=154367

        Reviewed by Sam Weinig.

        * UIProcess/WebContextSupplement.h:
        (WebKit::WebContextSupplement::shouldTerminate): Deleted.
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::shouldTerminate): Deleted.
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::shouldTerminate): Deleted.

2016-02-17  Brian Burg  <bburg@apple.com>

        RemoteInspector deadlocks if _WKAutomationDelegate creates/registers a target synchronously
        https://bugs.webkit.org/show_bug.cgi?id=154359
        <rdar://problem/24708897>

        Reviewed by Joseph Pecoraro.

        RemoteInspector always grabs a lock whenever receiving or sending XPC messages. If it
        forwards a new session request via _WKAutomationDelegate, and the client synchronously
        creates and registers a session, then RemoteInspector will try to grab the lock again
        while adding the session to its registry, causing a deadlock.

        * UIProcess/Cocoa/AutomationClient.mm:
        (WebKit::AutomationClient::requestAutomationSession): Add a dispatch_async() to
        protect clients from accidentally deadlocking. They shouldn't have to care about
        RemoteInspector's locking mechanisms.

2016-02-17  Anders Carlsson  <andersca@apple.com>

        Remove an unused function
        https://bugs.webkit.org/show_bug.cgi?id=154358

        Reviewed by Sam Weinig.

        * Platform/cg/CGUtilities.cpp:
        (WebKit::paintBitmapContext): Deleted.
        * Platform/cg/CGUtilities.h:

2016-02-17  Brady Eidson  <beidson@apple.com>

        Modern IDB: More Encoder/Decoder/Messaging scaffolding for WK2 IPC.
        https://bugs.webkit.org/show_bug.cgi?id=154356

        Reviewed by Alex Christensen.

        No change in behavior yet; Just laying the groundwork.

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::didDeleteDatabase):
        (WebKit::WebIDBConnectionToClient::didOpenDatabase):
        (WebKit::WebIDBConnectionToClient::didAbortTransaction):
        (WebKit::WebIDBConnectionToClient::didCommitTransaction):
        (WebKit::WebIDBConnectionToClient::didCreateObjectStore):
        (WebKit::WebIDBConnectionToClient::didDeleteObjectStore):
        (WebKit::WebIDBConnectionToClient::didClearObjectStore):
        (WebKit::WebIDBConnectionToClient::didCreateIndex):
        (WebKit::WebIDBConnectionToClient::didDeleteIndex):
        (WebKit::WebIDBConnectionToClient::didPutOrAdd):
        (WebKit::WebIDBConnectionToClient::didGetRecord):
        (WebKit::WebIDBConnectionToClient::didGetCount):
        (WebKit::WebIDBConnectionToClient::didDeleteRecord):
        (WebKit::WebIDBConnectionToClient::didOpenCursor):
        (WebKit::WebIDBConnectionToClient::didIterateCursor):
        (WebKit::WebIDBConnectionToClient::fireVersionChangeEvent):
        (WebKit::WebIDBConnectionToClient::didStartTransaction):
        (WebKit::WebIDBConnectionToClient::notifyOpenDBRequestBlocked):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in:

2016-02-17  Alex Christensen  <achristensen@webkit.org>

        Fix GTK build after r196720.

        * UIProcess/API/gtk/WebKitUIClient.cpp:

2016-02-17  Anders Carlsson  <andersca@apple.com>

        Need listener-based version of runBeforeUnloadConfirmPanel
        https://bugs.webkit.org/show_bug.cgi?id=154354
        rdar://problem/23736691

        Reviewed by Sam Weinig.

        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::runBeforeUnloadConfirmPanel):
        * UIProcess/API/C/WKPage.cpp:
        (fixUpBotchedPageUIClient):
        (WebKit::RunBeforeUnloadConfirmPanelResultListener::create):
        (WebKit::RunBeforeUnloadConfirmPanelResultListener::~RunBeforeUnloadConfirmPanelResultListener):
        (WebKit::RunBeforeUnloadConfirmPanelResultListener::call):
        (WKPageRunBeforeUnloadConfirmPanelResultListenerGetTypeID):
        (WKPageRunBeforeUnloadConfirmPanelResultListenerCall):
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

2016-02-17  Simon Fraser  <simon.fraser@apple.com>

        PDFPlugin's scrollableArea container is not properly unregistered when page is going into the PageCache
        https://bugs.webkit.org/show_bug.cgi?id=148182

        Reviewed by Brent Fulgham.
        
        When handling Command-arrow key while showing a scrollable PDF, the timing of PDFPlugin
        teardown and navigation could result in PDFPlugin::destroy() getting the wrong FrameView,
        so the old FrameView was left with a stale pointer in its scrollableAreaSet.

        Fix this by adding an explicit willDetatchRenderer() which is called on the plugin
        before the Frame gets a new FrameView.

        Also narrow the scope of the RefPtr<Widget> in HTMLPlugInElement::defaultEventHandler()
        so that the Widget is not kept alive over a possible navigation.

        I was unable to make an automated test, because reproducing the bug requires handling
        a Command-arrow key event in a way that the last ref to a Widget is held over the event
        handling, and this wasn't possible in an iframe.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::willDetatchRenderer):
        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::willDetatchRenderer):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::willDetatchRenderer):
        * WebProcess/Plugins/PluginView.h:

2016-02-17  Brady Eidson  <beidson@apple.com>

        Modern IDB: Encoder/Decoder/Messaging scaffolding for WK2 IPC.
        https://bugs.webkit.org/show_bug.cgi?id=154351

        Reviewed by Alex Christensen.

        No change in behavior yet; Just laying the groundwork.

        Implement in all of the client->server message sends, requiring many Encoder/Decoders for
        IDB objects to also be implemented:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::deleteDatabase):
        (WebKit::WebIDBConnectionToServer::openDatabase):
        (WebKit::WebIDBConnectionToServer::abortTransaction):
        (WebKit::WebIDBConnectionToServer::commitTransaction):
        (WebKit::WebIDBConnectionToServer::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToServer::createObjectStore):
        (WebKit::WebIDBConnectionToServer::deleteObjectStore):
        (WebKit::WebIDBConnectionToServer::clearObjectStore):
        (WebKit::WebIDBConnectionToServer::createIndex):
        (WebKit::WebIDBConnectionToServer::deleteIndex):
        (WebKit::WebIDBConnectionToServer::putOrAdd):
        (WebKit::WebIDBConnectionToServer::getRecord):
        (WebKit::WebIDBConnectionToServer::getCount):
        (WebKit::WebIDBConnectionToServer::deleteRecord):
        (WebKit::WebIDBConnectionToServer::openCursor):
        (WebKit::WebIDBConnectionToServer::iterateCursor):
        (WebKit::WebIDBConnectionToServer::establishTransaction):
        (WebKit::WebIDBConnectionToServer::databaseConnectionClosed):
        (WebKit::WebIDBConnectionToServer::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBConnectionToServer::didFireVersionChangeEvent):

2016-02-17  Alex Christensen  <achristensen@webkit.org>

        Copy http body when being redirected with 308 with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154348

        Reviewed by Brady Eidson.
        
        This fixes http/tests/security/cors-post-redirect-308.html
        which used to assert in ResourceRequest::doUpdateResourceHTTPBody

        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::willPerformHTTPRedirection):

2016-02-17  Brady Eidson  <beidson@apple.com>

        Modern IDB: More WK2 IPC Scaffolding.
        https://bugs.webkit.org/show_bug.cgi?id=154317

        Reviewed by Alex Christensen.

        No change in behavior yet; Just laying the groundwork.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebKit2.xcodeproj/project.pbxproj:

        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
        (WebKit::WebIDBConnectionToClient::deleteDatabase):
        (WebKit::WebIDBConnectionToClient::openDatabase):
        (WebKit::WebIDBConnectionToClient::abortTransaction):
        (WebKit::WebIDBConnectionToClient::commitTransaction):
        (WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToClient::createObjectStore):
        (WebKit::WebIDBConnectionToClient::deleteObjectStore):
        (WebKit::WebIDBConnectionToClient::clearObjectStore):
        (WebKit::WebIDBConnectionToClient::createIndex):
        (WebKit::WebIDBConnectionToClient::deleteIndex):
        (WebKit::WebIDBConnectionToClient::putOrAdd):
        (WebKit::WebIDBConnectionToClient::getRecord):
        (WebKit::WebIDBConnectionToClient::getCount):
        (WebKit::WebIDBConnectionToClient::deleteRecord):
        (WebKit::WebIDBConnectionToClient::openCursor):
        (WebKit::WebIDBConnectionToClient::iterateCursor):
        (WebKit::WebIDBConnectionToClient::establishTransaction):
        (WebKit::WebIDBConnectionToClient::databaseConnectionClosed):
        (WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in: Added.

        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
        (WebKit::WebIDBConnectionToServer::didDeleteDatabase):
        (WebKit::WebIDBConnectionToServer::didOpenDatabase):
        (WebKit::WebIDBConnectionToServer::didAbortTransaction):
        (WebKit::WebIDBConnectionToServer::didCommitTransaction):
        (WebKit::WebIDBConnectionToServer::didCreateObjectStore):
        (WebKit::WebIDBConnectionToServer::didDeleteObjectStore):
        (WebKit::WebIDBConnectionToServer::didClearObjectStore):
        (WebKit::WebIDBConnectionToServer::didCreateIndex):
        (WebKit::WebIDBConnectionToServer::didDeleteIndex):
        (WebKit::WebIDBConnectionToServer::didPutOrAdd):
        (WebKit::WebIDBConnectionToServer::didGetRecord):
        (WebKit::WebIDBConnectionToServer::didGetCount):
        (WebKit::WebIDBConnectionToServer::didDeleteRecord):
        (WebKit::WebIDBConnectionToServer::didOpenCursor):
        (WebKit::WebIDBConnectionToServer::didIterateCursor):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in: Added.

2016-02-17  Alex Christensen  <achristensen@webkit.org>

        CMake build fix after r196698.

        * PlatformMac.cmake:

2016-02-17  Alex Christensen  <achristensen@webkit.org>

        CMake build fix after r196698.

        * CMakeLists.txt:

2016-02-17  Anders Carlsson  <andersca@apple.com>

        Remove unused media cache manager code
        https://bugs.webkit.org/show_bug.cgi?id=154339

        Reviewed by Tim Horton.

        * DerivedSources.make:
        * Shared/API/c/WKBase.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetMediaCacheManager): Deleted.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKMediaCacheManager.cpp: Removed.
        (WKMediaCacheManagerGetTypeID): Deleted.
        (WKMediaCacheManagerGetHostnamesWithMediaCache): Deleted.
        (WKMediaCacheManagerClearCacheForHostname): Deleted.
        (WKMediaCacheManagerClearCacheForAllHostnames): Deleted.
        * UIProcess/API/C/WKMediaCacheManager.h: Removed.
        * UIProcess/WebMediaCacheManagerProxy.cpp: Removed.
        (WebKit::WebMediaCacheManagerProxy::supplementName): Deleted.
        (WebKit::WebMediaCacheManagerProxy::create): Deleted.
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy): Deleted.
        (WebKit::WebMediaCacheManagerProxy::~WebMediaCacheManagerProxy): Deleted.
        (WebKit::WebMediaCacheManagerProxy::processPoolDestroyed): Deleted.
        (WebKit::WebMediaCacheManagerProxy::processDidClose): Deleted.
        (WebKit::WebMediaCacheManagerProxy::shouldTerminate): Deleted.
        (WebKit::WebMediaCacheManagerProxy::refWebContextSupplement): Deleted.
        (WebKit::WebMediaCacheManagerProxy::derefWebContextSupplement): Deleted.
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache): Deleted.
        (WebKit::WebMediaCacheManagerProxy::didGetHostnamesWithMediaCache): Deleted.
        (WebKit::WebMediaCacheManagerProxy::clearCacheForHostname): Deleted.
        (WebKit::WebMediaCacheManagerProxy::clearCacheForAllHostnames): Deleted.
        * UIProcess/WebMediaCacheManagerProxy.h: Removed.
        * UIProcess/WebMediaCacheManagerProxy.messages.in: Removed.
        * UIProcess/WebProcessPool.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/MediaCache/WebMediaCacheManager.cpp: Removed.
        (WebKit::WebMediaCacheManager::supplementName): Deleted.
        (WebKit::WebMediaCacheManager::WebMediaCacheManager): Deleted.
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache): Deleted.
        (WebKit::WebMediaCacheManager::clearCacheForHostname): Deleted.
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames): Deleted.
        * WebProcess/MediaCache/WebMediaCacheManager.h: Removed.
        * WebProcess/MediaCache/WebMediaCacheManager.messages.in: Removed.
        * WebProcess/WebProcess.cpp:
        (WebKit::m_webSQLiteDatabaseTracker): Deleted.

2016-02-16  Dean Jackson  <dino@apple.com>

        Allow double tap to zoom in fast-click pages
        https://bugs.webkit.org/show_bug.cgi?id=154318
        <rdar://problem/24223767>

        Reviewed by Simon Fraser and Benjamin Poulain.
        
        Most of the patch comes from Jon Lee.

        Our fast-click algorithm exposed a number of cases where
        people missed the double-tap-to-zoom behaviour. In particular,
        when you double tap on a large body of text, typical in
        blogs and articles.

        This patch enhances the algorithm to have a parallel
        double-tap gesture recognizer in the situations where
        fast-click is enabled. This new gesture recongizer does
        not cause the single tap to block for 350ms, so clicks
        are still dispatched fast. If it fires, we already have
        some information about whether we have a pending double
        tap, based on the first tap.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::disableDoubleTapGesturesDuringTapIfNecessary): Remove the optimization
        that only told the content view to disable on pages that allowed double taps. We now allow
        them even on fast click pages.

        * UIProcess/ios/WKContentViewInteraction.h: Add the new UITapGestureRecognizer for double taps
        in fast click pages. This is called nonBlockingDoubleTapGestureRecognizer because, unlike
        the existing DoubleTapGestureRecognizer, this one does not force the singleTapRecognizer
        to wait.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]): Set up the new UITapGestureRecognizer.
        (-[WKContentView cleanupInteraction]): And remove it when we're done.
        (-[WKContentView _removeDefaultGestureRecognizers]): Ditto.
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView _inspectorNodeSearchRecognized:]): Something happened, we are no longer in
        a potential double tap situation.
        (-[WKContentView _disableDoubleTapGesturesDuringTapIfNecessary:]): Remove the check
        for potential tap in progress.
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _highlightLongPressRecognized:]): Again, something happened, so we are
        no longer in a double tap situation.
        (-[WKContentView _longPressRecognized:]): Ditto.
        (-[WKContentView _singleTapRecognized:]): Ditto.
        (-[WKContentView _doubleTapRecognized:]): Ditto.
        (-[WKContentView _resetIsDoubleTapPending]):
        (-[WKContentView _fastDoubleTapRecognized:]): We're now pending a double tap.
        (-[WKContentView _twoFingerDoubleTapRecognized:]):
        (-[WKContentView _didNotHandleTapAsClick:]): If we get here and we have a pending
        double tap, then trigger a zoom operation.
        (-[WKContentView _setDoubleTapGesturesEnabled:]):

2016-02-16  Alex Christensen  <achristensen@webkit.org>

        CMake build fix.

        * PlatformMac.cmake:

2016-02-16  Alex Christensen  <achristensen@webkit.org>

        Use NSURLCredential from serverTrust when evaluating server trust AuthenticationChallenges with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154316

        Reviewed by Brady Eidson.
        
        This fixes http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html
        and many other layout tests that use https because it allows https connections with servers
        with self-signed certificates when TestController::canAuthenticateAgainstProtectionSpace in
        WebKitTestRunner says it's OK, or when any other WKPageNavigationClient says it's ok. 

        * NetworkProcess/NetworkDataTask.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::serverTrustCredential):

2016-02-16  Anders Carlsson  <andersca@apple.com>

        Use pid_t everywhere, instead of PlatformProcessIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=154306

        Reviewed by Sam Weinig.

        * Platform/IPC/Connection.h:
        * Platform/PlatformProcessIdentifier.h: Removed.
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::processIdentifier):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::didFinishLaunchingProcess):
        * UIProcess/Launcher/ProcessLauncher.h:
        (WebKit::ProcessLauncher::processIdentifier):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processIdentifier):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::networkProcessIdentifier):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-16  Anders Carlsson  <andersca@apple.com>

        Remove WebKit2 header cruft
        https://bugs.webkit.org/show_bug.cgi?id=154309

        Reviewed by Sam Weinig.

        * WebKit2.xcodeproj/project.pbxproj:
        * mac/WKError.h: Removed.
        * mac/WKPreferences.h: Removed.

2016-02-16  Anders Carlsson  <andersca@apple.com>

        Remove unused environment variable classes
        https://bugs.webkit.org/show_bug.cgi?id=154308

        Reviewed by Tim Horton.

        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.h: Removed.
        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.mm: Removed.
        (WebKit::DynamicLinkerEnvironmentExtractor::DynamicLinkerEnvironmentExtractor): Deleted.
        (WebKit::DynamicLinkerEnvironmentExtractor::processEnvironmentVariable): Deleted.
        (WebKit::DynamicLinkerEnvironmentExtractor::processLoadCommand): Deleted.
        (WebKit::DynamicLinkerEnvironmentExtractor::processLoadCommands): Deleted.
        (WebKit::DynamicLinkerEnvironmentExtractor::processSingleArchitecture): Deleted.
        (WebKit::DynamicLinkerEnvironmentExtractor::processFatFile): Deleted.
        (WebKit::DynamicLinkerEnvironmentExtractor::getExtractedEnvironmentVariables): Deleted.
        * UIProcess/Launcher/mac/EnvironmentVariables.cpp: Removed.
        (WebKit::EnvironmentVariables::EnvironmentVariables): Deleted.
        (WebKit::EnvironmentVariables::~EnvironmentVariables): Deleted.
        (WebKit::EnvironmentVariables::set): Deleted.
        (WebKit::EnvironmentVariables::get): Deleted.
        (WebKit::EnvironmentVariables::appendValue): Deleted.
        (WebKit::EnvironmentVariables::valueIfVariableHasName): Deleted.
        (WebKit::EnvironmentVariables::createStringForVariable): Deleted.
        (WebKit::EnvironmentVariables::copyEnvironmentVariables): Deleted.
        (WebKit::EnvironmentVariables::dump): Deleted.
        * UIProcess/Launcher/mac/EnvironmentVariables.h: Removed.
        (WebKit::EnvironmentVariables::environmentPointer): Deleted.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-16  Alex Christensen  <achristensen@webkit.org>

        Add checks before redirecting with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154298

        Reviewed by Andy Estes.

        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::create):
        (WebKit::NetworkDataTask::setPendingDownload):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::~NetworkDataTask):
        (WebKit::NetworkDataTask::willPerformHTTPRedirection):
        Implemented based on ResourceHandle::willSendRequest but with two notable exceptions:
        1. When using NSURLConnection, the last http method and the current http method are not always equal, and this
        check needs to change the current http method to match the last http method when being redirected with an http
        status code 307.  When using NSURLSession, the current http method is already updated properly.
        2. I did not copy the part of ResourceHandle::willSendRequest that uses a CredentialStorage.  I'm trying to avoid
        using CredentialStorages with NSURLSession.
        (WebKit::NetworkDataTask::scheduleFailure):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):

2016-02-16  Brady Eidson  <beidson@apple.com>

        Modern IDB: WK2 IPC Scaffolding.
        https://bugs.webkit.org/show_bug.cgi?id=154296

        Reviewed by Alex Christensen.
        
        No change in behavior yet; Just laying the groundwork.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::establishIDBConnectionToServer):
        (WebKit::DatabaseToWebProcessConnection::removeIDBConnectionToServer):
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * DatabaseProcess/DatabaseToWebProcessConnection.messages.in:
        
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp: Added.
        (WebKit::WebIDBConnectionToClient::create):
        (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::~WebIDBConnectionToClient):
        (WebKit::WebIDBConnectionToClient::disconnectedFromWebProcess):
        (WebKit::WebIDBConnectionToClient::messageSenderConnection):
        (WebKit::WebIDBConnectionToClient::connectionToClient):
        (WebKit::WebIDBConnectionToClient::didDeleteDatabase):
        (WebKit::WebIDBConnectionToClient::didOpenDatabase):
        (WebKit::WebIDBConnectionToClient::didAbortTransaction):
        (WebKit::WebIDBConnectionToClient::didCommitTransaction):
        (WebKit::WebIDBConnectionToClient::didCreateObjectStore):
        (WebKit::WebIDBConnectionToClient::didDeleteObjectStore):
        (WebKit::WebIDBConnectionToClient::didClearObjectStore):
        (WebKit::WebIDBConnectionToClient::didCreateIndex):
        (WebKit::WebIDBConnectionToClient::didDeleteIndex):
        (WebKit::WebIDBConnectionToClient::didPutOrAdd):
        (WebKit::WebIDBConnectionToClient::didGetRecord):
        (WebKit::WebIDBConnectionToClient::didGetCount):
        (WebKit::WebIDBConnectionToClient::didDeleteRecord):
        (WebKit::WebIDBConnectionToClient::didOpenCursor):
        (WebKit::WebIDBConnectionToClient::didIterateCursor):
        (WebKit::WebIDBConnectionToClient::fireVersionChangeEvent):
        (WebKit::WebIDBConnectionToClient::didStartTransaction):
        (WebKit::WebIDBConnectionToClient::notifyOpenDBRequestBlocked):
        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h: Added.
        
        * Platform/Logging.h:
                
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp: Added.
        (WebKit::generateConnectionToServerIdentifier):
        (WebKit::WebIDBConnectionToServer::create):
        (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
        (WebKit::WebIDBConnectionToServer::~WebIDBConnectionToServer):
        (WebKit::WebIDBConnectionToServer::messageSenderConnection):
        (WebKit::WebIDBConnectionToServer::coreConnectionToServer):
        (WebKit::WebIDBConnectionToServer::deleteDatabase):
        (WebKit::WebIDBConnectionToServer::openDatabase):
        (WebKit::WebIDBConnectionToServer::abortTransaction):
        (WebKit::WebIDBConnectionToServer::commitTransaction):
        (WebKit::WebIDBConnectionToServer::didFinishHandlingVersionChangeTransaction):
        (WebKit::WebIDBConnectionToServer::createObjectStore):
        (WebKit::WebIDBConnectionToServer::deleteObjectStore):
        (WebKit::WebIDBConnectionToServer::clearObjectStore):
        (WebKit::WebIDBConnectionToServer::createIndex):
        (WebKit::WebIDBConnectionToServer::deleteIndex):
        (WebKit::WebIDBConnectionToServer::putOrAdd):
        (WebKit::WebIDBConnectionToServer::getRecord):
        (WebKit::WebIDBConnectionToServer::getCount):
        (WebKit::WebIDBConnectionToServer::deleteRecord):
        (WebKit::WebIDBConnectionToServer::openCursor):
        (WebKit::WebIDBConnectionToServer::iterateCursor):
        (WebKit::WebIDBConnectionToServer::establishTransaction):
        (WebKit::WebIDBConnectionToServer::databaseConnectionClosed):
        (WebKit::WebIDBConnectionToServer::abortOpenAndUpgradeNeeded):
        (WebKit::WebIDBConnectionToServer::didFireVersionChangeEvent):
        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h: Added.

        * WebProcess/Databases/WebDatabaseProvider.cpp:
        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
        * WebProcess/Databases/WebDatabaseProvider.h:

        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::idbConnectionToServerForSession):
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:

2016-02-16  Sam Weinig  <sam@webkit.org>

        Revert r195826.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _createAndConfigureDoubleTapGestureRecognizer]):
        (-[WKContentView _singleTapCommited:]):

2016-02-16  Csaba Osztrogonác  <ossy@webkit.org>

        [Mac][cmake] Unreviewed buildfix after r196488. Just for fun.

        * PlatformMac.cmake:

2016-02-15  Dan Bernstein  <mitz@apple.com>

        Removed unused files after r196478.

        * Configurations/DatabaseProcess.xcconfig: Removed.
        * Configurations/NetworkProcess.xcconfig: Removed.
        * Configurations/PluginProcess.xcconfig: Removed.
        * Configurations/WebContentProcess.xcconfig: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-15  ChangSeok Oh  <changseok.oh@collabora.com>

        [ThreadedCompositor] position:fixed elements do not have their own layers when threaded compositor is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=154100

        Reviewed by Carlos Garcia Campos.

        Currently, fixed elements are redrawn to a backing store every time layout or scroll happens.
        It results in the bad effect on performance-wise. Letting fixed element have separate layers is
        necessary when threaded compositor is enabled at least. Because async scrolling requires it.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updatePreferences):

2016-02-15  Alex Christensen  <achristensen@webkit.org>

        Implement content sniffing check with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154261

        Reviewed by Andy Estes.

        This fixes http/tests/xmlhttprequest/small-chunks-response-text.html when using NetworkSession.

        * NetworkProcess/NetworkDataTask.h:
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        Content sniffing is enabled by default.  Disable it if the NetworkLoadParameters say not to.
        This is analogous to behavior in ResourceHandle::createNSURLConnection.

2016-02-15  Alex Christensen  <achristensen@webkit.org>

        Move Download authentication code to AuthenticationManager
        https://bugs.webkit.org/show_bug.cgi?id=154132

        Reviewed by Sam Weinig.

        When a video element makes a request that receives an authentication challenge, the
        AuthenticationManager receives an AuthenticationChallenge without an AuthenticationClient.
        As a result, Download::receivedCredential and other functions were being called, which
        sent a message to the challenge's sender.  This functionality is not specific to downloads,
        so I moved it from Download to AuthenticationManager.

        This fixes http/tests/media/video-auth.html when using NetworkSession 
        because I use AuthenticationManager::receivedCredential if there is no AuthenticationClient
        instead of improperly asserting that there is always an AuthenticationClient if there is no
        completionHandler.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::platformDidFinish):
        (WebKit::Download::receivedCredential): Deleted.
        (WebKit::Download::receivedRequestToContinueWithoutCredential): Deleted.
        (WebKit::Download::receivedCancellation): Deleted.
        (WebKit::Download::receivedRequestToPerformDefaultHandling): Deleted.
        (WebKit::Download::receivedChallengeRejection): Deleted.
        * NetworkProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::platformDidFinish):
        (WebKit::Download::receivedCredential): Deleted.
        (WebKit::Download::receivedRequestToContinueWithoutCredential): Deleted.
        (WebKit::Download::receivedCancellation): Deleted.
        (WebKit::Download::receivedRequestToPerformDefaultHandling): Deleted.
        (WebKit::Download::receivedChallengeRejection): Deleted.
        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::platformDidFinish):
        (WebKit::Download::receivedCredential): Deleted.
        (WebKit::Download::receivedRequestToContinueWithoutCredential): Deleted.
        (WebKit::Download::receivedCancellation): Deleted.
        (WebKit::Download::continueWithoutCredential): Deleted.
        (WebKit::Download::useCredential): Deleted.
        (WebKit::Download::cancelAuthenticationChallenge): Deleted.
        (WebKit::Download::receivedRequestToPerformDefaultHandling): Deleted.
        (WebKit::Download::receivedChallengeRejection): Deleted.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        (WebKit::AuthenticationManager::useCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::cancelChallenge):
        (WebKit::AuthenticationManager::cancelSingleChallenge):
        (WebKit::AuthenticationManager::performDefaultHandling):
        (WebKit::AuthenticationManager::performDefaultHandlingForSingleChallenge):
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinue):
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinueForSingleChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        (WebKit::AuthenticationManager::outstandingAuthenticationChallengeCount):
        * Shared/Authentication/cocoa: Added.
        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm: Added.
        (WebKit::AuthenticationManager::receivedCredential):
        (WebKit::AuthenticationManager::receivedRequestToContinueWithoutCredential):
        (WebKit::AuthenticationManager::receivedCancellation):
        (WebKit::AuthenticationManager::receivedRequestToPerformDefaultHandling):
        (WebKit::AuthenticationManager::receivedChallengeRejection):
        * Shared/Authentication/soup: Added.
        * Shared/Authentication/soup/AuthenticationManagerSoup.cpp: Added.
        (WebKit::AuthenticationManager::receivedCredential):
        (WebKit::AuthenticationManager::receivedRequestToContinueWithoutCredential):
        (WebKit::AuthenticationManager::receivedCancellation):
        (WebKit::AuthenticationManager::receivedRequestToPerformDefaultHandling):
        (WebKit::AuthenticationManager::receivedChallengeRejection):
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-15  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [CMake][Mac] Remove WKNPAPIPlugInContainer.mm in WebKit2/PlatformMac.cmake
        https://bugs.webkit.org/show_bug.cgi?id=154234

        Reviewed by Csaba Osztrogonác.

        * PlatformMac.cmake: Remove WKNPAPIPlugInContainer.mm.

2016-02-14  Chris Dumez  <cdumez@apple.com>

        Unreviewed, land an additional Mac CMake build fix.

        * PlatformMac.cmake:

2016-02-14  Brian Burg  <bburg@apple.com>

        WKAutomationDelegate's requestAutomationSession should take a suggested session identifier
        https://bugs.webkit.org/show_bug.cgi?id=154012
        <rdar://problem/24557697>

        Reviewed by Darin Adler.

        Add a string parameter to the delegate method for requesting a new session.

        * UIProcess/API/APIAutomationClient.h:
        (API::AutomationClient::didRequestAutomationSession):
        (API::AutomationClient::requestAutomationSession): Deleted.
        Rename the client method to better match the delegate method's name.

        * UIProcess/API/Cocoa/_WKAutomationDelegate.h:
        * UIProcess/Cocoa/AutomationClient.h:
        * UIProcess/Cocoa/AutomationClient.mm:
        (WebKit::AutomationClient::AutomationClient):
        (WebKit::AutomationClient::requestAutomationSession):

2016-02-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ and hopefully EFL build after r196499.

        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):

2016-02-12  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Link preview is slow and unreliable
        https://bugs.webkit.org/show_bug.cgi?id=154197
        -and corresponding-
        rdar://problem/24428064

        Reviewed by Tim Horton.

        This patch rolls http://trac.webkit.org/changeset/187471 back in. That was 
        how we fixed this problem ages ago. We rolled it out because it very 
        mysteriously seemed to cause a memory regression, but we want to track that 
        separately and not leave this performance regression in its place in the 
        meantime.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateViewState):
        (WebKit::WebPageProxy::dispatchViewStateChange):
        (WebKit::WebPageProxy::updateActivityToken):

2016-02-12  Anders Carlsson  <andersca@apple.com>

        Get rid of a 6 year old compiler workaround
        https://bugs.webkit.org/show_bug.cgi?id=154198

        Reviewed by Sam Weinig.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        (WebKit::createService):

2016-02-12  Anders Carlsson  <andersca@apple.com>

        Fix ASan build.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::copyASanDynamicLibraryPath): Deleted.

2016-02-12  Anders Carlsson  <andersca@apple.com>

        Remove NPAPI for showing preference panes
        https://bugs.webkit.org/show_bug.cgi?id=154193

        Reviewed by Dan Bernstein.

        No plug-ins ended up adopting this API, so there's no point in keeping it around.

        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::openPluginPreferencePane): Deleted.
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo): Deleted.
        * Shared/Plugins/PluginModuleInfo.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::openPluginPreferencePane): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Deleted.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::openPluginPreferencePane): Deleted.
        (WebKit::NetscapePlugin::plugInContainer): Deleted.
        (WebKit::NetscapePlugin::platformDestroy): Deleted.
        * WebProcess/Plugins/Netscape/mac/WKNPAPIPlugInContainer.h: Removed.
        * WebProcess/Plugins/Netscape/mac/WKNPAPIPlugInContainer.mm: Removed.
        (-[WKNPAPIPlugInContainer dealloc]): Deleted.
        (-[WKNPAPIPlugInContainer _invalidate]): Deleted.
        (-[WKNPAPIPlugInContainer openPlugInPreferencePane]): Deleted.
        * WebProcess/Plugins/Netscape/mac/WKNPAPIPlugInContainerInternal.h: Removed.
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::openPluginPreferencePane): Deleted.
        * WebProcess/Plugins/PluginView.h:

2016-02-12  Anders Carlsson  <andersca@apple.com>

        Remove PowerPC cruft
        https://bugs.webkit.org/show_bug.cgi?id=154191

        Reviewed by Dan Bernstein.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginArchitecture): Deleted.

2016-02-12  Anders Carlsson  <andersca@apple.com>

        Remove more unneeded process launching code
        https://bugs.webkit.org/show_bug.cgi?id=154190

        Reviewed by Tim Horton.

        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::getLaunchOptions): Deleted.
        * UIProcess/Databases/mac/DatabaseProcessProxyMac.mm: Removed.
        (WebKit::DatabaseProcessProxy::platformGetLaunchOptions): Deleted.
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getLaunchOptions): Deleted.
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::platformGetLaunchOptions): Deleted.
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::pluginNeedsExecutableHeap): Deleted.
        (WebKit::PluginProcessProxy::platformGetLaunchOptions): Deleted.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions): Deleted.
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::platformGetLaunchOptions): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-12  Anders Carlsson  <andersca@apple.com>

        Use different process types for 32-bit and 64-bit plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=154186

        Reviewed by Tim Horton.

        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::getLaunchOptions):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):
        (WebKit::shouldLeakBoost):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getLaunchOptions): Deleted.
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):

2016-02-12  Beth Dakin  <bdakin@apple.com>

        Re-name isClickableElement in InteractionInformationAtPosition to isElement
        https://bugs.webkit.org/show_bug.cgi?id=154179

        Reviewed by Enrica Casucci.

        The bool is set for all elements, so it’s just confusing to call it a 
        clickableElement instead of just element.
        * Shared/ios/InteractionInformationAtPosition.h:
        * Shared/ios/InteractionInformationAtPosition.mm:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _highlightLongPressRecognized:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2016-02-12  Anders Carlsson  <andersca@apple.com>

        Remove more unused process launcher code
        https://bugs.webkit.org/show_bug.cgi?id=154181

        Reviewed by Tim Horton.

        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString): Deleted.
        (WebKit::ProcessLauncher::getProcessTypeFromString): Deleted.
        * UIProcess/Launcher/ProcessLauncher.h:

2016-02-12  Anders Carlsson  <andersca@apple.com>

        Remove more unused process launching code
        https://bugs.webkit.org/show_bug.cgi?id=154178

        Reviewed by Tim Horton.

        * UIProcess/Databases/mac/DatabaseProcessProxyMac.mm:
        (WebKit::shouldUseXPC): Deleted.
        (WebKit::DatabaseProcessProxy::platformGetLaunchOptions): Deleted.
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/EnvironmentVariables.cpp:
        (WebKit::EnvironmentVariables::preexistingProcessServiceNameKey): Deleted.
        (WebKit::EnvironmentVariables::preexistingProcessTypeKey): Deleted.
        * UIProcess/Launcher/mac/EnvironmentVariables.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::launchProcess):
        (WebKit::setUpTerminationNotificationHandler): Deleted.
        (WebKit::addDYLDEnvironmentAdditions): Deleted.
        (WebKit::tryPreexistingProcess): Deleted.
        (WebKit::createProcess): Deleted.
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::shouldUseXPC): Deleted.
        (WebKit::NetworkProcessProxy::platformGetLaunchOptions): Deleted.
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions): Deleted.
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::platformGetLaunchOptions): Deleted.
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::shouldUseXPC): Deleted.
        (WebKit::WebProcessProxy::platformGetLaunchOptions): Deleted.

2016-02-12  Brian Burg  <bburg@apple.com>

        Add a WebKit SPI for creating an automation session and advertise the active session via RemoteInspector
        https://bugs.webkit.org/show_bug.cgi?id=153934

        Reviewed by Dan Bernstein and Joseph Pecoraro.

        An automation session is the main place where WebKit support for user agent automation is implemented.
        A session encapsulates the state (default timeouts, page identifier mappings), objects (active automation
        WebPages) and logic (how to open a window, run JS, send user input, etc.) used to implement automation
        commands.

        A process pool can only have one session at a time. The session is created by the WebKit client in
        response to a request that comes through _WKAutomationDelegate. When a session is set on the process pool,
        it is advertised to remote drivers and debuggers as a RemoteControllableTarget. A remote driver can use
        the existing RemoteInspector API to connect to the session and send it automation commands.

        The session has a delegate so that WebKit clients can perform actions that are outside the scope of WebKit,
        such as creating new tabs, enumerating windows, or sending native user inputs.

        This patch adds AutomationSession classes at the API and implementation level in WebKit2. The
        implementation class contains RemoteInspector support, which cannot be used directly by WebKit clients.
        AutomationSessionDelegate classes exist at both the API and implementation level to bridge between
        Objective-C delegates and C++ clients. All code related to RemoteInspector and RemoteAutomationTarget
        must be guarded by ENABLE(REMOTE_INSPECTOR).

        * Shared/API/APIObject.h: Add new API type 'AutomationSession'.
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject): Allocate in the wrapper.
        * UIProcess/API/APIAutomationSessionClient.h: Added.
        (API::AutomationSessionClient::~AutomationSessionClient):
        (API::AutomationSessionClient::didRequestNewWindow): Delegate window creation to the client.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setAutomationSession:]): Keep at most one WebAutomationSession at a time.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKAutomationSession.h: Added.
        * UIProcess/API/Cocoa/_WKAutomationSession.mm: Added.
        (-[_WKAutomationSession init]): Construct the API object in the implementation wrapper.
        (-[_WKAutomationSession dealloc]): Clear the client before calling the implementation destructor.

        (-[_WKAutomationSession sessionIdentifier]):
        (-[_WKAutomationSession setSessionIdentifier:]):
        Store the session identifier string in the implementation.

        (-[_WKAutomationSession delegate]):
        (-[_WKAutomationSession setDelegate:]):
        Create an Objective-C adapter for the delegate if not nil and set it as the implementation's client.

        (-[_WKAutomationSession _apiObject]):
        * UIProcess/API/Cocoa/_WKAutomationSessionDelegate.h: Added.
        * UIProcess/API/Cocoa/_WKAutomationSessionInternal.h: Added.
        (wrapper):
        * UIProcess/Cocoa/AutomationSessionClient.h: Added.
        Set up the boilerplate for caching delegate method availability. It will include more methods later.

        * UIProcess/Cocoa/AutomationSessionClient.mm: Added. Forward requests to the SPI delegate.
        (WebKit::AutomationSessionClient::AutomationSessionClient):
        (WebKit::AutomationSessionClient::didRequestNewWindow): Delegate window creation to the client.

        * UIProcess/WebAutomationSession.cpp: Added.
        (WebKit::WebAutomationSession::WebAutomationSession):
        By default, a session should be available and not paired to any particular remote driver.

        (WebKit::WebAutomationSession::~WebAutomationSession): Require callers to clear the client first.
        (WebKit::WebAutomationSession::setClient):
        (WebKit::WebAutomationSession::dispatchMessageFromRemote): Stub this out for now.

        (WebKit::WebAutomationSession::connect):
        (WebKit::WebAutomationSession::disconnect):
        To prevent multiple connection attempts, mark the target as paired when a remote client has connected.

        * UIProcess/WebAutomationSession.h: Added.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setAutomationSession):
        Store the session object and tell it to register itself. Unregistering happens automatically
        in RemoteControllableTarget::~RemoteControllableTarget.

        * UIProcess/WebProcessPool.h:
        * WebKit2.xcodeproj/project.pbxproj: Add files and headers.

2016-02-12  Anders Carlsson  <andersca@apple.com>

        Get rid of NetscapePluginModule::createPluginMIMETypesPreferences
        https://bugs.webkit.org/show_bug.cgi?id=154173

        Reviewed by Dan Bernstein.

        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::createPluginMIMETypesPreferences): Deleted.

2016-02-11  Anders Carlsson  <andersca@apple.com>

        Remove legacy processes from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=154119

        Reviewed by Darin Adler.

        * Configurations/BaseLegacyProcess.xcconfig: Removed.
        * DatabaseProcess/EntryPoint/mac/LegacyProcess/DatabaseProcessMain.mm: Removed.
        (DatabaseProcessMain): Deleted.
        * DatabaseProcess/EntryPoint/mac/LegacyProcess/Info.plist: Removed.
        * NetworkProcess/EntryPoint/mac/LegacyProcess/Info.plist: Removed.
        * NetworkProcess/EntryPoint/mac/LegacyProcess/NetworkProcessMain.mm: Removed.
        (NetworkProcessMain): Deleted.
        * PluginProcess/EntryPoint/mac/LegacyProcess/Info.plist: Removed.
        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm: Removed.
        (WebKit::PluginProcessMainDelegate::PluginProcessMainDelegate): Deleted.
        (PluginProcessMain): Deleted.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.h: Removed.
        (WebKit::ChildProcessMainDelegate::ChildProcessMainDelegate): Deleted.
        (WebKit::ChildProcessMain): Deleted.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.mm: Removed.
        (WebKit::ChildProcessMainDelegate::~ChildProcessMainDelegate): Deleted.
        (WebKit::ChildProcessMainDelegate::installSignalHandlers): Deleted.
        (WebKit::ChildProcessMainDelegate::doPreInitializationWork): Deleted.
        (WebKit::ChildProcessMainDelegate::getConnectionIdentifier): Deleted.
        (WebKit::ChildProcessMainDelegate::getClientIdentifier): Deleted.
        (WebKit::ChildProcessMainDelegate::getClientProcessName): Deleted.
        (WebKit::ChildProcessMainDelegate::getExtraInitializationData): Deleted.
        (WebKit::ChildProcessMainDelegate::startRunLoop): Deleted.
        (WebKit::ChildProcessMainDelegate::doPostRunWork): Deleted.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.mm: Removed.
        (WebKit::closeUnusedFileDescriptors): Deleted.
        (WebKit::BootstrapMain): Deleted.
        (main): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/mac/LegacyProcess/Info.plist: Removed.
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm: Removed.
        (WebKit::WebContentProcessMainDelegate::WebContentProcessMainDelegate): Deleted.
        (WebContentProcessMain): Deleted.

2016-02-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] HTTP auth dialog incorrectly rendered with Accelerated Compositing enabled
        https://bugs.webkit.org/show_bug.cgi?id=154159

        Reviewed by Michael Catanzaro.

        There are two problems here, first we are changing the cairo
        operator when rendering the xcomposite window pixmap without a
        proper save/restore, so it affects the drawing that happens after
        that, and second problem is that we are not rendering the gray
        background in AC mode because we are returning earlier.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewRenderAcceleratedCompositingResults):
        (webkitWebViewBaseDraw):

2016-02-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Allow applications to disable Accelerated Compositing mode.
        https://bugs.webkit.org/show_bug.cgi?id=154147

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore): if the environment
        variable  WEBKIT_DISABLE_COMPOSITING_MODE is defined, then disable AC.

2016-02-11  Commit Queue  <commit-queue@webkit.org>

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

        This change broke internal iOS builds (Requested by ryanhaddad
        on #webkit).

        Reverted changeset:

        "Move Download authentication code to AuthenticationManager"
        https://bugs.webkit.org/show_bug.cgi?id=154132
        http://trac.webkit.org/changeset/196453

2016-02-11  Anders Carlsson  <andersca@apple.com>

        Use the system PluginProcess.app for generating plug-in MIME type preferences
        https://bugs.webkit.org/show_bug.cgi?id=154139

        Reviewed by Dan Bernstein.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::createPropertyListFile):

2016-02-11  Beth Dakin  <bdakin@apple.com>

        EditingRangeIsRelativeTo::Document and NSRangeIsRelativeTo::Document should 
        be called EditableRoot instead
        https://bugs.webkit.org/show_bug.cgi?id=154138

        Reviewed by Alexey Proskuryakov.

        EditableRoot is much more accurate than Document.
        * Shared/EditingRange.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::insertText):
        (WebKit::WebViewImpl::selectedRangeWithCompletionHandler):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::rangeFromEditingRange):
        * WebProcess/WebPage/WebPage.h:

2016-02-11  Alex Christensen  <achristensen@webkit.org>

        Move Download authentication code to AuthenticationManager
        https://bugs.webkit.org/show_bug.cgi?id=154132

        Reviewed by Sam Weinig.

        When a video element makes a request that receives an authentication challenge, the
        AuthenticationManager receives an AuthenticationChallenge without an AuthenticationClient.
        As a result, Download::receivedCredential and other functions were being called, which
        sent a message to the challenge's sender.  This functionality is not specific to downloads,
        so I moved it from Download to AuthenticationManager.

        This fixes http/tests/media/video-auth.html when using NetworkSession 
        because I use AuthenticationManager::receivedCredential if there is no AuthenticationClient
        instead of improperly asserting that there is always an AuthenticationClient if there is no
        completionHandler.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::platformDidFinish):
        (WebKit::Download::receivedCredential): Deleted.
        (WebKit::Download::receivedRequestToContinueWithoutCredential): Deleted.
        (WebKit::Download::receivedCancellation): Deleted.
        (WebKit::Download::receivedRequestToPerformDefaultHandling): Deleted.
        (WebKit::Download::receivedChallengeRejection): Deleted.
        * NetworkProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::platformDidFinish):
        (WebKit::Download::receivedCredential): Deleted.
        (WebKit::Download::receivedRequestToContinueWithoutCredential): Deleted.
        (WebKit::Download::receivedCancellation): Deleted.
        (WebKit::Download::receivedRequestToPerformDefaultHandling): Deleted.
        (WebKit::Download::receivedChallengeRejection): Deleted.
        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::platformDidFinish):
        (WebKit::Download::receivedCredential): Deleted.
        (WebKit::Download::receivedRequestToContinueWithoutCredential): Deleted.
        (WebKit::Download::receivedCancellation): Deleted.
        (WebKit::Download::continueWithoutCredential): Deleted.
        (WebKit::Download::useCredential): Deleted.
        (WebKit::Download::cancelAuthenticationChallenge): Deleted.
        (WebKit::Download::receivedRequestToPerformDefaultHandling): Deleted.
        (WebKit::Download::receivedChallengeRejection): Deleted.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        (WebKit::AuthenticationManager::useCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::cancelChallenge):
        (WebKit::AuthenticationManager::cancelSingleChallenge):
        (WebKit::AuthenticationManager::performDefaultHandling):
        (WebKit::AuthenticationManager::performDefaultHandlingForSingleChallenge):
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinue):
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinueForSingleChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        (WebKit::AuthenticationManager::outstandingAuthenticationChallengeCount):
        * Shared/Authentication/cocoa: Added.
        * Shared/Authentication/cocoa/AuthenticationManagerCocoa.mm: Added.
        (WebKit::AuthenticationManager::receivedCredential):
        (WebKit::AuthenticationManager::receivedRequestToContinueWithoutCredential):
        (WebKit::AuthenticationManager::receivedCancellation):
        (WebKit::AuthenticationManager::receivedRequestToPerformDefaultHandling):
        (WebKit::AuthenticationManager::receivedChallengeRejection):
        * Shared/Authentication/soup: Added.
        * Shared/Authentication/soup/AuthenticationManagerSoup.cpp: Added.
        (WebKit::AuthenticationManager::receivedCredential):
        (WebKit::AuthenticationManager::receivedRequestToContinueWithoutCredential):
        (WebKit::AuthenticationManager::receivedCancellation):
        (WebKit::AuthenticationManager::receivedRequestToPerformDefaultHandling):
        (WebKit::AuthenticationManager::receivedChallengeRejection):
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-11  Beth Dakin  <bdakin@apple.com>

        Soft spaces are often tracked in the wrong spot
        https://bugs.webkit.org/show_bug.cgi?id=154127
        -and corresponding-
        rdar://problem/24493140

        Reviewed by Sam Weinig.

        Soft spaces are in the wrong space now for two reasons. First of all, the 
        NSRange we get from the accepted candidate is relative to the paragraph 
        start, so without this patch, soft spaces are only ever right for the first 
        paragraph. Secondly, if focus changes for any reason other than text 
        insertion, soft spaces are also wrong because they need to be re-set.

        New enum can be used to indicate what an EditingRange is relative to.
        * Shared/EditingRange.h:
        (WebKit::EditingRange::EditingRange):

        didHandleAcceptedCandidate is a new message that gets sent from the 
        WebProcess. This lets us track a bool m_isHandlingAcceptedCandidate.
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::didHandleAcceptedCandidate):

        Re-set the m_softSpaceRange on selection changes so long as 
        m_isHandlingAcceptedCandidate is false.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::selectionDidChange):

        Set m_isHandlingAcceptedCandidate to true.
        (WebKit::WebViewImpl::handleAcceptedCandidate):

        Set m_isHandlingAcceptedCandidate to false.
        (WebKit::WebViewImpl::didHandleAcceptedCandidate):

        insertTextAsync takes a new parameter indicating what the replacementRange is 
        relative to. If needToRemoveSoftSpace is true, then the replacementRange is 
        relative to the paragraph.
        (WebKit::WebViewImpl::insertText):

        Pipe didHandleAcceptedCandidate through to WebViewImpl.
        * UIProcess/PageClient.h:

        insertTextAsync takes an EditingRangeIsRelativeTo.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::insertTextAsync):

        Pipe didHandleAcceptedCandidate through to WebViewImpl.
        (WebKit::WebPageProxy::didHandleAcceptedCandidate):
        * UIProcess/WebPageProxy.h:

        New message lets the WebProcess tell the UIProcess when the candidate has 
        been accepted.
        * UIProcess/WebPageProxy.messages.in:

        Pipe didHandleAcceptedCandidate through to WebViewImpl.
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didHandleAcceptedCandidate):

        insertTextAsync takes an EditingRangeIsRelativeTo. Pass that through to 
        rangeFromEditingRange to get the correct range.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertTextAsync):

        Use the EditingRangeIsRelativeTo to find the right WebCore::Range.
        (WebKit::WebPage::rangeFromEditingRange):

        Take EditingRangeIsRelativeTo in a few places. 
        * WebProcess/WebPage/WebPage.h:

        InsertTextAsync takes a EditingRangeIsRelativeTo.
        * WebProcess/WebPage/WebPage.messages.in:

        Send didHandleAccpetedCandidate to the UIProcess
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleAcceptedCandidate):

2016-02-11  Alex Christensen  <achristensen@webkit.org>

        Use BlobResourceHandle when loading blob urls, even when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=154096

        Reviewed by Brady Eidson.
        
        This fixes at least http/tests/xmlhttprequest/blob-request-byte-range.html.

        * NetworkProcess/NetworkDataTask.h:
        Renamed NetworkDataTaskClient::didReceiveResponse to didReceiveResponseNetworkSession
        to avoid conflicting with ResourceHandleClient::didReceiveResponse.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        Make a BlobResourceHandle instead of a NetworkDataTask if we have a request for a blob url.
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::setDefersLoading):
        (WebKit::NetworkLoad::cancel):
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::continueDidReceiveResponse):
        (WebKit::NetworkLoad::sharedDidReceiveResponse):
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::setPendingDownloadID):
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didReceiveResponseNetworkSession):
        (WebKit::NetworkLoad::cannotShowURL):
        (WebKit::NetworkLoad::didReceiveResponseAsync):
        (WebKit::NetworkLoad::willSendRequestAsync):
        (WebKit::NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkLoad::supportsDataArray):
        (WebKit::NetworkLoad::didReceiveDataArray):
        (WebKit::NetworkLoad::didSendData):
        (WebKit::NetworkLoad::receivedCancellation):
        (WebKit::NetworkLoad::didReceiveResponse): Deleted.
        Compile ResourceHandleClient when using NetworkSession because it is used for blobs now.
        Also, add null checks because we now have NetworkLoads where either m_task or m_handle is always null.
        * NetworkProcess/NetworkLoad.h:
        (WebKit::NetworkLoad::pendingDownloadID):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        * NetworkProcess/mac/NetworkLoadMac.mm:
        (WebKit::NetworkLoad::willCacheResponseAsync):

2016-02-11  Frederic Wang  <fred.wang@free.fr>

        Bug 154103 - [GTK] Build error after bug 154046
        https://bugs.webkit.org/show_bug.cgi?id=154103

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitUserContent.cpp:
        (_WebKitUserStyleSheet::_WebKitUserStyleSheet):
        (webkitUserStyleSheetGetUserStyleSheet):
        * UIProcess/API/gtk/WebKitUserContentPrivate.h:

2016-02-10  Jiewen Tan  <jiewen_tan@apple.com>

        Rename *Event::create* which creates events for bindings to *Event::createForBindings* and cleanup corresponding paths
        https://bugs.webkit.org/show_bug.cgi?id=153903
        <rdar://problem/24518146>

        Reviewed by Darin Adler.

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

2016-02-10  Anders Carlsson  <andersca@apple.com>

        Add SPI to remove individual user scripts or user style sheets
        https://bugs.webkit.org/show_bug.cgi?id=154046
        rdar://problem/23596352

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _removeUserScript:]):
        (-[WKUserContentController _userStyleSheets]):
        (-[WKUserContentController _addUserStyleSheet:]):
        (-[WKUserContentController _removeUserStyleSheet:]):
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::removeUserScript):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        (WebKit::WebUserContentControllerProxy::userStyleSheets):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::removeUserScript):
        (WebKit::WebUserContentController::removeUserStyleSheet):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:

2016-02-10  Alex Christensen  <achristensen@webkit.org>

        Fix assertions when loading from WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=154079

        Reviewed by Anders Carlsson.

        Assertions were failing, mostly when using NetworkProcess, and mostly involving Top Sites.
        When we do loading from the WebProcess (which we should eventually not allow), we were sometimes
        using a private browsing session that did not exist because the UIProcess had told the NetworkProcess
        to create a private browsing session with the given SessionID, but the WebProcess was not told about
        the private browsing session.
        Also, sometimes we were calling NetworkProcess::singleton() from the WebProcess, which caused problems
        with the PlatformStrategies object being reset.  This prevents that, too.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        Added an assertion that we have a network session when we have just made a NetworkingContext with the given SessionID.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::defaultSession):
        (WebKit::NetworkSession::NetworkSession):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        Call NetworkProcess::singleton only when we know we are in the network process.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        Tell the WebProcesses about the new private session, too.  Sometimes they use the new private session.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensurePrivateBrowsingSession):
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        Removed useless macros that were always true for all WK2 clients.

2016-02-10  Dan Bernstein  <mitz@apple.com>

        [Mac] Stop installing the legacy processes
        https://bugs.webkit.org/show_bug.cgi?id=154062

        Reviewed by Anders Carlsson.

        * Configurations/All.xcconfig: Removed the legacy processes from EXCLUDED_SOURCE_FILE_NAMES
          for iOS, now that they are no longer included in a Copy Files build phase.
        * Configurations/BaseLegacyProcess.xcconfig: Set SKIP_INSTALL to YES for OS X as well.
        * WebKit2.xcodeproj/project.pbxproj: Removed the Copy Files build phase that copied the
          processes into the framework in engineering builds. Renamed the “Add current version
          symlinks” script build phase to “Add XPCServices symlink”, and changed it to do just that.

2016-02-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r196183): [GTK] Broke TestInspector
        https://bugs.webkit.org/show_bug.cgi?id=153945

        Reviewed by Michael Catanzaro.

        When the inspector view is detached and not added to a window,
        which happens when it's closed, the inspector view is destroyed
        because it doesn't have a parent anymore. When the inspector view
        is destroyed we notify the web process that the inspector was
        closed. Before r196183 this was not a problem, because the call to
        WebInspectorProxy::didClose() from platformDetach() returned early
        because WebInspectorProxy::didClose() had already set
        m_inspectorPage to nullptr. In r196183 m_inspectorPage is set to
        nullptr after platformDetach(), so we end up trying to detach the
        inpector view again. To prevent this cycle, we should disconnect
        the destroyed signal handler from the inspector view when
        platformDetach() is called from WebInspectorProxy::didClose().

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformDetach):

2016-02-09  Commit Queue  <commit-queue@webkit.org>

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

        This change broke existing API tests on Mac and iOS (Requested
        by ryanhaddad on #webkit).

        Reverted changeset:

        "Add SPI to remove individual user scripts or user style
        sheets"
        https://bugs.webkit.org/show_bug.cgi?id=154046
        http://trac.webkit.org/changeset/196341

2016-02-09  Anders Carlsson  <andersca@apple.com>

        Add SPI to remove individual user scripts or user style sheets
        https://bugs.webkit.org/show_bug.cgi?id=154046
        rdar://problem/23596352

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _removeUserScript:]):
        (-[WKUserContentController _userStyleSheets]):
        (-[WKUserContentController _addUserStyleSheet:]):
        (-[WKUserContentController _removeUserStyleSheet:]):
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::removeUserScript):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        (WebKit::WebUserContentControllerProxy::userStyleSheets):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::removeUserScript):
        (WebKit::WebUserContentController::removeUserStyleSheet):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:

2016-02-07  Gavin Barraclough  <barraclough@apple.com>

        GetValueFunc/PutValueFunc should not take both slotBase and thisValue
        https://bugs.webkit.org/show_bug.cgi?id=154009

        Reviewed by Geoff Garen.

        In JavaScript there are two types of properties - regular value properties, and accessor properties.
        One difference between these is how they are reflected by getOwnPropertyDescriptor, and another is
        what object they operate on in the case of a prototype access. If you access a value property of a
        prototype object it return a value pertinent to the prototype, but in the case of a prototype object
        returning an accessor, then the accessor function is applied to the base object of the access.

        JSC supports special 'custom' properties implemented as a c++ callback, and these custom properties
        can be used to implement either value- or accessor-like behavior. getOwnPropertyDescriptor behavior
        is selected via the CustomAccessor attribute. Value- or accessor-like object selection is current
        supported by passing both the slotBase and the thisValue to the callback,and hoping it uses the
        right one. This is probably inefficient, bug-prone, and leads to crazy like JSBoundSlotBaseFunction.

        Instead, just pass one thisValue to the callback functions, consistent with CustomAccessor.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
            - Merged slotBase & thisValue to custom property callbacks.

2016-02-09  Jer Noble  <jer.noble@apple.com>

        [Mac] Exiting fullscreen through the placeholder action leaves window in empty state
        https://bugs.webkit.org/show_bug.cgi?id=152979
        <rdar://problem/24132309>

        Reviewed by Brent Fulgham.

        In r194593, we relaxed the _fullScreenState requirement in -finishedExitFullScreenAnimation: to handle
        the case where the request to exit fullscreen came from outside the process. However, in so doing, we
        allowed -finishedExitFullScreenAnimation: to be called twice, and in so doing, leave the original window
        empty of its WebView.  Tighten up the restriction of _fullScreenState to allow only the "InFullScreen"
        state (to take care of the external exit command) and the "ExitingFullScreen" state, to handle the
        normal teardown path.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):

2016-02-04  Jer Noble  <jer.noble@apple.com>

        [Mac] Adopt NSURLSession properties in AVAssetResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=153873

        Reviewed by Eric Carlson.

        Add a WebKit2 preference to control the WebCore isAVFoundationNSURLSessionEnabled()
        setting.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAVFoundationNSURLSessionEnabled):
        (WKPreferencesGetAVFoundationNSURLSessionEnabled):
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-02-09  Anders Carlsson  <andersca@apple.com>

        All 32-bit plug-ins should use the XPC service
        https://bugs.webkit.org/show_bug.cgi?id=154036
        rdar://problem/16059483

        Reviewed by Dan Bernstein.
        
        Silverlight expects malloced memory from the tiny zone to be executable. It also expects
        the data segment from its coreclr image to be executable.
        
        Make this possible by:
        
        1. Shimming mach_vm_map, making sure to add the VM_PROT_EXECUTABLE bit to any memory in the tiny zone.
        2. Go through the address space, looking for any existing ranges from the tiny zone and mach_vm_protect them
           to be executable.
        3. Register with dyld so we'll get callbacks whenever a library is bound, look for the coreclr image, and
           mach_vm_protect its __DATA segment to be executable.

        * Platform/spi/Cocoa/DyldSPI.h: Copied from Source/WebKit2/PluginProcess/mac/PluginProcessShim.h.
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::isMallocMemoryTag):
        (WebKit::shouldMapMemoryExecutable):
        (WebKit::initializeShim):
        (WebKit::PluginProcess::platformInitializeProcess):
        * PluginProcess/mac/PluginProcessShim.h:
        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shimMachVMMap):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):
        (WebKit::shouldUseXPC): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-09  Fujii Hironori  <Hironori.Fujii@jp.sony.com>

        possible buffer overrun in Connection::processMessage of Source/WebKit2/Platform/IPC/unix/ConnectionUnix.cpp
        https://bugs.webkit.org/show_bug.cgi?id=153637

        Reviewed by Carlos Garcia Campos.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage): Fix invalid arguments of memmove.

2016-02-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.11.5 release.

        * gtk/NEWS: Add release notes for 2.11.5.

2016-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView should send crossing events to the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=153740

        Reviewed by Michael Catanzaro.

        We don't currently handle crossing events in the web view
        (enter/leave). That's why if you hover a scrollbar and leave the
        window, the scrollbar is still rendered as hovered.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::buttonForEvent): Handle the case of GDK_ENTER_NOTIFY and
        GDK_LEAVE_NOTIFY events.
        (WebKit::WebEventFactory::createWebMouseEvent): Ditto.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Add GDK_ENTER_NOTIFY_MASK and
        GDK_LEAVE_NOTIFY_MASK flags to the web view event mask.
        (webkitWebViewBaseCrossingNotifyEvent): Handle enter/leave notify
        events by generating a mouse move event, ensuring the double to
        int conversion will not cause any problem.
        (webkit_web_view_base_class_init): Add an implementation for
        enter_notify_event and leave_notify_event.

2016-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Infinite loop when processing mouse events synchronously
        https://bugs.webkit.org/show_bug.cgi?id=153995

        Reviewed by Darin Adler.

        This happened with WTR in the GTK+ port after landing patch in bug
        #153740. The thing is that WTR forces events handling IPC messages
        to be synchronous. When a drag and drop operation is in progress,
        the web process ignores mouse move events and replies with
        DidReceiveEvent signal. The DidReceiveEvent message handler in
        WebPageProxy checks if we have a m_nextMouseMoveEvent and handles
        it, but when all this happens synchronously the
        m_nextMouseMoveEvent is the current one because we haven't
        returned yet from handleMouseEvent(). We need to invalidate the
        m_nextMouseMoveEvent before calling handleMouseEvent().

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

2016-02-08  Jeremy Jones  <jeremyj@apple.com>

        Remove __weak from WKAirPlayRoutePicker.mm to fix build warning.
        https://bugs.webkit.org/show_bug.cgi?id=153985
        rdar://problem/24485348

        Reviewed by Darin Adler.

        Remove __weak since it is only available when using ARC.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:

2016-02-08  Danilo Cesar Lemes de Paula  <danilo.cesar@collabora.co.uk>

        [GTK] Fix crash when creating webview with g_object_new
        https://bugs.webkit.org/show_bug.cgi?id=153989

        Reviewed by Carlos Garcia Campos.

        g_object_new(WEBKIT_TYPE_WEB_VIEW, NULL) crashes webkit
        as _WebKitWebViewBasePrivate constructor requires a mainloop, but
        webkit is only initialized when a context is created (which
        doesn't happen with a direct call to g_object_new).

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkit_web_view_base_class_init):

2016-02-08  Commit Queue  <commit-queue@webkit.org>

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

        Caused several crashes in GTK+ bots (Requested by KaL on
        #webkit).

        Reverted changeset:

        "[GTK] WebKitWebView should send crossing events to the
        WebProcess"
        https://bugs.webkit.org/show_bug.cgi?id=153740
        http://trac.webkit.org/changeset/196253

2016-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView should send crossing events to the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=153740

        Reviewed by Michael Catanzaro.

        We don't currently handle crossing events in the web view
        (enter/leave). That's why if you hover a scrollbar and leave the
        window, the scrollbar is still rendered as hovered.

        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::buttonForEvent): Handle the case of GDK_ENTER_NOTIFY and
        GDK_LEAVE_NOTIFY events.
        (WebKit::WebEventFactory::createWebMouseEvent): Ditto.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Add GDK_ENTER_NOTIFY_MASK and
        GDK_LEAVE_NOTIFY_MASK flags to the web view event mask.
        (webkitWebViewBaseCrossingNotifyEvent): Handle enter/leave notify
        events by generating a mouse move event, ensuring the double to
        int conversion will not cause any problem.
        (webkit_web_view_base_class_init): Add an implementation for
        enter_notify_event and leave_notify_event.

2016-02-06  Daniel Bates  <dabates@apple.com>

        Call CFRelease() on SecRequirementRef when no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=153954
        <rdar://problem/24540259>

        Reviewed by Dan Bernstein.

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

2016-02-06  Darin Adler  <darin@apple.com>

        Finish auditing call sites of upper() and lower(), eliminate many, and rename the functions
        https://bugs.webkit.org/show_bug.cgi?id=153905

        Reviewed by Sam Weinig.

        * NetworkProcess/CustomProtocols/CustomProtocolManager.h: Use ASCII case-insensitive hash
        for set of registered schemes.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromPropertyLists): Use convertToASCIILowercase for MIME type and
        for file extensions.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::parseMIMEDescription): Use convertToASCIILowercase for
        MIME description.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_preferred_languages_set): Use convertToASCIILowercase for language.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_preferred_languages): Use convertToASCIILowercase for language.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::findPluginForExtension): Use Vector::contains instead of
        writing it out using std::find.
        (WebKit::pathExtension): Lowercase the result with convertToASCIILowercase instead of
        leaving that to the caller.
        (WebKit::PluginInfoStore::findPlugin): Removed call to lower since pathExtension
        handles that now.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin): Use convertToASCIILowercase for MIME type.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::globalURLSchemesWithCustomProtocolHandlers): Use
        an ASCII case-insensitive hash.
        (WebKit::WebProcessPool::registerGlobalURLSchemeAsHavingCustomProtocolHandlers):
        Remove lowercasing, since the hash is now ASCII case-insensitive.
        (WebKit::WebProcessPool::unregisterGlobalURLSchemeAsHavingCustomProtocolHandlers):
        Ditto.

        * UIProcess/WebProcessPool.h: Use an ASCII case-insensitive hash.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::initialize): Use convertToASCIILowercase on parameter names
        and values.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::pluginSupportsExtension): Use convertToASCIILowercase for extension assertion.
        Also use a modern for loop.
        (WebKit::WebFrameLoaderClient::objectContentType): Make the checks for empty MIME types
        a little less redundant. Reordered logic to avoid checking the list of supported MIME
        types extra times, and to eliminate the need for a boolean. Use convertToASCIILowercase
        on the extension.

2016-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix more incorrect ASSERT introduced in r196053.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePluginX11::handleMouseEvent):
        (WebKit::NetscapePluginX11::handleWheelEvent):
        (WebKit::NetscapePluginX11::setFocus):
        (WebKit::NetscapePluginX11::handleMouseEnterEvent):
        (WebKit::NetscapePluginX11::handleMouseLeaveEvent):
        (WebKit::NetscapePluginX11::handleKeyboardEvent):

2016-02-05  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Error when closing page with WebInspector open
        https://bugs.webkit.org/show_bug.cgi?id=152867
        rdar://problem/24099423

        Reviewed by Brian Burg.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::didClose): Null out m_inspectorPage after platformDetach(),
        so the views can be cleaned up correctly.

2016-02-05  Alex Christensen  <achristensen@webkit.org>

        Move NetworkDataTask to its own header and source files
        https://bugs.webkit.org/show_bug.cgi?id=153922

        Reviewed by Tim Horton.

        Also renamed NetworkSessionTaskClient to NetworkDataTaskClient.

        * NetworkProcess/NetworkDataTask.h: Added.
        (WebKit::NetworkDataTaskClient::~NetworkDataTaskClient):
        (WebKit::NetworkDataTask::create):
        (WebKit::NetworkDataTask::client):
        (WebKit::NetworkDataTask::pendingDownloadID):
        (WebKit::NetworkDataTask::pendingDownload):
        (WebKit::NetworkDataTask::setPendingDownloadID):
        (WebKit::NetworkDataTask::setPendingDownload):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient): Deleted.
        (WebKit::NetworkDataTask::create): Deleted.
        (WebKit::NetworkDataTask::client): Deleted.
        (WebKit::NetworkDataTask::pendingDownloadID): Deleted.
        (WebKit::NetworkDataTask::pendingDownload): Deleted.
        (WebKit::NetworkDataTask::setPendingDownloadID): Deleted.
        (WebKit::NetworkDataTask::setPendingDownload): Deleted.
        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: Added.
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::~NetworkDataTask):
        (WebKit::NetworkDataTask::scheduleFailure):
        (WebKit::NetworkDataTask::failureTimerFired):
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        (WebKit::NetworkDataTask::cancel):
        (WebKit::NetworkDataTask::resume):
        (WebKit::NetworkDataTask::suspend):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::takeDownloadID):
        (WebKit::NetworkDataTask::NetworkDataTask): Deleted.
        (WebKit::NetworkDataTask::~NetworkDataTask): Deleted.
        (WebKit::NetworkDataTask::scheduleFailure): Deleted.
        (WebKit::NetworkDataTask::failureTimerFired): Deleted.
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication): Deleted.
        (WebKit::NetworkDataTask::cancel): Deleted.
        (WebKit::NetworkDataTask::resume): Deleted.
        (WebKit::NetworkDataTask::suspend): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2016-02-05  Alex Christensen  <achristensen@webkit.org>

        Clean up Blob code
        https://bugs.webkit.org/show_bug.cgi?id=153910

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::NetworkBlobRegistry):
        (WebKit::NetworkBlobRegistry::registerFileBlobURL):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerFileBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2016-02-05  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Get rid of unused SPI declarations
        https://bugs.webkit.org/show_bug.cgi?id=153915

        Reviewed by Tim Horton.

        * Platform/spi/Cocoa/NSInvocationSPI.h: Removed NSInvocation SPI method declaration.

        * Platform/spi/ios/SafariServicesSPI.h: Removed.

        * UIProcess/API/Cocoa/WKSecurityOrigin.mm:
        (-[WKSecurityOrigin methodSignatureForSelector:]): Deleted.
        (-[WKSecurityOrigin forwardInvocation:]): Deleted.

        * UIProcess/ios/WKContentViewInteraction.mm: Removed unused #import.

        * WebKit2.xcodeproj/project.pbxproj: Removed reference to deleted header.

2016-02-04  Daniel Bates  <dabates@apple.com>

        WebKit for iOS Simulator fails to build with public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=153881

        Reviewed by Alex Christensen.

        Add version guards around SPI that is now API as of iOS SDK 9.2. Until we upgrade the iOS EWS
        and iOS buildbots to use the 9.2 SDK we need to keep these SPI declarations to avoid breaking
        the build.

        * Platform/spi/ios/UIKitSPI.h:

2016-02-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give nested inspectors their own process pool
        https://bugs.webkit.org/show_bug.cgi?id=153880
        <rdar://problem/24508310>

        Reviewed by Timothy Hatcher.

        When inspecting the inspector both inspectors were using the same
        Inspector process and sharing the same VM. This meant that profiling
        information was confusing (memory and JavaScript sampling) because
        it was showing data about both inspectors sharing the same process.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectorProcessPool):
        (WebKit::WebInspectorProxy::isInspectorProcessPool):
        Have two process pools. The main inspector process pool (1st level inspectors)
        and a nested inspector process pool (inspecting the inspector, only expected
        by WebKit developers).

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Pass the inspectionLevel to determine the appropriate pool to use.

2016-02-04  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(NETSCAPE_PLUGIN_API) build after r196053
        https://bugs.webkit.org/show_bug.cgi?id=153878

        Unreviewed buildfix.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.h:

2016-02-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r196067.

        Re-enable speculative revalidation now that we have measured
        the impact on the perf bots

        Reverted changeset:

        "Unreviewed, rolling out r195555."
        https://bugs.webkit.org/show_bug.cgi?id=153443
        http://trac.webkit.org/changeset/196067

2016-02-03  Alex Christensen  <achristensen@webkit.org>

        Report wasBlocked and cannotShowURL errors when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=153846

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        (WebKit::NetworkLoad::didSendData):
        (WebKit::NetworkLoad::wasBlocked):
        (WebKit::NetworkLoad::cannotShowURL):
        (WebKit::NetworkLoad::didReceiveResponseAsync):
        * NetworkProcess/NetworkLoad.h:
        NetworkDataTask is now RefCounted so we can protect it when reporting errors which delete the NetworkLoad.
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
        (WebKit::NetworkDataTask::create):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::takeDownloadID):
        (WebKit::NetworkDataTask::NetworkDataTask):
        Check the validity of the requested url and check if the port is allowed like we do in the ResourceHandle constructor.
        (WebKit::NetworkDataTask::~NetworkDataTask):
        Don't remove the task from the NetworkSession's map if we didn't make it because there was an error.
        (WebKit::NetworkDataTask::scheduleFailure):
        (WebKit::NetworkDataTask::failureTimerFired):
        Implemented like ResourceHandle's.
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        (WebKit::NetworkDataTask::resume):
        (WebKit::NetworkDataTask::suspend):
        Handle the failure timer like we do in ResourceHandle::setDefersLoading.

2016-02-02  Alex Christensen  <achristensen@webkit.org>

        Use proposed credentials in authentication challenges with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=153811

        Reviewed by Darin Adler.

        This fixes http/tests/xmlhttprequest/basic-auth-default.html

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        Use the proposed credential if there is one.  This matches behavior in
        ResourceHandle::tryHandlePasswordBasedAuthentication.

2016-02-03  Jessie Berlin  <jberlin@webkit.org>

        Build fix.

        [NSEvent context] has always returned nil. Replace uses with nullptr.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::postFakeMouseMovedEventForFlagsChangedEvent):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):

2016-02-03  Dan Bernstein  <mitz@apple.com>

        [iOS] Engineering builds use manual sandboxing, but don’t need to
        https://bugs.webkit.org/show_bug.cgi?id=153834

        Reviewed by Anders Carlsson.

        Now that engineering builds use the non-re-execing variant of XPC services, they can be
        statically sandboxed and no longer need to be manually sandboxed.

        * Configurations/DebugRelease.xcconfig: Don’t set WK_MANUAL_SANDBOXING_ENABLED to YES.
        * WebKit2.xcodeproj/project.pbxproj: Let Xcode make changes to the built product references.

2016-02-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r195555.

        Temporarily disable speculative revalidation to measure the
        impact on the bots

        Reverted changeset:

        "[WK2][NetworkCache] Enable speculative revalidation"
        https://bugs.webkit.org/show_bug.cgi?id=153443
        http://trac.webkit.org/changeset/195555

2016-02-03  Daniel Bates  <dabates@apple.com>

        REGRESSION (r194660): Legacy WebProcess crashes in ChildProcess::initializeSandbox()
        https://bugs.webkit.org/show_bug.cgi?id=153734
        <rdar://problem/24433179>

        Reviewed by Dan Bernstein.

        Fixes an issue where clients that used the legacy WebProcess bootstrapping process would crash.

        Additionally, only consider the extra initialization parameter user-directory-suffix for
        unsigned apps (e.g. WebKitTestRunner).

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

2016-02-03  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative buildfix after r195979.

        * PlatformMac.cmake:

2016-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Reduce IPC traffic due to view state changes
        https://bugs.webkit.org/show_bug.cgi?id=153745

        Reviewed by Sergio Villar Senin.

        Very often view state changes happen one after another in a very
        short period of time, even in the same run loop iteration. For
        example, when you switch to the web view window, the view is
        focused and the active window flag changes as well. In that case
        we are sending two messages to the web process and the page
        updates its status according to the new flags in two steps. So, we
        could group all state changes happening in the same run loop
        iteration and notify about them all in the next iteration. This
        also prevents unnecessary changes of state when we quickly go back
        to a previous state, for example in focus follows mouse
        configurations if you move the mouse outside the window and then
        inside the window again quickly.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate::_WebKitWebViewBasePrivate): Use
        VirewState::Flags to keep the web view state instead of
        boolean, and also to keep the flags that need to be updated. Use a
        timer to update web view state flags.
        (_WebKitWebViewBasePrivate::updateViewStateTimerFired): Call
        WebPageProxy::viewStateDidChange() and reset the flags that need
        to be updated.
        (webkitWebViewBaseScheduleUpdateViewState): Update the flags that
        need to be updated and schedule the timer if it's not active.
        (toplevelWindowFocusInEvent): Use the flags and schedule an update.
        (toplevelWindowFocusOutEvent): Ditto.
        (toplevelWindowStateEvent): Also mark the view as hidden when minimized.
        (webkitWebViewBaseSetToplevelOnScreenWindow): Connect to
        window-state-event instead of deprecated visibility-notify-event.
        (webkitWebViewBaseMap): Use the flags and schedule an update.
        (webkitWebViewBaseUnmap): Ditto.
        (webkitWebViewBaseSetFocus): Ditto.
        (webkitWebViewBaseIsInWindowActive): Use the flags.
        (webkitWebViewBaseIsFocused): Ditto
        (webkitWebViewBaseIsVisible): Ditto.
        (webkitWebViewBaseIsInWindow): Removed this since it was unused.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2016-02-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix incorrect ASSERT introduced in r196053.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePluginX11::paint): Ensure the plugin is not
        windowed if paint() is called.

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

        [UNIX] Add support for windowless NPAPI plugins with no UI in non X11 platforms
        https://bugs.webkit.org/show_bug.cgi?id=151992

        Reviewed by Darin Adler.

        We are currently disabling all plugins when running under wayland,
        for example. There are some plugins, like the one used by
        extensions.gnome.org, that don't do any rendering, so there's not
        reason not to support those plugins under wayland or any other
        unix non-x11 platform.
        X11 specific code has been moved to a new class NetscapePluginX11,
        only used under X11. The common code is in NetscapePluginUnix.cpp
        that will use the X11 implementatin only when needed and
        available. For windowed plugins we will fail the initialization
        under non-X11 plaforms, while for windowless plugins we will just
        return early from paint method.

        * PlatformEfl.cmake: Add new files to compilation.
        * PlatformGTK.cmake: Ditto.
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_set_enable_plugins): Do not disable plugins in wayland.
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore): Ditto.
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue): Use PlatformDisplay instead of
        NetscapePlugin::x11HostDisplay() and don't claim to support X11
        specific features under non-x11 platforms.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin): Remove X11 and GTK
        specific memebers that are now moved to a dedicated class NetscapePluginX11.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (WebKit::NetscapePlugin::frameRectInWindowCoordinates): Make this public.
        (WebKit::NetscapePlugin::clipRect): Add getter.
        (WebKit::NetscapePlugin::size): Ditto.
        (WebKit::NetscapePlugin::isWindowed): Ditto.
        (WebKit::NetscapePlugin::isVisible): Ditto.
        * WebProcess/Plugins/Netscape/unix/NetscapePluginUnix.cpp: Added.
        (WebKit::NetscapePlugin::platformPreInitialize):
        (WebKit::NetscapePlugin::platformPostInitialize):
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformInvalidate):
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        (WebKit::NetscapePlugin::platformVisibilityDidChange):
        (WebKit::NetscapePlugin::platformPaint):
        (WebKit::NetscapePlugin::platformHandleMouseEvent):
        (WebKit::NetscapePlugin::platformHandleWheelEvent):
        (WebKit::NetscapePlugin::platformSetFocus):
        (WebKit::NetscapePlugin::wantsPluginRelativeNPWindowCoordinates):
        (WebKit::NetscapePlugin::platformHandleMouseEnterEvent):
        (WebKit::NetscapePlugin::platformHandleMouseLeaveEvent):
        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
        * WebProcess/Plugins/Netscape/unix/NetscapePluginUnix.h: Added.
        (WebKit::NetscapePluginUnix::~NetscapePluginUnix):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::getPluginDisplay):
        (WebKit::displayDepth):
        (WebKit::x11HostDisplay):
        (WebKit::NetscapePluginX11::create):
        (WebKit::NetscapePluginX11::NetscapePluginX11):
        (WebKit::NetscapePluginX11::~NetscapePluginX11):
        (WebKit::NetscapePluginX11::windowType):
        (WebKit::NetscapePluginX11::window):
        (WebKit::NetscapePluginX11::geometryDidChange):
        (WebKit::NetscapePluginX11::visibilityDidChange):
        (WebKit::NetscapePluginX11::paint):
        (WebKit::initializeXEvent):
        (WebKit::NetscapePluginX11::handleMouseEvent):
        (WebKit::NetscapePluginX11::handleWheelEvent):
        (WebKit::NetscapePluginX11::setFocus):
        (WebKit::NetscapePluginX11::handleMouseEnterEvent):
        (WebKit::NetscapePluginX11::handleMouseLeaveEvent):
        (WebKit::NetscapePluginX11::handleKeyboardEvent):
        (WebKit::setCommonMouseEventFields): Deleted.
        (WebKit::setXKeyEventFields): Deleted.
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.h: Added.

2016-02-02  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove ENABLE(GLOBAL_FASTMALLOC_NEW) guard in WebMemorySamplerLinux.cpp
        https://bugs.webkit.org/show_bug.cgi?id=153812

        Reviewed by Darin Adler.

        r164261 already removed ENABLE_GLOBAL_FASTMALLOC_NEW guard though, WebMemorySamplerLinux
        is still using it. That's why EFL and GTK memory sampler don't show fast malloc memory use.

        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::WebMemorySampler::sampleWebKit): Deleted.

2016-02-02  Enrica Casucci  <enrica@apple.com>

        Provide handleKeyWebEvent with completion handler.
        https://bugs.webkit.org/show_bug.cgi?id=153806
        rdar://problem/24399218

        Reviewed by Tim Horton.

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

2016-02-02  Alex Christensen  <achristensen@webkit.org>

        Fix authentication with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=153779

        Reviewed by Brady Eidson.

        This fixes many tests, including http/tests/xmlhttprequest/cross-origin-authorization.html.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        NetworkingContexts are not used with NetworkSession.  NetworkSession is used instead.
        Pass allowStoredCredentials to the NetworkLoad so it knows whether to use a session with credential storage or not.
        (WebKit::NetworkLoad::didReceiveChallenge):
        Always call continueCanAuthenticateAgainstProtectionSpace because we might need credentials for synchronous requests.
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        Reject the protection space if we cannot authenticate against this protection space.
        If the protection space is not password-based (such as ServerTrustEvaluationRequested) and we can authenticate against this protection space,
        then perform default handling instead of asking the UI process for a password, which wouldn't mean anything.
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkSession.h:
        Use a NSURLSession with configuration.URLCredentialStorage = nil but with the same cookie storage for requests without credentials.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkSession::takeDownloadID):
        (WebKit::NetworkDataTask::NetworkDataTask):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::canAuthenticateAgainstProtectionSpace):
        Always send a reply message so we can always do the callbacks of NSURLSession delegates.

2016-02-01  Dave Hyatt  <hyatt@apple.com>

        Add a line grid pagination SPI to WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=153757
        <rdar://problem/23041598>

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPaginationLineGridEnabled):
        (WKPageGetPaginationLineGridEnabled):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController setPaginationLineGridEnabled:]):
        (-[WKBrowsingContextController paginationLineGridEnabled]):
        * UIProcess/API/Cocoa/WKBrowsingContextControllerPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _paginationLineGridEnabled]):
        (-[WKWebView _setPaginationLineGridEnabled:]):
       * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setPaginationLineGridEnabled):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::paginationLineGridEnabled):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setPaginationLineGridEnabled):
         WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2016-02-02  Adrien Plazas  <aplazas@igalia.com>

        [GTK] Several tests fail due to assert not reached in DrawingArea::dispatchAfterEnsuringDrawing()
        https://bugs.webkit.org/show_bug.cgi?id=153785

        Reviewed by Carlos Garcia Campos.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::dispatchAfterEnsuringDrawing):
        * UIProcess/DrawingAreaProxyImpl.h:

2016-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: High Level Memory Overview Instrument
        https://bugs.webkit.org/show_bug.cgi?id=153516
        <rdar://problem/24356378>

        Reviewed by Brian Burg.

        * Configurations/FeatureDefines.xcconfig:

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

        Fix CMake build.

        * PlatformMac.cmake:

2016-02-01  Dan Bernstein  <mitz@apple.com>

        More iOS build fix.

        * Platform/spi/ios/UIKitSPI.h:

2016-02-01  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * Platform/IPC/mac/ConnectionMac.mm:

2016-02-01  Dan Bernstein  <mitz@apple.com>

        Copy sandbox profiles during installhdrs.

        Reviewed by Anders Carlsson.

        * Configurations/SandboxProfiles.xcconfig:

2016-02-01  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove some more __has_include guards
        https://bugs.webkit.org/show_bug.cgi?id=153774

        Reviewed by Tim Horton.

        Guard private header includes with #if USE(APPLE_INTERNAL_SDK) rather than with __has_include.

        * Platform/IPC/mac/ConnectionMac.mm:
        * Platform/IPC/mac/ImportanceAssertion.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        * Shared/cf/ArgumentCodersCF.cpp:
        * Shared/mac/ChildProcessMac.mm:
        * Shared/mac/SecItemShim.cpp:

2016-02-01  Dan Bernstein  <mitz@apple.com>

        [Xcode] Let Xcode know that the WebKit XPC service products are XPC services
        https://bugs.webkit.org/show_bug.cgi?id=153773

        Reviewed by Tim Horton.

        * Configurations/BaseXPCService.xcconfig: Removed now-redundant definitions of
          MACH_O_TYPE and WRAPPER_EXTENSION.
        * WebKit2.xcodeproj/project.pbxproj: Updated product types.

2016-02-01  Tim Horton  <timothy_horton@apple.com>

        Crash using WKPDFView, in -[UIPDFPageView showContent]
        https://bugs.webkit.org/show_bug.cgi?id=153770
        <rdar://problem/20157864>

        Reviewed by Anders Carlsson.

        When scrolling, we throw away UIPDFPageViews, but forget to unhook their delegates.
        In some cases (also because their delegate is a raw pointer, not weak), they can call
        back into a deleted WKPDFView, causing a crash.

        * UIProcess/ios/WKPDFView.mm:
        (detachViewForPage):
        Add a helper to detach a page view, and unhook its delegates.

        (-[WKPDFView _clearPages]):
        (-[WKPDFView _revalidateViews]):
        Make use of the new helper.

2016-02-01  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/20150072> [iOS] Remove some file upload code only needed before iOS 9
        https://bugs.webkit.org/show_bug.cgi?id=153754

        Reviewed by Darin Adler.

        * Platform/spi/ios/UIKitSPI.h: Removed conditional forward declaration of SPI.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (photoLibraryIcon): Removed check for HAVE_WEBKIT_DOC_PICKER_ICONS, which is always true in
          iOS 9 and later.
        (cameraIcon): Ditto.
        (-[WKFileUploadPanel presentWithParameters:resultListener:]): Removed branch for when
          UIDocumentMenuViewController doesn’t respond to
          -_initIgnoringApplicationEntitlementForImportOfTypes:.
        (-[WKFileUploadPanel _showMediaSourceSelectionSheet]): Deleted now-unused method.

2016-02-01  Anders Carlsson  <andersca@apple.com>

        Stop linking to PassKit
        https://bugs.webkit.org/show_bug.cgi?id=153746

        Reviewed by Tim Horton.

        * Configurations/WebKit.xcconfig:

2016-02-01  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Get rid of WK_ macros for initializers
        https://bugs.webkit.org/show_bug.cgi?id=153744

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKFoundation.h: Removed definitions of WK_DESIGNATED_INITIALIZER and
          WK_UNAVAILABLE.

        * mac/postprocess-framework-headers.sh: Removed rules for rewriting the above macros. Also
          removed Foundation import that became unnecessary, and definitions that were only needed
          before iOS 8.

        Replaced instances of the above macros with their expansions.

        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKSecurityOrigin.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:

2016-02-01  Csaba Osztrogonác  <ossy@webkit.org>

        One more unreviewed speculative buildfix after r195755.

        * PlatformMac.cmake:

2016-02-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative buildfix after r195755.

        * PlatformMac.cmake:

2016-02-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative buildfix after r195795.

        * PlatformMac.cmake: Remove Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm.

2016-01-31  Darin Adler  <darin@apple.com>

        Get rid of most calls to String::upper; mostly replace them with convertToASCIIUppercase
        https://bugs.webkit.org/show_bug.cgi?id=153715

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        Use convertToASCIIUppercase on language names.

2016-01-31  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove __has_include guards around use of WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=153728

        Reviewed by Andy Estes.

        Guard WebKitAdditions includes with #if USE(APPLE_INTERNAL_SDK) rather than with __has_include.

        * Shared/Cocoa/WebKitAdditions.mm:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):

2016-01-31  Timothy Horton  <timothy_horton@apple.com>

        Include the right WebKitAdditions files
        <rdar://problem/24429804>

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

2016-01-31  Darin Adler  <darin@apple.com>

        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
        https://bugs.webkit.org/show_bug.cgi?id=153639

        Reviewed by Filip Pizlo.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm: Use ASCIICaseInsensitiveHash
        for MIME types. MIME types are all ASCII.

        * UIProcess/Plugins/PlugInAutoStartProvider.h: Use ASCIICaseInsensitiveHash for
        origins. Origin strings should use ASCII case insensitive matching and should not
        fold non-ASCII case.

        * WebProcess/WebPage/WebPage.h: Use ASCIICaseInsensitiveHash for MIME types.
        MIME types are all ASCII.

        * WebProcess/WebProcess.cpp:
        (WebKit::addCaseFoldedCharacters): Use ASCIICaseInsensitiveHash to hash plug-in
        origin strings. (See rationale above.)
        (WebKit::hashForPlugInOrigin): Updated comment.

2016-01-31  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Use std::make_unique<> when creating an unique_ptr object.
        https://bugs.webkit.org/show_bug.cgi?id=153705

        Reviewed by Darin Adler.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Use std::make_unique<> instead of RunLoopObserver::create().

2016-01-30  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Get rid of many WK_ macros for nullability
        https://bugs.webkit.org/show_bug.cgi?id=153718

        Sam Weinig reviewed an earlier version of this change, and Simon Fraser rubber-stamped this version.

        * Shared/API/Cocoa/WKFoundation.h: Removed definitions of WK_ASSUME_NONNULL_{BEGIN, END},
          WK_NULLABLE, WK_NULL_UNSPECIFIED, and WK_NULLABLE_PROPERTY. Removed the
          !__has_feature(assume_nonnull) case.

        * mac/postprocess-framework-headers.sh: Removed rules for rewriting the above macros. Also
          chanegd to rewrite WK_NULLABLE_SPECIFIER to the modern _Nullable instead of __nullable.

        Replaced instances of the above macros with their expansions.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h:
        * UIProcess/API/Cocoa/WKSecurityOrigin.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserScript.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h:
        * UIProcess/API/Cocoa/_WKElementInfo.h:
        * UIProcess/API/Cocoa/_WKPreviewElementInfo.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:

2016-01-30  Dan Bernstein  <mitz@apple.com>

        Reverted r195914, because at least one of the build.webkit.org builders still uses a compiler that doesn’t understand _Nullable.

        * Shared/API/Cocoa/WKFoundation.h:
        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h:
        * UIProcess/API/Cocoa/WKSecurityOrigin.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserScript.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h:
        * UIProcess/API/Cocoa/_WKElementInfo.h:
        * UIProcess/API/Cocoa/_WKPreviewElementInfo.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * mac/postprocess-framework-headers.sh:

2016-01-30  Commit Queue  <commit-queue@webkit.org>

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

        Caused frequent assertion failures on bots (Requested by ap on
        #webkit).

        Reverted changeset:

        "Replace CaseFoldingHash with ASCIICaseInsensitiveHash"
        https://bugs.webkit.org/show_bug.cgi?id=153639
        http://trac.webkit.org/changeset/195911

2016-01-30  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Get rid of WK_ macros for nullability
        https://bugs.webkit.org/show_bug.cgi?id=153718

        Reviewed by Sam Weinig.

        * Shared/API/Cocoa/WKFoundation.h: Removed definitions of WK_ASSUME_NONNULL_{BEGIN, END},
          WK_NULLABLE, WK_NULL_UNSPECIFIED, WK_NULLABLE_SPECIFIER, and WK_NULLABLE_PROPERTY.

        * mac/postprocess-framework-headers.sh: Removed rules for rewriting those macros.

        Replaced instances of those macros with their expansions, but using the modern _Nullable
        instead of __nullable:

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h:
        * UIProcess/API/Cocoa/WKSecurityOrigin.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserScript.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h:
        * UIProcess/API/Cocoa/_WKElementInfo.h:
        * UIProcess/API/Cocoa/_WKPreviewElementInfo.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:

2016-01-30  Darin Adler  <darin@apple.com>

        Replace CaseFoldingHash with ASCIICaseInsensitiveHash
        https://bugs.webkit.org/show_bug.cgi?id=153639

        Reviewed by Filip Pizlo.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm: Use ASCIICaseInsensitiveHash
        for MIME types. MIME types are all ASCII.

        * UIProcess/Plugins/PlugInAutoStartProvider.h: Use ASCIICaseInsensitiveHash for
        origins. Origin strings should use ASCII case insensitive matching and should not
        fold non-ASCII case.

        * WebProcess/WebPage/WebPage.h: Use ASCIICaseInsensitiveHash for MIME types.
        MIME types are all ASCII.

        * WebProcess/WebProcess.cpp:
        (WebKit::addCaseFoldedCharacters): Use ASCIICaseInsensitiveHash to hash plug-in
        origin strings. (See rationale above.)
        (WebKit::hashForPlugInOrigin): Updated comment.

2016-01-30  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        [GTK] Use configured python executable when executing generate-inspector-gresource-manifest.py
        https://bugs.webkit.org/show_bug.cgi?id=153712

        Reviewed by Michael Catanzaro.

        * PlatformGTK.cmake:

2016-01-29  Ada Chan  <adachan@apple.com>

        Enable VIDEO_PRESENTATION_MODE only in Debug and Release builds on Mac
        https://bugs.webkit.org/show_bug.cgi?id=153665

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2016-01-29  Dan Bernstein  <mitz@apple.com>

        Don’t use the “.Development” suffix for engineering builds targeting iOS devices, because the XPC cache is only aware of the unsuffixed service identifiers.

        Reviewed by Chris Dumez.

        * Configurations/DebugRelease.xcconfig:

2016-01-29  Enrica Casucci  <enrica@apple.com>

        One more iOS build fix.

        Unreviewed.

        * Platform/spi/ios/UIKitSPI.h:

2016-01-29  Enrica Casucci  <enrica@apple.com>

        iOS build fix after r195826.

        Unreviewed.

        * Platform/spi/ios/UIKitSPI.h:

2016-01-29  Enrica Casucci  <enrica@apple.com>

        Disable text interaction with pencil.
        https://bugs.webkit.org/show_bug.cgi?id=153655
        rdar://problem/24337778

        Reviewed by Tim Horton.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _createAndConfigureDoubleTapGestureRecognizer]):
        (-[WKContentView _singleTapCommited:]):

2016-01-29  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] WebProcess crashes when quickly attempting many DnD operations
        https://bugs.webkit.org/show_bug.cgi?id=138468

        Reviewed by Michael Catanzaro.

        Guard all the new DnD-related code under GTK_CHECK_VERSION #if's to
        make sure we don't bump the required version of GTK+ up to 3.16, and
        it's buildable again with GTK+ >= 3.6.

        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::DragAndDropHandler):
        (WebKit::DragAndDropHandler::startDrag):
        (WebKit::DragAndDropHandler::fillDragData):
        (WebKit::DragAndDropHandler::finishDrag):
        * UIProcess/gtk/DragAndDropHandler.h:

2016-01-28  Antti Koivisto  <antti@apple.com>

        Enable background tab suspension by default on OSX
        https://bugs.webkit.org/show_bug.cgi?id=153629
        <rdar://problem/24402895>

        Reviewed by Andreas Kling.

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

2016-01-28  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Use the non-Development variants of XPC services for development
        https://bugs.webkit.org/show_bug.cgi?id=152545

        Reviewed by Darin Adler.

        The purpose of the Development variants of the WebKit XPC services is to allow the service
        to link against the development WebKit dylibs rather than the system ones. Instead, we
        accomplish this here by including dyld environment load commands in the normal services
        when the WebKit dylibs are expected to be relocated. A new build setting,
        WK_RELOCATABLE_FRAMEWORKS, controls this.

        To make it easy to identify engineering builds of the services at runtime, they can be
        given a distinctive suffix. A new build setting, WK_XPC_SERVICE_SUFFIX, controls this.

        * Configurations/DebugRelease.xcconfig: Set WK_RELOCATABLE_FRAMEWORKS to YES and
          WK_XPC_SERVICE_SUFFIX to ".Development".

        * Configurations/BaseTarget.xcconfig: Make the quoted value of the WK_XPC_SERVICE_SUFFIX
          build setting available as a preprocessor macro.

        * Configurations/BaseXPCService.xcconfig:
          - Simplify the definition of INSTALL_PATH now that there are no Development variants.
          - Define WK_RELOCATABLE_FRAMEWORKS_LDFLAGS when building relocatable frameworks to include
            -dyld_env options setting DYLD_FRAMEWORK_PATH to point to the directory containing
            WebKit.framework and DYLD_LIBRARY_PATH to the framework’s Frameworks subdirectory. When
            not building relocatable frameworks, define WK_RELOCATABLE_FRAMEWORKS_LDFLAGS to include
            a -headerpad option allowing dyld environment load commands to be added after the fact.
          - Add WK_RELOCATABLE_FRAMEWORKS_LDFLAGS to OTHER_LDFLAGS.
          - Define WK_XPC_SERVICE_INSERT_LIBRARIES_DIR when building relocatable frameworks to be
            the path to the Frameworks subdirectory of the WebKit framework containing the service.
            When not building relocatable frameworks, define it to the absolute path of the
            Frameworks subdirectory of the installed WebKit framework.

        * Configurations/DatabaseService.xcconfig: Append WK_XPC_SERVICE_SUFFIX to PRODUCT_NAME,
          and remove no-longer-used definition of WK_XPC_SERVICE_VARIANT.
        * Configurations/NetworkService.xcconfig: Append WK_XPC_SERVICE_SUFFIX to PRODUCT_NAME, add
          WK_RELOCATABLE_FRAMEWORKS_LDFLAGS to OTHER_LDFLAGS, and remove no-longer-used definition
          of WK_XPC_SERVICE_VARIANT.
        * Configurations/PluginService.32.xcconfig: Ditto.
        * Configurations/PluginService.64.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Ditto.

        * Configurations/DatabaseService.Development.xcconfig: Removed.
        * Configurations/NetworkService.Development.xcconfig: Removed.
        * Configurations/PluginService.32.Development.xcconfig: Removed.
        * Configurations/PluginService.64.Development.xcconfig: Removed.
        * Configurations/WebContentService.Development.xcconfig: Removed.

        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseService.Development: Removed.
        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseService.Development/Info.plist: Removed.
        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseService/Info.plist: Set
          CFBundleIdentifier to PRODUCT_NAME in order to include the optional suffix.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development: Removed.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/Info-OSX.plist: Removed.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/Info-iOS.plist: Removed.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX-10.9-10.10.plist: Set
          CFBundleIdentifier to PRODUCT_NAME in order to include the optional suffix. Use
          WK_XPC_SERVICE_INSERT_LIBRARIES_DIR in the value of DYLD_INSERT_LIBRARIES.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX.plist: Set
          CFBundleIdentifier to PRODUCT_NAME in order to include the optional suffix.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-iOS.plist: Ditto.

        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64-10.9-10.10.Info.plist: Ditto.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development: Removed.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/Info.plist: Removed.

        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development: Removed.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info-OSX.plist: Removed.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info-iOS.plist: Removed.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX-10.9-10.10.plist: Set
          CFBundleIdentifier to PRODUCT_NAME in order to include the optional suffix. Use
          WK_XPC_SERVICE_INSERT_LIBRARIES_DIR in the value of DYLD_INSERT_LIBRARIES.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist: Set
          CFBundleIdentifier to PRODUCT_NAME in order to include the optional suffix.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist: Ditto.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm: Removed.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler): If stdout and stderr file descriptors are included in the
          bootstrap message, hook them up to the serviceâs stdout and stderr, like the Development
          services do.
        (main): Moved code from XPCServiceMain.Development.mm to handle the optional
          OverrideLanguages array.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::addDYLDEnvironmentAdditions): Addressed a FIXME.
        (WebKit::serviceName): Removed forDevelopment argument and .Development service names.
          Added WK_XPC_SERVICE_SUFFIX to the names.
        (WebKit::connectToService): Updated for removal of forDevelopment argument. Removed
          "framework-executable-path" key from the bootstrap message, because it was only used in
          the Development variants.
        (WebKit::connectToReExecService): Deleted.
        (WebKit::createService): Removed call to connectToReExecService. Instead pass forDevelopment
          to connectToService.

        * WebKit2.xcodeproj/project.pbxproj: Removed references to removed files. Removed targets
          for Development services. Removed Development services from script build phase that copies
          services into the framework in engineering builds, and made it respect
          WK_XPC_SERVICE_SUFFIX.

2016-01-28  Enrica Casucci  <enrica@apple.com>

        Should avoid navigation for some data detector urls.
        https://bugs.webkit.org/show_bug.cgi?id=153600

        Reviewed by Tim Horton.

        When a tap is commited, we normally generate a synthetic click if
        the node responds to click events.
        This patch adds the logic to prevent that from happening if the node
        is a data detector link with certain characteristics (calendar event, telephone, etc.).
        If this is the case, we compute the interaction information as position, send it
        over to the UI process and notify that we did not handle the tap.
        The page client is now also notified of this event and can show the data detector sheet if
        appropriate.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::didNotHandleTapAsClick):
        (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView clearSelection]):
        (-[WKContentView _didNotHandleTapAsClick:]):
        (-[WKContentView _positionInformationDidChange:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didNotHandleTapAsClick):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::commitPotentialTap):

2016-01-28  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Update Web Process sandbox profile for audiodeviceclock access
        https://bugs.webkit.org/show_bug.cgi?id=153571
        <rdar://problem/24134612>

        Reviewed by Alexey Proskuryakov.

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

2016-01-26  Ada Chan  <adachan@apple.com>

        Get WebVideoFullscreenManager and related classes to also compile for Mac platform
        with video presentation mode support.
        https://bugs.webkit.org/show_bug.cgi?id=153221

        Reviewed by Eric Carlson.

        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm:
        Enabled also for Mac with video presentation mode support.
        (-[WKLayerHostView makeBackingLayer]):
        Make sure this view uses CALayerHost for its layer.
        (WebKit::WebVideoFullscreenManagerProxy::invalidate):
        (WebKit::WebVideoFullscreenManagerProxy::createModelAndInterface):
        (WebKit::WebVideoFullscreenManagerProxy::ensureInterface):
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID):
        Replace WebCore::WebVideoFullscreenInterfaceAVKit with PlatformWebVideoFullscreenInterface.
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame):
        +[UIWindow _synchronizeDrawingAcrossProcesses] is not available on Mac.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::viewDidLeaveWindow):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        The code that creates m_videoFullscreenManager is now enabled also on Mac with video
        presentation mode support.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Enable the API related to the video fullscreen layer also on Mac with video presentation
        mode support.

        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        The code that creates m_videoFullscreenManager is now enabled also on Mac with video
        presentation mode support.

        * WebProcess/cocoa/WebVideoFullscreenManager.h:
        * WebProcess/cocoa/WebVideoFullscreenManager.messages.in:
        * WebProcess/cocoa/WebVideoFullscreenManager.mm:
        Enabled also for Mac with video presentation mode support.
        (WebKit::WebVideoFullscreenManager::supportsVideoFullscreen):
        Return false for now on Mac.

2016-01-28  Darin Adler  <darin@apple.com>

        Remove equalIgnoringCase since all callers really wanted equalIgnoringASCIICase
        https://bugs.webkit.org/show_bug.cgi?id=153411

        Reviewed by Ryosuke Niwa.

        * Shared/API/c/WKString.cpp:
        (WKStringIsEqualToUTF8CStringIgnoringCase): Use equalIgnoringASCIICase.
        This is a change in behavior for callers who passed non-ASCII letters to
        this function and expected case insensitive comparison.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::streamDidReceiveResponse): Use equalIgnoringASCIICase.
        No change in behavior because this is just checking a fixed ASCII MIME type.
        (WebKit::PDFPlugin::manualStreamDidReceiveResponse): Ditto.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::streamDidReceiveResponse): Ditto.
        (WebKit::PDFPlugin::manualStreamDidReceiveResponse): Ditto.

2016-01-27  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build after r195722.

        * PlatformMac.cmake:
        Include new file.

2016-01-27  Dan Bernstein  <mitz@apple.com>

        Fix other builds.

        * Configurations/WebKit.xcconfig:

2016-01-27  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Configurations/WebKit.xcconfig:

2016-01-27  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Remove unused accessibility related code
        https://bugs.webkit.org/show_bug.cgi?id=153543

        Reviewed by Darin Adler.

        Do not need to load external library to expose WebKit's
        accessibility tree. There have been changes in EFL/Elementary
        in terms of support of accessibility and we should follow those.

        * WebProcess/efl/WebProcessMainEfl.cpp:
        (eailLibraryPath): Deleted.
        (eail): Deleted.

2016-01-27  Enrica Casucci  <enrica@apple.com>

        Cache results of data detection in the UI process when load completes.
        https://bugs.webkit.org/show_bug.cgi?id=153560

        Reviewed by Tim Horton.

        This patch changes when the results of data detections are sent to the
        UIProcess. Before this change, they were only provided as part of
        InteractionInformationAtPosition, which is populated when long press
        gesture is triggered.
        We need to have the results available if the client wants to allow navigation
        to a data detector link, in order to allow them to retrieve the full url.
        With this change, we now send the results as soon as they are computed
        and keep them in the WebPageProxy object so that they can be fetched when
        necessary from a WKWebView private interface.

        * Shared/Cocoa/DataDetectionResult.h: Added.
        * Shared/Cocoa/DataDetectionResult.mm: Added.
        (WebKit::DataDetectionResult::encode):
        (WebKit::DataDetectionResult::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotLayerContentsForBackForwardListItem:]):
        (-[WKWebView _dataDetectionResults]):
        (-[WKWebView _didRelaunchProcess]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::setDataDetectionResult):
        (WebKit::WebPageProxy::saveRecentSearches):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::websiteDataStore):
        (WebKit::WebPageProxy::dataDetectionResults):
        (WebKit::WebPageProxy::scrollingCoordinatorProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView ensurePositionInformationIsUpToDate:]):
        (-[WKContentView _dataDetectionResults]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDataDetection):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoading):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        (WebKit::WebPage::setDataDetectionResults):
        (WebKit::WebPage::willCommitLayerTree):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::shouldExtendIncrementalRenderingSuppression):

2016-01-27  Anders Carlsson  <andersca@apple.com>

        Include the right WebKitAdditions files
        https://bugs.webkit.org/show_bug.cgi?id=153572

        Reviewed by Tim Horton.

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

2016-01-27  Daniel Bates  <dabates@apple.com>

        Move ContentSecurityPolicy.{cpp, h} to its own directory
        https://bugs.webkit.org/show_bug.cgi?id=153527
        <rdar://problem/24359892>

        Reviewed by Sam Weinig.

        Add ${WEBCORE_DIR}/page/csp to the list of WebKit2 include directories.

        * CMakeLists.txt:

2016-01-27  Anders Carlsson  <andersca@apple.com>

        Add WebKitAdditions extension points to WebCore, WebKit and WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=153550

        Reviewed by Sam Weinig.

        * DerivedSources.make:
        Add the ability for WebKitAdditions to add new message receivers.

        * Shared/Cocoa/WebKitAdditions.mm: Added.
        Add addition files.

        * Shared/WebCoreArgumentCoders.h:
        Add extension points.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::resetState):
        Add extension points.

        * UIProcess/WebPageProxy.h:
        Add extension points.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * WebProcess/WebPage/WebPage.cpp:
        Add extension points.

2016-01-27  Chris Dumez  <cdumez@apple.com>

        window.atob() should ignore spaces in input
        https://bugs.webkit.org/show_bug.cgi?id=153522
        <rdar://problem/24357822>

        Reviewed by Benjamin Poulain.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformSave):

2016-01-27  Ryosuke Niwa  <rniwa@webkit.org>

        Add API to access closed shadowRoot in InjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=153533

        Reviewed by Antti Koivisto.

        Added WKBundleScriptWorldMakeAllShadowRootsOpen to make all shadow roots open.
        This is needed to keep supporting certain browser-level features such as autofill.

        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp:
        (WKBundleScriptWorldMakeAllShadowRootsOpen): Added.
        * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.h:
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::InjectedBundleScriptWorld::makeAllShadowRootsOpen): Added.
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:

2016-01-27  Zhuo Li  <zachli@apple.com>

        Need ability to specify alternate image for AutoFill button in input fields.
        https://bugs.webkit.org/show_bug.cgi?id=153116.
        rdar://problem/23384854.

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (toAutoFillButtonType): Convert the WebKit AutoFill button type enum to WebCore AutoFill button
        type enum.
        (WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType): Added to be able to specify
        what the AutoFill button type is. None means the AutoFill button is not shown.
        (WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled): Deprecate this method.
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h: Declare an AutoFill button type enum.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutoFillButtonEnabled): None means the AutoFill button is not enabled.
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabledWithButtonType): Use the new parameter to specify
        what the AutoFill button type is.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h: Ditto.

2016-01-27  Dan Bernstein  <mitz@apple.com>

        More trying to fix the build.

        * Configurations/WebKit.xcconfig:

2016-01-27  Alexey Proskuryakov  <ap@apple.com>

        Remove ENABLE_CURRENTSRC
        https://bugs.webkit.org/show_bug.cgi?id=153545

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2016-01-27  Sam Weinig  <sam@webkit.org>

        Try to fix the build.

        * Configurations/WebKit.xcconfig:

2016-01-26  Sam Weinig  <sam@webkit.org>

        Attempt to force a rebuild.

        * DerivedSources.make:

2016-01-26  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r194557): Keyboard shortcuts stop working after the WKWebView is unparented and reparented
        https://bugs.webkit.org/show_bug.cgi?id=153492
        <rdar://problem/24138989>

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canBecomeFirstResponder]):
        (-[WKContentView becomeFirstResponder]):
        (-[WKContentView resignFirstResponder]):
        When WKWebView is unparented, WKContentView will attempt to resignFirstResponder upwards,
        first asking WKWebView. After r194557, WKWebView will accept first responder and forward
        it on to the WKContentView, which will happily accept it again, despite being the view
        that's trying to resign. This will cause us to completely lose first responder,
        where it was actually supposed to propagate up above WKWebView to the client.

        Keep track of when WKContentView is resigning first responder, and don't
        let it become first responder while it is doing so, breaking the cycle.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView canBecomeFirstResponder]):
        If the WKContentView is currently in the process of resigning first responder status,
        we shouldn't accept it, because clients expect to receive it.

2016-01-26  I-Ting Liu  <iting_liu@apple.com>

        Implement wildcard matching for plug-in policy host.
        https://bugs.webkit.org/show_bug.cgi?id=153090

        Reviewed by Darin Adler.

        WebPlatformStrategies decides the plug-in load policy for a host by looking
        for a matched hostname in the list of plug-in policies sent by Safari. This
        patch adds support for wildcard matching -- if there's a policy with hostname
        "*.example.com," the policy for "foo.example.com" would be replaced with that
        of "*.example.com" if there's no policy for this hostname. If there is more
        than one wildcard hostname, the host with the longest wildcard hostname will
        be used.

        This patch adds a helper function in StringUtilites that matches a string to
        another string, which may contain wildcard ('*') characters.

        * Platform/mac/StringUtilities.h:
        - Add WebKit::stringMatchesWildcardString.
        - Remove #if ENABLE(TELEPHONE_NUMBER_DETECTION) && PLATFORM(MAC) flag so that
        the compiler allows exposing StringUtilities.h.
        - Add #if __OBJC__ to allow the file to be included in WebPltformStrategies.cpp

        * Platform/mac/StringUtilities.mm:
        (WebKit::stringMatchesWildcardString):
        Return true if the entire first given String matches the second. The second string 
        may contain wildcard characters.
        (WebKit::wildcardRegexPatternString):
        Return the regex expression from a wildcard string by replacing the wildcard
        character ('*') with (".*") and escaping regular expression metacharacters.
        (WebKit::formattedPhoneNumberString):
        To expose StringUtilities.h for tests, we removed #if ENABLE(TELEPHONE_NUMBER_DETECTION)
        && PLATFORM(MAC) flag in the header. Add a function that returns nil for
        #if !(ENABLE(TELEPHONE_NUMBER_DETECTION) && PLATFORM(MAC)) to fix the removal
        of the flag in the header file.

        * WebKit2.xcodeproj/project.pbxproj:
        Change the file attribute of StringUtilities.h from Project to Private for
        testing in TestWebKitAPI.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::longestMatchedWildcardHostForHost):
        Return the wildcard hostname whose matched substring with the host is the longest.
        (WebKit::WebPlatformStrategies::replaceHostWithMatchedWildcardHost):
        Replace the look-up host with a matched wildcard host if there is a match and that
        the matched wildcard host's plug-in identifier is the same as that of the host.
        (WebKit::WebPlatformStrategies::pluginLoadClientPolicyForHost):
        Try to replace the look-up host with the wildcard host if there's no policy for
        the host. Restructure the function to reduce hashmap lookup.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        Declare the methods.

2016-01-26  Anders Carlsson  <andersca@apple.com>

        Remove -d flag from make invocation.

        * WebKit2.xcodeproj/project.pbxproj:

2016-01-26  Joseph Pecoraro  <pecoraro@apple.com>

        Generalize ResourceUsageData gathering to be used outside of ResourceUsageOverlay
        https://bugs.webkit.org/show_bug.cgi?id=153509
        <rdar://problem/24354291>

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Rename the ENABLE flag.

2016-01-26  Commit Queue  <commit-queue@webkit.org>

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

        broke more than it fixed (Requested by thorton on #webkit).

        Reverted changeset:

        "REGRESSION (r194557): Keyboard shortcuts stop working after
        the WKWebView is unparented and reparented"
        https://bugs.webkit.org/show_bug.cgi?id=153492
        http://trac.webkit.org/changeset/195602

2016-01-26  Anders Carlsson  <andersca@apple.com>

        WebKitAdditions should be able to modify derived source rules
        https://bugs.webkit.org/show_bug.cgi?id=153514

        Reviewed by Tim Horton.

        * Configurations/BaseTarget.xcconfig:
        * Configurations/WebKit.xcconfig:
        Set WEBKITADDITIONS_HEADER_SEARCH_PATHS.

        * DerivedSources.make:
        Move the path computation earlier and include WebKitDerivedSourcesAdditions.make.

        * WebKit2.xcodeproj/project.pbxproj:
        Pass our WebKitAdditions paths as include paths to make.

2016-01-26  Anders Carlsson  <andersca@apple.com>

        Add a private WKUIDelegate method for getting a presenting view controller for a WKWebView on iOS
        https://bugs.webkit.org/show_bug.cgi?id=153510

        Reviewed by Dan Bernstein.

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

2016-01-26  Dean Jackson  <dino@apple.com>

        [iOS] Documents without an explicit width should not get fast tapping
        https://bugs.webkit.org/show_bug.cgi?id=153465
        <rdar://problem/23962529>

        Reviewed by Simon Fraser (and Wenson Hseih).

        As the title says, documents that do not set a viewport should
        not get the fast click behaviour. There were complaints that we broke
        double-tap to scroll in ImageDocuments where the image was narrow and long.

        The fix is to just keep a flag that tells the UI process if the
        width was explicit. However, it turns out that those ImageDocuments
        are given an explicit device-width, which is fine for scaling but
        really should behave as auto for fast tapping. So we also need
        to tell the UIProcess if the viewport arguments came from an
        ImageDocument.

        * Shared/mac/RemoteLayerTreeTransaction.h: Add two new flags into
        the transaction.
        (WebKit::RemoteLayerTreeTransaction::viewportMetaTagWidthWasExplicit):
        (WebKit::RemoteLayerTreeTransaction::setViewportMetaTagWidthWasExplicit):
        (WebKit::RemoteLayerTreeTransaction::viewportMetaTagCameFromImageDocument):
        (WebKit::RemoteLayerTreeTransaction::setViewportMetaTagCameFromImageDocument):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::description):

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]): Notice whether or not the viewport
        width was explicit.
        (-[WKWebView _allowsDoubleTapGestures]): Return yes if the width
        was not explicit, or if the viewport came from an ImageDocument.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):

2016-01-26  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r194557): Keyboard shortcuts stop working after the WKWebView is unparented and reparented
        https://bugs.webkit.org/show_bug.cgi?id=153492
        <rdar://problem/24138989>

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canBecomeFirstResponder]):
        (-[WKContentView becomeFirstResponder]):
        (-[WKContentView resignFirstResponder]):
        When WKWebView is unparented, WKContentView will attempt to resignFirstResponder upwards,
        first asking WKWebView. After r194557, WKWebView will accept first responder and forward
        it on to the WKContentView, which will happily accept it again, despite being the view
        that's trying to resign. This will cause us to completely lose first responder,
        where it was actually supposed to propagate up above WKWebView to the client.

        Keep track of when WKContentView is resigning first responder, and don't
        let it become first responder while it is doing so, breaking the cycle.

2016-01-25  Ada Chan  <adachan@apple.com>

        Move WebVideoFullscreenManager and related classes from iOS specific folders to cocoa folders
        https://bugs.webkit.org/show_bug.cgi?id=153473

        Reviewed by Eric Carlson.

        * DerivedSources.make:
        Add new paths.
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.h: Renamed from Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h.
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.messages.in: Renamed from Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in.
        * UIProcess/Cocoa/WebVideoFullscreenManagerProxy.mm: Renamed from Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm.
        (WebKit::WebVideoFullscreenManagerProxy::setSeekableRangesVector):
        Fix a style error by moving the opening curly brace to the same line as the for statement.
        * WebKit2.xcodeproj/project.pbxproj:
        Update due to changes to the file locations.
        * WebProcess/cocoa/WebVideoFullscreenManager.h: Renamed from Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.h.
        * WebProcess/cocoa/WebVideoFullscreenManager.messages.in: Renamed from Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in.
        * WebProcess/cocoa/WebVideoFullscreenManager.mm: Renamed from Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm.
        (WebKit::WebVideoFullscreenInterfaceContext::setSeekableRanges):
        Fix a style error by adding a missing space after a comma.

2016-01-26  Daniel Bates  <dabates@apple.com>

        WebKitTestRunner: Credential cache is not cleared between tests
        https://bugs.webkit.org/show_bug.cgi?id=153407
        <rdar://problem/24280834>

        Reviewed by Alexey Proskuryakov.

        Expose SPI to call CredentialStorage::clearCredentials() on the default network storage
        session to clear cached credentials.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::clearCachedCredentials): Added.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in: Added message ClearCachedCredentials().
        * UIProcess/API/C/WKContext.cpp:
        (WKContextClearCachedCredentials): Added.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::clearCachedCredentials): Notify all web processes and the
        network process to clear cached credentials.
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::clearCachedCredentials): Clear cached credentials in the default
        network storage session.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Added message ClearCachedCredentials().

2016-01-26  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] WebProcess crashes when quickly attempting many DnD operations
        https://bugs.webkit.org/show_bug.cgi?id=138468

        Reviewed by Michael Catanzaro.

        Do not allow different DnD operations over the same element at the
        same time, so that any new attempt to DnD an element happening before
        a previous attempt has ended will take precedence, cancelling the older
        operation before going ahead with the new one.

        This is consistent with how WebCore::EventHandler handles DnD operations,
        preventing the web process from crashing in scenarios where the user might
        try to perform many DnD operations over the same element very quickly.

        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::DragAndDropHandler): Initialized new member.
        (WebKit::DragAndDropHandler::startDrag): Ensure a previous DnD operation
        is cancelled before handling the new one that has just started.
        (WebKit::DragAndDropHandler::fillDragData): Protect against calling this
        function from webkitWebViewBaseDragDataGet for already cancelled operations.
        (WebKit::DragAndDropHandler::finishDrag): Protect against calling this
        function from webkitWebViewBaseDragEnd for already cancelled operations.
        * UIProcess/gtk/DragAndDropHandler.h:

2016-01-25  Enrica Casucci  <enrica@apple.com>

        Add support for DataDetectors in WK (iOS).
        https://bugs.webkit.org/show_bug.cgi?id=152989
        rdar://problem/22855960

        Reviewed by Tim Horton.

        Moving InteractionInformationAtPosition files to platform folder,
        since this is only used on iOS and changing from .cpp to .mm.
        The structure is extended to include data detection specific fields
        and the relevant encode/decode functions have been updated to
        handle the new fields.
        The patch also adds a new WKUIDelegatePrivate method to allow
        the client to provide additional context for data detection actions.

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/InteractionInformationAtPosition.cpp: Removed.
        * Shared/InteractionInformationAtPosition.h: Removed.
        * Shared/ios/InteractionInformationAtPosition.h: Copied from Shared/InteractionInformationAtPosition.h.
        * Shared/ios/InteractionInformationAtPosition.mm: Copied from Shared/InteractionInformationAtPosition.cpp.
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionSheetAssistantDidStopInteraction:]):
        (-[WKContentView dataDetectionContextForActionSheetAssistant:]):
        (-[WKContentView selectedTextForActionSheetAssistant:]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2016-01-25  Commit Queue  <commit-queue@webkit.org>

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

        regressed performance of test bots by ~6% (Requested by dydz
        on #webkit).

        Reverted changeset:

        "WebKitTestRunner: Credential cache is not cleared between
        tests"
        https://bugs.webkit.org/show_bug.cgi?id=153407
        http://trac.webkit.org/changeset/195543

2016-01-25  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Enable speculative revalidation
        https://bugs.webkit.org/show_bug.cgi?id=153443
        <rdar://problem/23092196>

        Reviewed by Antti Koivisto.

        Enable speculative revalidation to better evaluate performance and
        robustness.

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

2016-01-25  Beth Dakin  <bdakin@apple.com>

        Handle soft spaces after accepted candidates
        https://bugs.webkit.org/show_bug.cgi?id=153331
        -and corresponding-
        rdar://problem/23958418

        Reviewed by Darin Adler.

        New member variable m_softSpaceRange keeps track to the NSRange of a soft 
        space if the last text that was inserted has a soft space at the end.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):

        The space at the end of candidates is a soft space. If that space exists, 
        cache the range of the space in m_softSpaceRange.
        (WebKit::WebViewImpl::handleAcceptedCandidate):

        When new text is inserted, find out if it is being inserted right after a 
        soft space. If it is, then [NSSpellChecker deletesAutospaceBeforeString] will 
        tell us if the space needs to be removed. If that is the case, then set the 
        replacementString to the soft space.
        (WebKit::WebViewImpl::insertText):

2016-01-25  Daniel Bates  <dabates@apple.com>

        WebKitTestRunner: Credential cache is not cleared between tests
        https://bugs.webkit.org/show_bug.cgi?id=153407
        <rdar://problem/24280834>

        Reviewed by Brady Eidson.

        Add SPI to call NetworkStorageSession::switchToNewTestingSession() to create a new testing session.
        The new testing session will have an empty credential cache.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::switchToNewTestingSession): Added.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in: Added message SwitchToNewTestingSession().
        * UIProcess/API/C/WKContext.cpp:
        (WKContextResetTestingNetworkSession): Added.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::resetTestingNetworkSession): Added.
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::switchToNewTestingSession): Added.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Added message SwitchToNewTestingSession().

2016-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        document.createElement should be able to create a custom element
        https://bugs.webkit.org/show_bug.cgi?id=153173

        Reviewed by Darin Adler.

        Use createElementForBindings here since this is for SPI.

        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        (-[WKDOMDocument createElement:]):
        (-[WKDOMDocument createTextNode:]):

2016-01-24  Alex Christensen  <achristensen@webkit.org>

        Report upload progress to NetworkLoadClient when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=153388

        Reviewed by Darin Adler.

        This fixes http/tests/xmlhttprequest/upload-onload-event.html and a few other tests.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didBecomeDownload):
        (WebKit::NetworkLoad::didSendData):
        (WebKit::NetworkLoad::didReceiveResponseAsync):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate initWithNetworkSession:]):
        (-[WKNetworkSessionDelegate URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:]):
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):

2016-01-24  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Reduce PassRefPtr uses in dom - 4
        https://bugs.webkit.org/show_bug.cgi?id=153270

        Reviewed by Darin Adler.

        As a step to remove PassRefPtr uses, this patch reduces the uses in WebCore/dom.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::focusPluginElement):

2016-01-23  Alex Christensen  <achristensen@webkit.org>

        CMake build fix after r195494.

        * PlatformMac.cmake:
        WebKit2 needs to be able to find DataDetectors.h.

2016-01-23  Alex Christensen  <achristensen@webkit.org>

        Use credentials from a URL with NetworkSession like we did with ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=153328

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        createDataTaskWithRequest is being removed, so use std::make_unique<NetworkDataTask> directly instead.
        Also, create the task even if we are deferring loading.  Don't call resume if we are deferring loading.
        * NetworkProcess/NetworkSession.h:
        Callbacks are not just used in NetworkSessionTaskClient, so declare them outside.
        The NetworkDataTask now takes a ResourceRequest so we can strip its credentials.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        Try credentials stored with the NetworkDataTask before asking the client for credentials.
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkSession::takeDownloadID):
        (WebKit::NetworkDataTask::NetworkDataTask):
        Strip the credentials from the url before creating the task because we do not know the authentication type.
        We will use these credentials when a challenge is received.
        (WebKit::NetworkDataTask::~NetworkDataTask):
        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
        If we have credentials from the initial URL, try using them if it is appropriate.
        (WebKit::NetworkDataTask::cancel):
        (WebKit::NetworkSession::createDataTaskWithRequest): Deleted.
        * Shared/Authentication/AuthenticationManager.h:

2016-01-22  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/24304228> REGRESSION (r184215): Staged XPC services load non-staged shims
        https://bugs.webkit.org/show_bug.cgi?id=153389

        Reviewed by Alexey Proskuryakov.

        * Configurations/Shim.xcconfig: Don’t override the install name when using a staged install path.

2016-01-22  Enrica Casucci  <enrica@apple.com>

        Add support for DataDetectors in WK (iOS).
        https://bugs.webkit.org/show_bug.cgi?id=152989
        rdar://problem/22855960

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (fromWKDataDetectorTypes): Changed parameter to uint64_t to
        successfully compare against WKDataDetectorTypeAll.

2016-01-17  Ada Chan  <adachan@apple.com>

        Add a mode parameter to MediaControllerInterface::supportsFullscreen() and ChromeClient::supportsVideoFullscreen().
        https://bugs.webkit.org/show_bug.cgi?id=153220

        Reviewed by Eric Carlson.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::supportsVideoFullscreen):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2016-01-22  Tim Horton  <timothy_horton@apple.com>

        Reproducible "Unhanded web process message 'WebUserContentController:AddUserScripts'" and friends
        https://bugs.webkit.org/show_bug.cgi?id=153193
        <rdar://problem/24222034>

        Reviewed by Darin Adler.

        The WebPageProxy constructor assumes that if its WebProcess is already running,
        it can add itself to the existing WebUserContentController(Proxy) and all will be well.

        However, if the API client constructs a different WKUserContentController for two views,
        and forces them both into the same process, WebPageProxy's constructor sends a message
        with a WebUserContentController ID that doesn't exist yet on the WebProcess side
        (because createWebPage, which usually brings it up, hasn't happened yet), and we 
        drop the message on the floor (and get the aforementioned logging).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::initializeWebPageAfterProcessLaunch):
        Instead of connecting our WebUserContentControllerProxy and WebVisitedLinkStoreProxy
        to our WebProcessProxy in the constructor, when doing so might send messages
        to the WebProcess that arrive before their corresponding WebProcess objects have
        been created, do this in initializeWebPageAfterProcessLaunch, which always runs
        during-or-after inititalizeWebPage (and always after the CreateWebPage message goes out).

        (WebKit::WebPageProxy::initializeWebPage):
        Mark us as needing initializeWebPageAfterProcessLaunch run, and run it right now
        if the WebProcess is already up.
        (WebKit::WebPageProxy::processDidFinishLaunching):
        If the WebProcess wasn't up at the end of initializeWebPage, we'll eventually end up here
        after it is launched, and will initializeWebPageAfterProcessLaunch.

        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        If the WebProcess dies, we don't want to initializeWebPageAfterProcessLaunch
        until after initializeWebPage runs again, so make sure the flag isn't set.

        * UIProcess/WebPageProxy.h:

2016-01-22  Darin Adler  <darin@apple.com>

        Reduce use of equalIgnoringCase to just ignore ASCII case
        https://bugs.webkit.org/show_bug.cgi?id=153266

        Reviewed by Ryosuke Niwa.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::hasOnlySecureContent): Use the protocolIs
        function from WebCore instead of calling startsWith.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::initialize): Use equalLettersIgnoringASCIICase.

2016-01-21  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Tooltips do not honor some types of obscuring windows
        https://bugs.webkit.org/show_bug.cgi?id=153263
        <rdar://problem/21423972>

        Reviewed by Simon Fraser.

        Recognize that the current WebView is obscured by comparing the current event's Window Number against
        the Window Number of the current WebView. If they don't match, something is in the way.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::windowIsFrontWindowUnderMouse): Added.
        * UIProcess/PageClient.h:
        (WebKit::PageClient::windowIsFrontWindowUnderMouse):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMouseEvent): Check if the current WebView is obscured. If it
        is, clear the tooltip and return.
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::windowIsFrontWindowUnderMouse): Added.

2016-01-22  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Remove PassRefPtr from ResourceRequest and FormData
        https://bugs.webkit.org/show_bug.cgi?id=153229

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::decode):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):

2016-01-21  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r168244): Content in horizontal-bt page is offset such that only the end is viewable and there is a white gap at the top
        https://bugs.webkit.org/show_bug.cgi?id=136019

        Reviewed by Dan Bernstein.

        Now call frameView.positionForRootContentLayer(), and add a FIXME questioning the
        behavior in horizontal b-t documents. However, this code isn't hit now that we always
        do extended backgrounds, so never have shadow layers.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::shadowLayerPositionForFrame):

2016-01-21  Dean Jackson  <dino@apple.com>

        Move _allowsDoubleTapGestures implementation out of category
        https://bugs.webkit.org/show_bug.cgi?id=153329
        <rdar://problem/24289768>

        Reviewed by Simon Fraser.

        We were generating a linker warning because the implementation
        was located inside the WKPrivate category.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _allowsDoubleTapGestures]): Move this out of
        the category.

2016-01-21  Dean Jackson  <dino@apple.com>

        [iOS] Crash in _endPotentialTapAndEnableDoubleTapGesturesIfNecessary
        https://bugs.webkit.org/show_bug.cgi?id=153326
        <rdar://problem/24264339>

        Reviewed by Anders Carlsson.

        UIKit's UIGestureRecognizer could call back into the WKContentView
        after the associated WKWebView has disappeared. The fix is to
        explicitly null the WKWebView reference as we deallocate.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView dealloc]): Tell the WKContentView we are going away.
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _webViewDestroyed]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _endPotentialTapAndEnableDoubleTapGesturesIfNecessary]):
        Only do something if the WKWebView is still around.

2016-01-21  Beth Dakin  <bdakin@apple.com>

        Add the ability to update WebKitAdditions to WK2
        https://bugs.webkit.org/show_bug.cgi?id=153320
        -and corresponding-
        rdar://problem/23639629

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::createWeakPtr):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateWebViewImplAdditions):
        (WebKit::WebViewImpl::showCandidates):
        (WebKit::WebViewImpl::webViewImplAdditionsWillDestroyView):
        (WebKit::trackingAreaOptions):
        (WebKit::WebViewImpl::~WebViewImpl):
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::selectionDidChange):
        (WebKit::WebViewImpl::handleRequestedCandidates):
        (WebKit::textCheckingResultFromNSTextCheckingResult):

2016-01-19  Ada Chan  <adachan@apple.com>

        Make it possible to enable VIDEO_PRESENTATION_MODE on other Cocoa platforms.
        https://bugs.webkit.org/show_bug.cgi?id=153218

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2016-01-20  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build after r195300.

        * PlatformMac.cmake:
        Include editing/mac to find DataDetection.h.

2016-01-20  Alex Christensen  <achristensen@webkit.org>

        Ask UI Process before sending redirect requests when downloading
        https://bugs.webkit.org/show_bug.cgi?id=153041

        Reviewed by Darin Adler.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::DownloadManager::continueWillSendRequest):
        (WebKit::DownloadManager::convertHandleToDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::willSendRedirectedRequest):
        (WebKit::PendingDownload::continueWillSendRequest):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkProcess::continueWillSendRequest):
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::didCancel):
        (API::DownloadClient::processDidCrash):
        (API::DownloadClient::canAuthenticateAgainstProtectionSpace):
        (API::DownloadClient::willSendRequest):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        (WebKit::DownloadProxy::canAuthenticateAgainstProtectionSpace):
        (WebKit::DownloadProxy::willSendRequest):
        (WebKit::DownloadProxy::didReceiveResponse):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:

2016-01-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.11.4 release.

        * gtk/NEWS: Add release notes for 2.11.4.

2016-01-19  Enrica Casucci  <enrica@apple.com>

        Add support for DataDetectors in WK (iOS).
        https://bugs.webkit.org/show_bug.cgi?id=152989
        rdar://problem/22855960

        Reviewed by Tim Horton.

        This is the first step toward implementing Data Detectors support
        in WK2. The patch adds a new property to the configuration
        object to indicate the type of detection desired and propagates
        to the WebProcess.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (fromWKDataDetectorTypes):
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-01-19  Commit Queue  <commit-queue@webkit.org>

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

        enrica wants more time to fix Windows (Requested by thorton on
        #webkit).

        Reverted changeset:

        "Add support for DataDetectors in WK (iOS)."
        https://bugs.webkit.org/show_bug.cgi?id=152989
        http://trac.webkit.org/changeset/195300

2016-01-19  Enrica Casucci  <enrica@apple.com>

        Add support for DataDetectors in WK (iOS).
        https://bugs.webkit.org/show_bug.cgi?id=152989
        rdar://problem/22855960

        Reviewed by Tim Horton.

        This is the first step toward implementing Data Detectors support
        in WK2. The patch adds a new property to the configuration
        object to indicate the type of detection desired and propagates
        to the WebProcess.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/Cocoa/WebPageCocoa.mm: Added.
        (WebKit::WebPage::fromWKDataDetectorTypes):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:

2016-01-19  Commit Queue  <commit-queue@webkit.org>

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

        purportedly caused a significant memory regression and want to
        see if that is true (Requested by thorton on #webkit).

        Reverted changeset:

        "First in-window viewStateChange synchronously blocks despite
        not previously being in-window"
        https://bugs.webkit.org/show_bug.cgi?id=147344
        http://trac.webkit.org/changeset/187471

2016-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Runtime critical warnings when loading a URL after a session restore
        https://bugs.webkit.org/show_bug.cgi?id=153233

        Reviewed by Michael Catanzaro.

        This happens when doing a normal load after restoring the back
        forward list from session state and the list contained forward
        items. In that case the forward items are removed from the list
        and we try to reference a WebBackForwardListItem wrapper that
        hasn't been created. We create the wrappers on demand, and when
        the back forward list is populated from session state, items are
        added to the list without creating their wrappers. That was not
        possible before, and that's why we assumed that any item that is
        removed from the list should have a wrapper already created.

        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        (webkitBackForwardListChanged): If we don't have a wrapper for the
        removed item, create a new one to be passed to the signal, but
        without adding it to the map.

2016-01-19  Ryosuke Niwa  <rniwa@webkit.org>

        CharacterData::setData doesn't need ExceptionCode as an out argument
        https://bugs.webkit.org/show_bug.cgi?id=153225

        Reviewed by Antti Koivisto.

        * WebProcess/InjectedBundle/API/mac/WKDOMText.mm:
        (-[WKDOMText setData:]):

2016-01-18  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Remove wkView() from EwkView
        https://bugs.webkit.org/show_bug.cgi?id=152604

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkViewEventHandler<EVAS_CALLBACK_SHOW>::handleEvent):
        (EwkViewEventHandler<EVAS_CALLBACK_HIDE>::handleEvent):
        (EwkView::EwkView):
        (EwkView::create):
        (EwkView::wkPage):
        (EwkView::isVisible):
        (EwkView::setVisible):
        (EwkView::setDeviceScaleFactor):
        (EwkView::deviceSize):
        (EwkView::displayTimerFired):
        (EwkView::setViewportPosition):
        (EwkView::requestExitFullScreen):
        (EwkView::contentsSize):
        (EwkView::setThemePath):
        (EwkView::feedTouchEvent):
        (EwkView::createGLSurface):
        (EwkView::showContextMenu):
        (EwkView::requestPopupMenu):
        (EwkView::webView):
        (EwkView::handleEvasObjectCalculate):
        (EwkView::handleEvasObjectColorSet):
        (EwkView::handleEwkViewFocusIn):
        (EwkView::handleEwkViewFocusOut):
        (EwkView::feedTouchEvents):
        (EwkView::takeSnapshot):
        (EwkView::scrollBy):
        (EwkView::setBackgroundColor):
        (EwkView::backgroundColor):
        * UIProcess/API/efl/EwkView.h:
        (EwkView::wkView): Deleted.
        * UIProcess/API/efl/GestureRecognizer.cpp:
        (WebKit::GestureHandler::handleSingleTap):
        * UIProcess/API/efl/ewk_view.cpp:
        (EWKViewCreate):
        (EWKViewGetWKView):
        (ewk_view_fullscreen_exit):
        (ewk_view_layout_fixed_set):
        (ewk_view_layout_fixed_get):
        (ewk_view_layout_fixed_size_set):
        (ewk_view_layout_fixed_size_get):
        (ewk_view_bg_color_get):
        (ewk_view_contents_size_get):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::setPageScaleFactor):
        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::webProcessDidRelaunch):
        (WebKit::ViewClientEfl::ViewClientEfl):
        (WebKit::ViewClientEfl::~ViewClientEfl):

2016-01-18  Zan Dobersek  <zdobersek@igalia.com>

        Sink the Vector<uint8_t> buffer into the SerializedScriptValue constructor
        https://bugs.webkit.org/show_bug.cgi?id=142634

        Reviewed by Darin Adler.

        Update API::SerializedScriptValue::adopt() to take in a Vector<uint8_t>
        rvalue, moving it into the WebCore::SerializedScriptValue::adopt() call.

        Update other places that are affected by the SerializedScriptValue changes.

        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):
        * Shared/API/APISerializedScriptValue.h:
        (API::SerializedScriptValue::adopt):
        * Shared/UserData.cpp:
        (WebKit::UserData::decode):
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::didPostMessage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scriptValueCallback):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::applyFrameState):

2016-01-18  Olivier Blin  <olivier.blin@softathome.com>

        [EFL][GTK][WK2] Fix UIProcess build with GStreamer and without VIDEO
        https://bugs.webkit.org/show_bug.cgi?id=153135

        Reviewed by Michael Catanzaro.

        GStreamer builds fail when WebAudio is enabled but VIDEO disabled.

        This change makes the flag more consistent around the
        decicePolicyForInstallMissingMediaPluginsPermissionRequest() method:
        ENABLE(VIDEO) && USE(GSTREAMER) everywhere, while the code used to
        test either one or the other.

        This does not enable InstallMissingMediaPlugins for WebAudio, since no
        code makes use of this in WebKitWebAudioSourceGStreamer.

        It also fixes a naming typo for the following method:
        decidePolicyForInstallMissingMediaPluginsPermissionRequest()

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::decidePolicyForInstallMissingMediaPluginsPermissionRequest):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/efl/WebViewEfl.h:
        * UIProcess/gstreamer/WebPageProxyGStreamer.cpp:
        (WebKit::WebPageProxy::requestInstallMissingMediaPlugins):

2016-01-17  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        Add quotes around ${CMAKE_SHARED_LINKER_FLAGS} in case it is unset
        https://bugs.webkit.org/show_bug.cgi?id=153175

        Reviewed by Michael Catanzaro.

        * PlatformGTK.cmake:

2016-01-16  Jeremy Huddleston Sequoia  <jeremyhu@apple.com>

        Remove a now-irrelevant darwin build hack
        https://bugs.webkit.org/show_bug.cgi?id=153117

        Reviewed by Michael Catanzaro.

        * PlatformGTK.cmake:

2016-01-16  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] Replace deprecated -[UIDocumentMenuViewController
        _setIgnoreApplicationEntitlementForImport:]

        <https://bugs.webkit.org/show_bug.cgi?id=145690>
        <rdar://problem/20636577>

        Reviewed by Brent Fulgham.

        * Platform/spi/ios/UIKitSPI.h:
        Replace deprecated SPI with newer SPI.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel presentWithParameters:resultListener:]):
        (-[WKFileUploadPanel _showDocumentPickerMenu]):
        Ditto.

2016-01-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unreviewed. Fix a typo in an API comment.

        * UIProcess/API/gtk/WebKitWebViewSessionState.cpp:

2016-01-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GVariant runtime critical errors when encoding session data
        https://bugs.webkit.org/show_bug.cgi?id=153130

        Reviewed by Michael Catanzaro.

        It happens when the FrameState has children, because the recursive
        serialization is wrong. Also fix serialization of
        documentSequenceNumber and itemSequenceNumber that are gint64, not
        guint64.

        * UIProcess/API/gtk/WebKitWebViewSessionState.cpp:
        (encodeFrameState): Let the caller open/init the given
        builder. Use a new builder to encode child states recursively.
        (encodePageState): Do the builder open/close for the FrameState encoding.
        (decodeFrameState): Get the variant of every child.

2016-01-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix internal Windows build
        https://bugs.webkit.org/show_bug.cgi?id=153142

        Unreviewed addition to Alex's JSC patch, which was reviewed by Brent Fulgham. Pass
        -I${JAVASCRIPTCORE_DIR} to g-ir-scanner.

        * PlatformGTK.cmake:

2016-01-14  Simon Fraser  <simon.fraser@apple.com>

        Remove workaround for rdar://problem/23623670
        https://bugs.webkit.org/show_bug.cgi?id=153107
        rdar://problem/23633319

        Reviewed by Tim Horton.

        Remove the code that uses IOSurfaceAcceleratorTransformSurface() when copying from
        back-to-front buffer, now that CGIOSurfaceContextCreate()-code path works correctly.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):

2016-01-14  Beth Dakin  <bdakin@apple.com>

        WK1 and WK2 should share more candidate request code
        https://bugs.webkit.org/show_bug.cgi?id=153108

        Reviewed by Simon Fraser.

        requestCandidatesForSelection() does not need to be exposed as an 
        EditorClient function. WK1 can just call invoke this code from the existing 
        respondToChangedSelection EditorClient function, which is what WK2 does.
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2016-01-14  Beth Dakin  <bdakin@apple.com>

        WK2: Request completion candidates when needed
        https://bugs.webkit.org/show_bug.cgi?id=153040
        -and corresponding-
        rdar://problem/24155631

        Reviewed by Enrica Casucci and Tim Horton.

        Mac needs to support postLayoutData in order to have some layout-related 
        editing information to request candidates. This patch re-shuffles some items 
        in the struct so that they can be shared by Mac and iOS, and it adds 3 new 
        items for Mac only.
        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        (WebKit::EditorState::PostLayoutData::encode):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:

        Request and handle candidates here in WebViewImpl, and cache the 
        m_lastStringForCandidateRequest so that we can ensure the results we receive 
        were received in a timely enough manner that they are still for the same 
        String.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::selectionDidChange):

        When selection changes, request new candidates.
        (WebKit::WebViewImpl::requestCandidatesForSelectionIfNeeded):

        Once candidates have been received, we ask the sharedSpellChecker to show 
        them.
        (WebKit::WebViewImpl::handleRequestedCandidates):

        If a candidate is accepted, we ask the WebProcess to accept it, so we start 
        by converting the NSTextCheckingResult to a WebCore::TextCheckingResult.
        (WebKit::textCheckingResultFromNSTextCheckingResult):
        (WebKit::WebViewImpl::handleAcceptedCandidate):

        Ask the WebProcess to handle accepting the candidate.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleAcceptedCandidate):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage:: handleAcceptedCandidate):
        * WebProcess/WebPage/WebPage.messages.in:

        Now that Mac has some postLayoutData in the EditorState, fill that in in 
        platformEditorState().
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformEditorState):

        Ask WebCore::Editor to handle the accepted candidate.
        (WebKit::WebPage::handleAcceptedCandidate):

2016-01-14  Commit Queue  <commit-queue@webkit.org>

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

        Crashes many/most editing tests (Requested by ap on #webkit).

        Reverted changeset:

        "WK2: Request completion candidates when needed"
        https://bugs.webkit.org/show_bug.cgi?id=153040
        http://trac.webkit.org/changeset/195002

2016-01-14  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][GTK][SeccompFilter] Fix build break when enabling --seccomp-filters
        https://bugs.webkit.org/show_bug.cgi?id=153094

        Reviewed by Csaba Osztrogonác.

        diskCacheDirectory and cookiePersistentStoragePath were removed by r192796.
        But SyscallPolicy::addDefaultWebProcessPolicy has added directory permission
        to the removed paths.

        It looks two paths needs to be handled by network process.

        * Shared/linux/SeccompFilters/SyscallPolicy.cpp:
        (WebKit::SyscallPolicy::addDefaultWebProcessPolicy): Deleted.

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

        Implement custom protocols when using NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=153078

        Reviewed by Andy Estes.

        * NetworkProcess/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (WebKit::generateCustomProtocolID):
        (+[WKCustomProtocol canInitWithRequest:]):
        (+[WKCustomProtocol canonicalRequestForRequest:]):
        (-[WKCustomProtocol initWithRequest:cachedResponse:client:]):
        (-[WKCustomProtocol startLoading]):
        (-[WKCustomProtocol stopLoading]):
        There's no need to have a static pointer when we can use NetworkProcess::singleton to access 
        the process-global CustomProtocolManager, and add null checks because that's a good thing to do.
        (WebKit::CustomProtocolManager::CustomProtocolManager):
        Call UTF8Encoding when creating the CustomProtocolManager on the main thread to make sure it exists
        for when we decode URLS in ResourceResponses from IPC later, which is done on a different WorkQueue.
        (WebKit::CustomProtocolManager::initializeConnection):
        (WebKit::CustomProtocolManager::initialize):
        (WebKit::CustomProtocolManager::removeCustomProtocol):
        (WebKit::CustomProtocolManager::registerProtocolClass):
        (WebKit::CustomProtocolManager::registerScheme):
        * NetworkProcess/CustomProtocols/CustomProtocolManager.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::NetworkSession):
        Call registerProtocolClass to set configuration.protocolClasses if there is a CustomProtocolManager.

2016-01-13  Beth Dakin  <bdakin@apple.com>

        WK2: Request completion candidates when needed
        https://bugs.webkit.org/show_bug.cgi?id=153040
        -and corresponding-
        rdar://problem/24155631

        Reviewed by Enrica Casucci.

        Mac needs to support postLayoutData in order to have some layout-related 
        editing information to request candidates. This patch re-shuffles some items 
        in the struct so that they can be shared by Mac and iOS, and it adds 3 new 
        items for Mac only.
        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        (WebKit::EditorState::PostLayoutData::encode):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:

        Request and handle candidates here in WebViewImpl, and cache the 
        m_lastStringForCandidateRequest so that we can ensure the results we receive 
        were received in a timely enough manner that they are still for the same 
        String.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::selectionDidChange):

        When selection changes, request new candidates.
        (WebKit::WebViewImpl::requestCandidatesForSelectionIfNeeded):

        Once candidates have been received, we ask the sharedSpellChecker to show 
        them.
        (WebKit::WebViewImpl::handleRequestedCandidates):

        If a candidate is accepted, we ask the WebProcess to accept it, so we start 
        by converting the NSTextCheckingResult to a WebCore::TextCheckingResult.
        (WebKit::textCheckingResultFromNSTextCheckingResult):
        (WebKit::WebViewImpl::handleAcceptedCandidate):

        Ask the WebProcess to handle accepting the candidate.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleAcceptedCandidate):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage:: handleAcceptedCandidate):
        * WebProcess/WebPage/WebPage.messages.in:

        Now that Mac has some postLayoutData in the EditorState, fill that in in 
        platformEditorState().
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformEditorState):

        Ask WebCore::Editor to handle the accepted candidate.
        (WebKit::WebPage::handleAcceptedCandidate):

2016-01-12  Geoffrey Garen  <ggaren@apple.com>

        WebKit2 should have an API for eagerly querying whether the web process is responsive
        https://bugs.webkit.org/show_bug.cgi?id=153037

        Reviewed by Tim Horton.

        WebKit2 provides a delegate notification when the web process doesn't
        respond to a message after a while. But there's no way to send a message
        eagerly and check for reply.

        We want this new mechanism so that navigation can terminate the web
        process eagerly if it is hung.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetWebProcessIsResponsive):
        * UIProcess/API/C/WKPagePrivate.h: This is the new API.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sendWheelEvent): Updated for interface change.

        (WebKit::WebPageProxy::getWebProcessIsResponsive): Calls through to the
        web process proxy. We claim that we are responsive when there is no
        web process because we assume that a fresh web process will not hang.

        * UIProcess/WebPageProxy.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::didBecomeUnresponsive): Keep a flag indicating
        whether the process is unresponsive so that we can fire unresponsiveness
        callbacks immediately for a hung process instead of waiting another 3s.

        (WebKit::WebProcessProxy::didBecomeResponsive): We don't fire responsiveness
        callbacks inside didBecomeResponsive because we assume that a responsive
        web process will invoke didReceiveMainThreadPing -- and we fire the
        callbacks there.

        (WebKit::WebProcessProxy::getIsResponsive): If the web process is already
        known to be unresponsive, fire the callback right away. Otherwise, queue
        it up to fire once we have an answer from a main thread ping.

        (WebKit::WebProcessProxy::didReceiveMainThreadPing): Fire any pending
        callbacks when we learn that the web process is responsive.

        * UIProcess/WebProcessProxy.h:

2016-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.11.3 release.

        * gtk/NEWS: Add release notes for 2.11.3.

2016-01-12  Geoffrey Garen  <ggaren@apple.com>

        WebPageProxy should reattach to the web process before navigating
        https://bugs.webkit.org/show_bug.cgi?id=153026

        Reviewed by Anders Carlsson.

        This fixes a crash (and lots of other corruption) when force-quitting
        the web process during navigation.

        Some objects (like ViewGestureController) use one-time initialization
        to point to a ChildProcessProxy -- and, by design, we destroy them when
        the ChildProcessProxy becomes invalid (i.e., crashes or quits).

        If we navigate *before* creating a new, valid ChildProcessProxy, then
        we accidentally re-create these objects pointing to the old, invalid
        ChildProcessProxy.

        We need to wait until we have a valid ChildProcessProxy before we
        initialize these objects.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessWithItem): Navigate after
        reattaching to the web process so that lazily allocated helper objects
        point to the right ChildProcessProxy.

2016-01-12  Ryosuke Niwa  <rniwa@webkit.org>

        Add a build flag for custom element
        https://bugs.webkit.org/show_bug.cgi?id=153005

        Reviewed by Alex Christensen.

        * Configurations/FeatureDefines.xcconfig:

2016-01-12  Alex Christensen  <achristensen@webkit.org>

        Ask for UI Process approval of ProtectionSpace when authenticating downloads with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=152999

        Reviewed by Brady Eidson.

        * DerivedSources.make:
        I mistakenly added PendingDownload.messages.in in r194810, but this will not be needed because
        the PendingDownload is not a MessageReceiver.  Rather, the NetworkProcess receives the messages
        and forwards their contents to the PendingDownload through its DownloadManager.
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::dataTaskBecameDownloadTask):
        (WebKit::DownloadManager::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::DownloadManager::convertHandleToDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/PendingDownload.cpp:
        (WebKit::PendingDownload::continueWillSendRequest):
        (WebKit::PendingDownload::canAuthenticateAgainstProtectionSpaceAsync):
        Instead of taking a shortcut I added in r194810, send a message to the UI process and wait for its
        asynchronous reply to determine if we can authenticate against this protection space.
        (WebKit::PendingDownload::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::PendingDownload::didConvertToDownload):
        * NetworkProcess/Downloads/PendingDownload.h:
        * NetworkProcess/Downloads/PendingDownload.messages.in: Removed.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::cancelDownload):
        (WebKit::NetworkProcess::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/Authentication/AuthenticationManager.h:
        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::didFail):
        (API::DownloadClient::didCancel):
        (API::DownloadClient::processDidCrash):
        (API::DownloadClient::canAuthenticateAgainstProtectionSpace):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        (WebKit::DownloadProxy::canAuthenticateAgainstProtectionSpace):
        (WebKit::DownloadProxy::didReceiveResponse):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Downloads/DownloadProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:

2016-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Move ChildProcessProxy from Shared to UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=125570

        Reviewed by Darin Adler.

        ChildProcessProxy is only used by the UI process.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * UIProcess/ChildProcessProxy.cpp: Renamed from Source/WebKit2/Shared/ChildProcessProxy.cpp.
        (WebKit::ChildProcessProxy::ChildProcessProxy):
        (WebKit::ChildProcessProxy::~ChildProcessProxy):
        (WebKit::ChildProcessProxy::fromConnection):
        (WebKit::ChildProcessProxy::getLaunchOptions):
        (WebKit::ChildProcessProxy::connect):
        (WebKit::ChildProcessProxy::terminate):
        (WebKit::ChildProcessProxy::state):
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::addMessageReceiver):
        (WebKit::ChildProcessProxy::removeMessageReceiver):
        (WebKit::ChildProcessProxy::dispatchMessage):
        (WebKit::ChildProcessProxy::dispatchSyncMessage):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        (WebKit::ChildProcessProxy::shutDownProcess):
        (WebKit::ChildProcessProxy::connectionWillOpen):
        * UIProcess/ChildProcessProxy.h: Renamed from Source/WebKit2/Shared/ChildProcessProxy.h.
        (WebKit::ChildProcessProxy::connection):
        (WebKit::ChildProcessProxy::processIdentifier):
        (WebKit::ChildProcessProxy::canSendMessage):
        (WebKit::ChildProcessProxy::send):
        (WebKit::ChildProcessProxy::sendSync):
        * WebKit2.xcodeproj/project.pbxproj:

2016-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] UI process crashes if webkit_web_view_get_tls_info is called before internal load-committed event
        https://bugs.webkit.org/show_bug.cgi?id=142375

        Reviewed by Michael Catanzaro.

        Remove all the hacks to emit delayed load events now that the
        page cache resource load delegates are consistent with all other
        resource loads.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewLoadChanged):
        (webkitWebViewResourceLoadStarted):
        (webkit_web_view_get_tls_info): Add a g_return_val_if_fail to
        prevent this function from being misused.
        (webkitWebViewDisconnectMainResourceResponseChangedSignalHandler): Deleted.
        (webkitWebViewDispose): Deleted.
        (webkitWebViewEmitLoadChanged): Deleted.
        (webkitWebViewEmitDelayedLoadEvents): Deleted.
        (mainResourceResponseChangedCallback): Deleted.
        (waitForMainResourceResponseIfWaitingForResource): Deleted.

2016-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r190717): [GTK] Popup menus stop working after being dismissed without selecting an item
        https://bugs.webkit.org/show_bug.cgi?id=152977

        Reviewed by Michael Catanzaro.

        This happens since r190717 when you open a popup menu and without
        selecting any option it's dismissed (press ESC or click somewhere
        else). This is because I removed the code to track when the menu
        is unmapped, thinking that it was no longer necessary. But we need
        to send the DidChangeSelectedIndexForActivePopupMenu to the
        WebProcess with -1 as index to keep the web process in sync.

        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::WebPopupMenuProxyGtk):
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):
        (WebKit::WebPopupMenuProxyGtk::cancelTracking):
        (WebKit::WebPopupMenuProxyGtk::menuItemActivated):
        (WebKit::WebPopupMenuProxyGtk::dismissMenuTimerFired):
        (WebKit::WebPopupMenuProxyGtk::menuUnmappedCallback):
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:

2016-01-09  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to opt out a URL scheme from the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=152950
        rdar://problem/24066652

        Reviewed by Tim Horton.

        Added a alwaysRevalidatedURLSchemes property to _WKProcessPoolConfiguration. Taught WebProcess to add these
        schemes to SchemeRegistry when initializing a new web process.

        * Shared/API/Cocoa/WKFoundation.h: Added a newline to force re-postprocessing.
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration alwaysRevalidatedURLSchemes]):
        (-[_WKProcessPoolConfiguration setAlwaysRevalidatedURLSchemes:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::registerURLSchemeAsAlwaysRevalidated):
        * WebProcess/WebProcess.h:

2016-01-11  Anders Carlsson  <andersca@apple.com>

        Get rid of CFMakeCollectable, it is a no-op
        https://bugs.webkit.org/show_bug.cgi?id=152988

        Reviewed by Sam Weinig.

        * Shared/Cocoa/WKNSString.mm:
        * Shared/Cocoa/WKNSURL.mm:
        (-[WKNSURL _web_createTarget]):

2016-01-11  Commit Queue  <commit-queue@webkit.org>

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

        This change broke the mac build (Requested by ryanhaddad on
        #webkit).

        Reverted changeset:

        "[Cocoa] Add SPI to opt out a URL scheme from the memory
        cache"
        https://bugs.webkit.org/show_bug.cgi?id=152950
        http://trac.webkit.org/changeset/194866

2016-01-11  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to opt out a URL scheme from the memory cache
        https://bugs.webkit.org/show_bug.cgi?id=152950
        rdar://problem/24066652

        Reviewed by Tim Horton.

        Added a alwaysRevalidatedURLSchemes property to _WKProcessPoolConfiguration. Taught WebProcess to add these
        schemes to SchemeRegistry when initializing a new web process.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration alwaysRevalidatedURLSchemes]):
        (-[_WKProcessPoolConfiguration setAlwaysRevalidatedURLSchemes:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::registerURLSchemeAsAlwaysRevalidated):
        * WebProcess/WebProcess.h:

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

        Fix Mac CMake build after r194810.

        * PlatformMac.cmake:
        PendingDownload isn't needed until NETWORK_SESSION is used by default.
        I'll figure this out when I make the switch.

2016-01-11  Mario Sanchez Prada  <mario@endlessm.com>

        [WK2][GTK] Propagate motion-notify-event signals from the WebView
        https://bugs.webkit.org/show_bug.cgi?id=152974

        Reviewed by Carlos Garcia Campos.

        Always propagate motion-notify-event signals, regardless of what the
        web process does, so that we can listen for those events (which does
        not act on specific targets inside the webview) from the container
        widget too, and not just from the WebView itself.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseMotionNotifyEvent): Ensure the signal gets propagated.

2016-01-10  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Disable header postprocessing when building for El Capitan
        https://bugs.webkit.org/show_bug.cgi?id=152962

        Reviewed by Anders Carlsson.

        * Configurations/WebKit.xcconfig:

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

        [Cocoa] Allow overriding the frameworks directory independently of using a staging install path
        https://bugs.webkit.org/show_bug.cgi?id=152926

        Reviewed by Tim Horton.

        Introduce a new build setting, WK_OVERRIDE_FRAMEWORKS_DIR. When not empty, it determines
        where the frameworks are installed. Setting USE_STAGING_INSTALL_PATH to YES sets
        WK_OVERRIDE_FRAMEWORKS_DIR to $(SYSTEM_LIBRARY_DIR)/StagedFrameworks/Safari.

        Account for the possibility of WK_OVERRIDE_FRAMEWORKS_DIR containing spaces.

        * Configurations/BaseTarget.xcconfig:
        - Add quotes to account for spaces.
        - Define WEBKIT_FRAMEWORKS_DIR and UMBRELLA_FRAMEWORKS_DIR based on
          WK_OVERRIDE_FRAMEWORKS_DIR.

        * WebKit2.xcodeproj/project.pbxproj:
        - In the Migrate WebKitLegacy Headers build phase, work around make’s inability to handle
          spaces in paths by creating a symlink to WEBKIT_LEGACY_PRIVATE_HEADERS_DIR under
          BUILT_PRODUCTS_DIR and using the symlink as the value of
          WEBKIT_LEGACY_PRIVATE_HEADERS_DIR.
        - In the Postprocess WKBase.h and Postprocess WKFoundation.h build phases, add quotes to
          account for spaces.

        * mac/MigrateHeadersFromWebKitLegacy.make:
          Use a BUILT_PRODUCTS_DIR-based path to the framework instead of a TARGET_BUILD_DIR-based
          one in order to avoid spaces.

        * mac/postprocess-framework-headers.sh:
          Add quotes to account for spaces.

2016-01-08  Alex Christensen  <achristensen@webkit.org>

        Implement download authentication with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=152878

        Reviewed by Brady Eidson.

        * DerivedSources.make:
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/PendingDownload.cpp: Added.
        (WebKit::PendingDownload::PendingDownload):
        (WebKit::PendingDownload::willSendRedirectedRequest):
        (WebKit::PendingDownload::continueWillSendRequest):
        (WebKit::PendingDownload::canAuthenticateAgainstProtectionSpaceAsync):
        (WebKit::PendingDownload::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::PendingDownload::didConvertToDownload):
        (WebKit::PendingDownload::messageSenderConnection):
        (WebKit::PendingDownload::messageSenderDestinationID):
        * NetworkProcess/Downloads/PendingDownload.h:
        (WebKit::PendingDownload::PendingDownload): Deleted.
        * NetworkProcess/Downloads/PendingDownload.messages.in: Added.
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueWillSendRequest):
        The completion handler should always be called.  If m_currentRequest is null, then the request will not proceed, which is the same as canceling it.
        (WebKit::NetworkLoad::setPendingDownloadID):
        (WebKit::NetworkLoad::setPendingDownload):
        (WebKit::NetworkLoad::willPerformHTTPRedirection):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        If this load is going to become a download, then call the PendingDownload version of didReceiveAuthenticationChallenge to communicate with the 
        UI process directly because there wasn't necessarily a web process associated with this request that will become a download.
        * NetworkProcess/NetworkLoad.h:
        (WebKit::NetworkLoad::pendingDownloadID):
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkDataTask::client):
        (WebKit::NetworkDataTask::pendingDownloadID):
        (WebKit::NetworkDataTask::pendingDownload):
        (WebKit::NetworkDataTask::setPendingDownloadID):
        (WebKit::NetworkDataTask::setPendingDownload):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        * PlatformMac.cmake:
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::canAuthenticateAgainstProtectionSpace):
        Removed unnecessary protection and move null check to before using the pointer it checks.

2016-01-07  Simon Fraser  <simon.fraser@apple.com>

        Use an appropriate buffer format for swipe snapshots
        https://bugs.webkit.org/show_bug.cgi?id=152880
        rdar://problem/23728299

        Reviewed by Tim Horton.
        
        Choose an appropriate buffer format for swipe snapshots, and avoid converting
        them to YUV422.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (WebKit::bufferFormat):
        (-[WKWebView _takeViewSnapshot]):

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

        Progress towards implementing downloads with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=152760

        Reviewed by Brady Eidson.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        There's no need to store the unused NetworkSession&.
        (WebKit::Download::didStart):
        (WebKit::Download::didReceiveAuthenticationChallenge):
        Downloads with NetworkSession are NetworkLoads until the response is received, which is after authentication
        challenges are handled by NetworkLoad's code.
        (WebKit::Download::didReceiveResponse):
        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        Create a PendingDownload, which is basically a NetworkLoad that knows that it will become a Download 
        when the response is received, regardless of whether or not there is a Content-Disposition header.
        (WebKit::DownloadManager::dataTaskBecameDownloadTask):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/Downloads/PendingDownload.h: Added.
        (WebKit::PendingDownload::PendingDownload):
        Added a new NetworkLoadClient for requests that will become downloads.
        A PendingDownload contains a NetworkLoad so we can always keep them together
        and so it can handle setting its pending download id.
        * WebKit2.xcodeproj/project.pbxproj:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        Avoid dereferencing a pointer if the NetworkSession hadn't been created when a NetworkLoad starts.
        This shouldn't be possible, but it's good to not assume that all pointers are non-null.
        (WebKit::NetworkLoad::cancel):
        Add a null check in case the constructor doesn't make m_task.
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::setPendingDownloadID):
        Added for downloads that start with startDownload.  The pending DownloadID is used to indicate that
        this request should always become a download, regardless of whether or not the response has a 
        Content-Disposition header.
        (WebKit::NetworkLoad::willPerformHTTPRedirection):
        (WebKit::NetworkLoad::didReceiveResponse):
        * NetworkProcess/NetworkLoad.h:
        There's no need to store a DownloadID here.  It's stored in the NetworkDataTask (m_task).
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkDataTask::client):
        (WebKit::NetworkDataTask::pendingDownloadID):
        (WebKit::NetworkDataTask::setPendingDownloadID):
        (WebKit::NetworkDataTask::downloadID): Deleted.
        (WebKit::NetworkDataTask::setDownloadID): Deleted.
        Renamed downloadID and setDownloadID to pendingDownloadID and setPendingDownloadID, respectively,
        to indicate their use.  They are not the current downloadID, but they are the downloadID of the download
        that will happen once the response is received and PolicyDownload will be returned in the completion handler.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        Call dataTaskBecameDownloadTask after didBecomeDownload because the networkDataTask is deleted by removing it 
        from m_pendingDownloads in dataTaskBecameDownloadTask.

2016-01-06  Simon Fraser  <simon.fraser@apple.com>

        Add a setting and preferences to enable display-list drawing. Does nothing yet.
        https://bugs.webkit.org/show_bug.cgi?id=152807

        Reviewed by Zalan Bujtas.
        
        WK2 debug pref for display-list drawing, defaults to off.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _displayListDrawingEnabled]):
        (-[WKPreferences _setDisplayListDrawingEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2016-01-06  Daniel Bates  <dabates@apple.com>

        Use code signed identifier as part of user directory suffix
        https://bugs.webkit.org/show_bug.cgi?id=152310
        <rdar://problem/13352225>

        As pointed out by Sam Weinig, the year is 2016! I inadvertently added the copyright year 2015 instead of 2016.

        * Shared/mac/ChildProcessMac.mm:

2016-01-06  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Revert overflow:hidden on the body affecting viewport scale (r186786)
        https://bugs.webkit.org/show_bug.cgi?id=152803
        rdar://problem/22242515

        Reviewed by Tim Horton.

        You can't assume that if an author uses overflow:hidden on the body, they have no
        content outside the body that is important. Sites like Google Translate put
        abspos elements outside the body.
        
        So revert the change.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameDidLayout): Go back to using contents size.

2016-01-06  Anders Carlsson  <andersca@apple.com>

        Add a smart block pointer
        https://bugs.webkit.org/show_bug.cgi?id=152799

        Reviewed by Tim Horton.

        Use WTF::BlockPtr.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):

2016-01-06  Daniel Bates  <dabates@apple.com>

        Use code signed identifier as part of user directory suffix
        https://bugs.webkit.org/show_bug.cgi?id=152310
        <rdar://problem/13352225>

        Reviewed by Brent Fulgham.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::findSecCodeForProcess): Added.
        (WebKit::ChildProcess::initializeSandbox): Modified to use an identifier
        from the code signature of the app/tool as part of the user directory suffix.

2016-01-06  Brian Burg  <bburg@apple.com>

        Add a WebKit SPI for registering an automation controller with RemoteInspector
        https://bugs.webkit.org/show_bug.cgi?id=151576

        Reviewed by Dan Bernstein and Joseph Pecoraro.

        _WKAutomationDelegate is a new SPI that allows WKProcessPool clients to decide
        policy and implement actions for remote automation.

        The SPI's implementation connects the client's delegate to RemoteInspector::Client.
        This allows the delegate to handle some commands, such as requestAutomationSession,
        that come over XPC from an external test runner but are not associated with a specific
        automation target.

        * PlatformMac.cmake:
        * UIProcess/API/APIAutomationClient.h: Added. Boilerplate for WebKit::AutomationClient.
        (API::AutomationClient::~AutomationClient):
        (API::AutomationClient::allowsRemoteAutomation):
        (API::AutomationClient::requestAutomationSession):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _automationDelegate]): Added.
        (-[WKProcessPool _setAutomationDelegate:]): Added.
        (-[WKProcessPool _automationCapabilitiesDidChange]): Added.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Add delegate.
        * UIProcess/API/Cocoa/_WKAutomationDelegate.h: Added.

            This is a new delegate SPI of WKProcessPool; it corresponds to AutomationClient.

        * UIProcess/Cocoa/AutomationClient.h: Added.
        * UIProcess/Cocoa/AutomationClient.mm: Added.

            This implements a bridge between RemoteInspector::Client and _WKAutomationDelegate.
            Since the delegate can be called from JavaScriptCore, save the delegating
            WKProcessPool and pass it as the self parameter to delegate methods.

        (WebKit::AutomationClient::AutomationClient):
        (WebKit::AutomationClient::~AutomationClient):

            This client automatically registers and unregisters as a RemoteInspector::Client.

        (WebKit::AutomationClient::remoteAutomationAllowed):
        (WebKit::AutomationClient::requestAutomationSession):

            Forward requests from RemoteInspector to the automation delegate.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::setAutomationClient): Added.
        (WebKit::WebProcessPool::updateAutomationCapabilities): Added, it notifies RemoteInspector.
        * UIProcess/WebProcessPool.h:
        * WebKit2.xcodeproj/project.pbxproj:

2016-01-06  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Set WebKit2 process output name
        https://bugs.webkit.org/show_bug.cgi?id=152773

        Reviewed by Benjamin Poulain.

        If we add *WebKit* prefix to each WK2 process, it is more clear when checking what process is running.
        So this patch sets wk2 process output name.

        * PlatformEfl.cmake:

2016-01-05  Alex Christensen  <achristensen@webkit.org>

        Implement defersLoading with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=151818

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        (WebKit::NetworkLoad::setDefersLoading):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkDataTask::resume):
        (WebKit::NetworkDataTask::suspend):

2016-01-05  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r192432): Keyboard repeat doesn't work anymore for arrow keys/spacebar
        https://bugs.webkit.org/show_bug.cgi?id=152767
        <rdar://problem/24017380>

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]):
        Instead of always bailing, call [super _handleKeyUIEvent:] if we aren't
        in an editable area, because we won't have done so in _handleKeyUIEvent.

        It's important that the event makes it to the root UIResponder (even if
        we handled it!) for key repeat to function.

        The double-scrolling case is still fixed because we notice the resent
        event coming back in to us and bail if we've already seen it.

2016-01-05  Jer Noble  <jer.noble@apple.com>

        [Mac] Exiting fullscreen via Mission Control leaves fullcreen window frontmost on desktop
        https://bugs.webkit.org/show_bug.cgi?id=152733

        Reviewed by Eric Carlson.

        Rather than ignore -windowDidExitFullScreen: notifications when fullscreen exit was
        not initiated by WebKit (and the -window:startCustomAnimationToEnterFullScreenWithDuration:
        method was not called), continue to exit fullscreen normally.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):

2016-01-05  Alex Christensen  <achristensen@webkit.org>

        Clean up download code
        https://bugs.webkit.org/show_bug.cgi?id=152739

        Reviewed by Brady Eidson.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::DownloadManager):
        (WebKit::DownloadManager::didCreateDownload):
        (WebKit::DownloadManager::didDestroyDownload):
        (WebKit::DownloadManager::downloadProxyConnection):
        (WebKit::DownloadManager::downloadsAuthenticationManager):
        * NetworkProcess/Downloads/DownloadManager.h:
        Keep a Client& instead of a Client*.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::downloadManager):
        * NetworkProcess/NetworkSession.h:
        m_sessionID is not used. There is no need to store the sessionID if it is only used in the NetworkSession constructor.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::defaultSession):
        (WebKit::NetworkSession::NetworkSession):

2016-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow to save and restore session
        https://bugs.webkit.org/show_bug.cgi?id=115600

        Reviewed by Michael Catanzaro.

        Add new API to get and resore the web view session state.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_session_state): Create a new
        WebKitWebViewSessionState representing the current session state.
        (webkit_web_view_restore_session_state): Restore the web view
        session state from the given WebKitWebViewSessionState.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewSessionState.cpp: Added.
        (_WebKitWebViewSessionState::_WebKitWebViewSessionState):
        (toExternalURLsPolicy):
        (toWebCoreExternalURLsPolicy):
        (toHTMLBodyElementType):
        (toHTTPBodyElementType):
        (encodeHTTPBody):
        (encodeFrameState):
        (encodePageState):
        (encodeBackForwardListItemState):
        (encodeBackForwardListState):
        (encodeSessionState):
        (decodeHTTPBody):
        (decodeFrameState):
        (decodeBackForwardListItemState):
        (decodeSessionState):
        (webkitWebViewSessionStateCreate):
        (webkitWebViewSessionStateGetSessionState):
        (webkit_web_view_session_state_new): Create a
        WebKitWebViewSessionState from serialized data.
        (webkit_web_view_session_state_ref):
        (webkit_web_view_session_state_unref):
        (webkit_web_view_session_state_serialize): Serialize the WebKitWebViewSessionState.
        * UIProcess/API/gtk/WebKitWebViewSessionState.h: Added.
        * UIProcess/API/gtk/WebKitWebViewSessionStatePrivate.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Add webkit_web_view_session_state_get_type.
        * UIProcess/API/gtk/webkit2.h: Include WebKitWebViewSessionState.h.

2016-01-04  Alex Christensen  <achristensen@webkit.org>

        Use unique_ptr for NetworkDataTasks and references for NetworkSessionTaskClients
        https://bugs.webkit.org/show_bug.cgi?id=152724

        Reviewed by Andy Estes.

        There is no reason to have a NetworkSessionTaskClient* instead of a 
        NetworkSessionTaskClient& just so we can clear it in the NetworkLoad destructor, 
        which immediately calls ~NetworkDataTask.
        Also, NetworkDataTasks are owned only by the NetworkLoad, so there's no reason to refcount them.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::~NetworkLoad):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
        (WebKit::NetworkDataTask::client):
        (WebKit::NetworkDataTask::downloadID):
        (WebKit::NetworkDataTask::setDownloadID):
        (WebKit::NetworkDataTask::clearClient): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::createDataTaskWithRequest):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkDataTask::NetworkDataTask):

2016-01-04  Alex Christensen  <achristensen@webkit.org>

        Progress towards implementing downloads with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=152716

        Reviewed by Brady Eidson.

        * NetworkProcess/Downloads/Download.h:
        * NetworkProcess/Downloads/DownloadID.h:
        (WebKit::DownloadID::DownloadID):
        (WebKit::DownloadID::operator==):
        (WebKit::DownloadID::operator!=):
        (WebKit::DownloadID::downloadID):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::download):
        (WebKit::DownloadManager::isDownloading):
        * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm:
        (WebKit::Download::resume):
        (WebKit::Download::platformInvalidate):
        (WebKit::Download::platformDidFinish):
        (WebKit::Download::start): Deleted.
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):

        When using NSURLSession, a data task is converted to a download task after the connection has already
        been established, the headers have been received, and WebCore looks at the response and decides that
        this connection should become a download.  We call the didReceiveResponse to match the behavior of 
        NSURLDownload, but this could be cleaned up later to match what is actually happening.  We also do not
        need to tell the download to start because it has already started.

        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkSession::addDownloadID):
        (WebKit::NetworkSession::downloadID):
        (WebKit::NetworkSession::takeDownloadID):
        (WebKit::NetworkDataTask::NetworkDataTask):

        NSURLSessionDownloadTask taskIdentifiers are unique to that NSURLSession, but we have one global DownloadManager
        in the NetworkProcess.  We need to have each NetworkSession keep a map of taskIdentifiers to global DownloadID.

2016-01-04  Tim Horton  <timothy_horton@apple.com>

        Turn on gesture events when building for Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=152704
        rdar://problem/24042472

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2016-01-04  Tim Horton  <timothy_horton@apple.com>

        Hardware keyboard key-commands stop responding when viewing PDFs
        https://bugs.webkit.org/show_bug.cgi?id=152712
        <rdar://problem/23014457>

        Reviewed by Dan Bernstein.

        Maintain first responder status through any content view swapping, by
        making WKWebView become first responder if needed, and pushing first
        responder status down to the swapped-in content view if possible.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView becomeFirstResponder]):
        Make the current content view first responder instead of the WKContentView,
        in case we have a custom content view installed.

        (-[WKWebView canBecomeFirstResponder]):
        WKWebView can always become first responder, even if none of its children can.
        This makes it so that if a custom content view can't become first responder,
        WKWebView will take the responsibility.

        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
        Return the responsibility of being first responder to the newly-installed
        content view if WKWebView is currently the first responder (either because
        of tab switching or because the previous content view did not support
        being first responder), if it supports being first responder.

2016-01-04  Commit Queue  <commit-queue@webkit.org>

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

        This change caused assertions in existing inspector tests
        (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "Web Inspector: reproducible debug ASSERT when inspecting the
        inspector (WK2)"
        https://bugs.webkit.org/show_bug.cgi?id=152080
        http://trac.webkit.org/changeset/194544

2016-01-04  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build after r194378.

        * CMakeLists.txt:

2016-01-04  Brian Burg  <bburg@apple.com>

        Web Inspector: reproducible debug ASSERT when inspecting the inspector (WK2)
        https://bugs.webkit.org/show_bug.cgi?id=152080

        Reviewed by Timothy Hatcher.

        We hit an assert underneath ChildProcessProxy::addMessageReceiver when opening Inspector[2]
        because we try to add WebInpectorProxy as a message receiver twice for the same process.

        On investigating, I found several interrelated issues that caused this state of affairs:

         - WebInspectorProxy adds message receivers for inspector page's WebProcess and the
        inspected page's WebProcess. When inspecting the inspector, we mistakenly add a receiver
        again because the inspector is now the inspected page.
         - We mixed up process ids when adding message receivers.
         - invalidate() is re-entrant, causing us to try and double-remove the message receiver.

        Fix this by removing add/remove of message recievers for the inspector page when then
        inspected page is itself an inspector page. In that case, the receivers are managed by
        the inspector page's WebInspectorProxy instance.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::invalidate): Re-arrange to guard against useless reentrancy.
        (WebKit::WebInspectorProxy::didRelaunchInspectorPageProcess):
        (WebKit::WebInspectorProxy::eagerlyCreateInspectorPage):
        (WebKit::WebInspectorProxy::didClose):

2016-01-04  Alex Christensen  <achristensen@webkit.org>

        Build fix after r194536 when using NetworkSession.

        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::dataTaskBecameDownloadTask):
        (WebKit::DownloadManager::convertHandleToDownload):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        WTFMove changed underneath me.

2016-01-04  Alex Christensen  <achristensen@webkit.org>

        Progress towards implementing downloads with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=152576

        Reviewed by Brady Eidson.

        * NetworkProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        (WebKit::Download::~Download):
        (WebKit::Download::didStart):
        (WebKit::Download::didReceiveAuthenticationChallenge):
        * NetworkProcess/Downloads/Download.h:
        (WebKit::Download::downloadID):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::dataTaskBecameDownloadTask):
        (WebKit::DownloadManager::convertHandleToDownload):
        * NetworkProcess/Downloads/DownloadManager.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::convertTaskToDownload):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkDataTask::client):
        (WebKit::NetworkDataTask::clearClient):
        (WebKit::NetworkDataTask::downloadID):
        (WebKit::NetworkDataTask::setDownloadID):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[WKNetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):

2016-01-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Rename _WebKitWebContextPrivate.context to _WebKitWebContextPrivate.processPool
        https://bugs.webkit.org/show_bug.cgi?id=152672

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitDownloadClient.cpp:
        (attachDownloadClientToContext):
        * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp:
        (attachInjectedBundleClientToContext):
        * UIProcess/API/gtk/WebKitSecurityManager.cpp:
        (registerSecurityPolicyForURIScheme):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkitWebContextDispose):
        (webkit_web_context_set_cache_model):
        (webkit_web_context_get_cache_model):
        (webkit_web_context_clear_cache):
        (webkit_web_context_get_cookie_manager):
        (ensureFaviconDatabase):
        (webkit_web_context_set_favicon_database_directory):
        (webkit_web_context_set_additional_plugins_directory):
        (webkitWebContextGetPluginThread):
        (webkit_web_context_set_tls_errors_policy):
        (webkit_web_context_set_disk_cache_directory):
        (webkit_web_context_prefetch_dns):
        (webkit_web_context_allow_tls_certificate_for_host):
        (webkit_web_context_set_process_model):
        (webkit_web_context_set_web_process_count_limit):
        (webkitWebContextStartDownload):
        (webkitWebContextGetProcessPool):
        (webkitWebContextCreatePageForWebView):
        (webkitWebContextGetContext): Deleted.
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:

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

        Rename scrollPosition(Scrollbar*) to scrollOffset(ScrollbarOrientation)
        https://bugs.webkit.org/show_bug.cgi?id=152666

        Reviewed by Dan Bernstein.

        Scrollbar values take offsets (zero-based), so rename the accessor used
        by scrollbars to set their value, and pass in an orientation, rather than
        a pointer to the scrollbar.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::scrollOffset):
        (WebKit::PDFPlugin::scrollPosition): Renamed.

2015-12-31  Andy Estes  <aestes@apple.com>

        Replace WTF::move with WTFMove
        https://bugs.webkit.org/show_bug.cgi?id=152601

        Reviewed by Brady Eidson.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::postDatabaseTask):
        (WebKit::DatabaseProcess::fetchWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
        (WebKit::DatabaseProcess::indexedDatabaseOrigins):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::postTransactionOperation):
        (WebKit::UniqueIDBDatabase::postMainThreadTask):
        (WebKit::UniqueIDBDatabase::postDatabaseTask):
        * NetworkProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertHandleToDownload):
        (WebKit::DownloadManager::resumeDownload):
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (WebKit::NetworkServiceInitializerDelegate::NetworkServiceInitializerDelegate):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveData):
        (WebKit::NetworkLoad::didReceiveBuffer):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::clearDiskCacheEntries):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::SynchronousLoadData::SynchronousLoadData):
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):
        (WebKit::NetworkResourceLoader::validateCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::clear):
        * NetworkProcess/cache/NetworkCacheCoders.h:
        * NetworkProcess/cache/NetworkCacheDataSoup.cpp:
        (WebKit::NetworkCache::Data::empty):
        (WebKit::NetworkCache::Data::subrange):
        (WebKit::NetworkCache::concatenate):
        (WebKit::NetworkCache::Data::adoptMap):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::runTaskInQueue):
        (WebKit::NetworkCache::fillDataFromReadBuffer):
        (WebKit::NetworkCache::IOChannel::readSyncInThread):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        (WebKit::NetworkCache::SpeculativeLoad::didComplete):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::ExpiringEntry::ExpiringEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::PreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::takeCacheEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::create):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::setExistingSubresourcesEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::PendingFrameLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::addPreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveSubresourcesEntry):
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::queryWasEverRequested):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::ReadOperation::finish):
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::Storage::dispatchWriteOperation):
        (WebKit::NetworkCache::Storage::retrieve):
        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourcesEntry::SubresourcesEntry):
        (WebKit::NetworkCache::SubresourcesEntry::updateSubresourceKeys):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkDataTask::NetworkDataTask):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::clearDiskCache):
        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<WTF::Optional<T>>::decode):
        * Platform/IPC/ArgumentDecoder.cpp:
        (IPC::ArgumentDecoder::ArgumentDecoder):
        * Platform/IPC/ArgumentEncoder.cpp:
        (IPC::ArgumentEncoder::addAttachment):
        (IPC::ArgumentEncoder::releaseAttachments):
        * Platform/IPC/Attachment.cpp:
        (IPC::Attachment::encode):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::SyncMessageState::dispatchMessages):
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::sendMessage):
        (IPC::Connection::sendSyncReply):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingSyncReply):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::sendOutgoingMessages):
        (IPC::Connection::dispatchSyncMessage):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::dispatchOneMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::Identifier::Identifier):
        (IPC::Connection::send):
        (IPC::Connection::sendSync):
        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessage):
        (IPC::handleMessageDelayed):
        * Platform/IPC/MessageDecoder.cpp:
        (IPC::MessageDecoder::MessageDecoder):
        (IPC::MessageDecoder::setImportanceAssertion):
        (IPC::MessageDecoder::unwrapForTesting):
        * Platform/IPC/MessageDecoder.h:
        (IPC::MessageDecoder::setMessageProcessingToken):
        * Platform/IPC/MessageEncoder.cpp:
        (IPC::MessageEncoder::wrapForTesting):
        * Platform/IPC/MessageRecorder.cpp:
        (IPC::MessageRecorder::recordOutgoingMessage):
        (IPC::MessageRecorder::recordIncomingMessage):
        (IPC::MessageRecorder::MessageProcessingToken::MessageProcessingToken):
        * Platform/IPC/MessageSender.cpp:
        (IPC::MessageSender::sendMessage):
        * Platform/IPC/MessageSender.h:
        (IPC::MessageSender::send):
        (IPC::MessageSender::sendSync):
        * Platform/IPC/glib/GSocketMonitor.cpp:
        (IPC::GSocketMonitor::start):
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):
        (IPC::createMessageDecoder):
        (IPC::Connection::receiveSourceEventHandler):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage):
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::decode):
        (WebKit::SharedMemory::Handle::releaseAttachment):
        (WebKit::SharedMemory::Handle::adoptAttachment):
        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (WebKit::PluginServiceInitializerDelegate::PluginServiceInitializerDelegate):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializePluginProcess):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::addPluginControllerProxy):
        (WebKit::WebProcessConnection::createPluginInternal):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * Scripts/webkit/LegacyMessageReceiver-expected.cpp:
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::DelayedReply):
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::send):
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::DelayedReply):
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::send):
        * Scripts/webkit/MessageReceiver-expected.cpp:
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::DelayedReply):
        (Messages::WebPage::GetPluginProcessConnection::DelayedReply::send):
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::DelayedReply):
        (Messages::WebPage::TestMultipleAttributes::DelayedReply::send):
        * Scripts/webkit/messages.py:
        (generate_message_handler):
        * Shared/API/APIArray.cpp:
        (API::Array::create):
        (API::Array::createStringArray):
        (API::Array::copy):
        * Shared/API/APIArray.h:
        * Shared/API/APIDictionary.cpp:
        (API::Dictionary::create):
        (API::Dictionary::Dictionary):
        (API::Dictionary::keys):
        * Shared/API/APIPageGroupHandle.cpp:
        (API::PageGroupHandle::create):
        (API::PageGroupHandle::PageGroupHandle):
        (API::PageGroupHandle::decode):
        * Shared/API/APIString.h:
        * Shared/API/APIURL.h:
        (API::URL::create):
        (API::URL::URL):
        * Shared/API/Cocoa/RemoteObjectInvocation.h:
        (WebKit::RemoteObjectInvocation::ReplyInfo::ReplyInfo):
        * Shared/API/Cocoa/RemoteObjectInvocation.mm:
        (WebKit::RemoteObjectInvocation::RemoteObjectInvocation):
        (WebKit::RemoteObjectInvocation::decode):
        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (ensureObjectStream):
        (createEncodedObject):
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (initializeMethod):
        (-[_WKRemoteObjectInterface setClasses:forSelector:argumentIndex:ofReply:]):
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]):
        * Shared/API/c/WKArray.cpp:
        (WKArrayCreate):
        (WKArrayCreateAdoptingValues):
        * Shared/API/c/WKDictionary.cpp:
        (WKDictionaryCreate):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::ProxyingRefPtr::ProxyingRefPtr):
        * Shared/APIWebArchive.mm:
        (API::WebArchive::WebArchive):
        (API::WebArchive::subresources):
        (API::WebArchive::subframeArchives):
        * Shared/AsyncRequest.cpp:
        (WebKit::AsyncRequest::AsyncRequest):
        (WebKit::AsyncRequest::setAbortHandler):
        * Shared/AsyncRequest.h:
        * Shared/BlockingResponseMap.h:
        (BlockingResponseMap::didReceiveResponse):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::send):
        (WebKit::ChildProcessProxy::sendSync):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::dispatchOnMainThread):
        (WebKit::CoordinatedGraphicsScene::dispatchOnClientRunLoop):
        (WebKit::CoordinatedGraphicsScene::createLayer):
        (WebKit::CoordinatedGraphicsScene::syncRemoteContent):
        (WebKit::CoordinatedGraphicsScene::appendUpdate):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp:
        (WebKit::ThreadSafeCoordinatedSurface::create):
        (WebKit::ThreadSafeCoordinatedSurface::ThreadSafeCoordinatedSurface):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::CompositingRunLoop::CompositingRunLoop):
        (WebKit::CompositingRunLoop::callOnCompositingRunLoop):
        (WebKit::ThreadedCompositor::callOnCompositingThread):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializerDelegate::XPCServiceInitializerDelegate):
        (WebKit::XPCServiceInitializer):
        * Shared/Plugins/Netscape/PluginInformation.cpp:
        (WebKit::createPluginInformationDictionary):
        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.h:
        (WebKit::RemoteScrollingCoordinatorTransaction::setStateTreeToEncode):
        * Shared/SessionTracker.cpp:
        (WebKit::SessionTracker::setSession):
        * Shared/UserData.cpp:
        (WebKit::UserData::UserData):
        (WebKit::transformGraph):
        (WebKit::UserData::decode):
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::setPageState):
        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::WebCompiledContentExtension::create):
        (WebKit::WebCompiledContentExtension::WebCompiledContentExtension):
        * Shared/WebCompiledContentExtensionData.h:
        (WebKit::WebCompiledContentExtensionData::WebCompiledContentExtensionData):
        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::submenuItemsAsAPIArray):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<UserStyleSheet>::decode):
        (IPC::ArgumentCoder<UserScript>::decode):
        (IPC::ArgumentCoder<FilterOperations>::decode):
        (IPC::ArgumentCoder<BlobPart>::decode):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        * Shared/WebPreferencesStore.h:
        (WebKit::WebPreferencesStore::Value::Value):
        * Shared/WebRenderLayer.cpp:
        (WebKit::WebRenderLayer::createArrayFromLayerList):
        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::WebRenderObject):
        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::WebTouchEvent):
        * Shared/efl/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/gtk/NativeWebTouchEventGtk.cpp:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/gtk/WebContextMenuItemGtk.cpp:
        (WebKit::WebContextMenuItemGtk::WebContextMenuItemGtk):
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/linux/SeccompFilters/OpenSyscall.cpp:
        (WebKit::OpenSyscall::createFromOpenatContext):
        (WebKit::OpenSyscall::createFromCreatContext):
        (WebKit::OpenSyscallResult::encode):
        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::ObjCObjectGraph::decode):
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::takeFrontContextPendingFlush):
        (WebKit::RemoteLayerBackingStore::Buffer::discard):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::setCallbackIDs):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::setCreatedLayers):
        (WebKit::RemoteLayerTreeTransaction::setDestroyedLayerIDs):
        (WebKit::RemoteLayerTreeTransaction::setLayerIDsWithNewlyUnreachableBackingStore):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APISessionState.cpp:
        (API::SessionState::create):
        (API::SessionState::SessionState):
        * UIProcess/API/APIUserContentExtension.cpp:
        (API::UserContentExtension::UserContentExtension):
        * UIProcess/API/APIUserContentExtension.h:
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::compiledToFile):
        (API::createExtension):
        (API::UserContentExtensionStore::compileContentExtension):
        * UIProcess/API/APIUserScript.h:
        * UIProcess/API/APIWebsiteDataRecord.cpp:
        (API::WebsiteDataRecord::create):
        (API::WebsiteDataRecord::WebsiteDataRecord):
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::create):
        (API::WebsiteDataStore::WebsiteDataStore):
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):
        (WKPageRestoreFromSessionState):
        (WKPageSetPageContextMenuClient):
        (WKPageSetPageFindMatchesClient):
        (WKPageSetPageLoaderClient):
        (WebKit::RunJavaScriptAlertResultListener::create):
        (WebKit::RunJavaScriptAlertResultListener::RunJavaScriptAlertResultListener):
        (WebKit::RunJavaScriptConfirmResultListener::create):
        (WebKit::RunJavaScriptConfirmResultListener::RunJavaScriptConfirmResultListener):
        (WebKit::RunJavaScriptPromptResultListener::create):
        (WebKit::RunJavaScriptPromptResultListener::RunJavaScriptPromptResultListener):
        (WKPageSetPageUIClient):
        (WKPageSetPageNavigationClient):
        (WKPageCopyRelatedPages):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetCacheOrigins):
        * UIProcess/API/C/WKSessionStateRef.cpp:
        (WKSessionStateCreateFromData):
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextGetInfoForInstalledPlugIns):
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (-[WKObservablePageState initWithPage:]):
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
        (createWKArray):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _restoreFromSessionStateData:]):
        (-[WKWebView _setInputDelegate:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (LazyInitialized::set):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setCachePartitionedURLSchemes:]):
        * UIProcess/API/Cocoa/_WKSessionState.mm:
        (-[_WKSessionState _initWithSessionState:]):
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (EwkDatabaseManager::getDatabaseOrigins):
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        (webkitContextMenuItemToWebContextMenuItemGtk):
        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (webkit_file_chooser_request_select_files):
        * UIProcess/API/gtk/WebKitNotificationProvider.cpp:
        (WebKitNotificationProvider::notificationCloseCallback):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_prefetch_dns):
        (webkitWebContextCreatePageForWebView):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_snapshot):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseTouchEvent):
        (webkitWebViewBaseCreateWebPage):
        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
        (webkitWebsiteDataManagerCreate):
        (webkitWebsiteDataManagerGetDataStore):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (-[WKView initWithFrame:configurationRef:]):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryAppLink):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::takeViewSnapshot):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::dispatchUpdate):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::fetchWebsiteData):
        (WebKit::DatabaseProcessProxy::deleteWebsiteData):
        (WebKit::DatabaseProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/GenericCallback.h:
        (WebKit::CallbackMap::put):
        * UIProcess/InspectorServer/WebSocketServer.cpp:
        (WebKit::WebSocketServer::didAcceptConnection):
        * UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp:
        (WebKit::connectionCallback):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::providerDidCloseNotifications):
        * UIProcess/Notifications/WebNotificationProvider.cpp:
        (WebKit::WebNotificationProvider::clearNotifications):
        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::Transaction::Transaction):
        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::PlugInAutoStartProvider::autoStartOriginsTableCopy):
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::pluginProcessToken):
        (WebKit::PluginProcessManager::fetchWebsiteData):
        (WebKit::PluginProcessManager::deleteWebsiteData):
        (WebKit::PluginProcessManager::deleteWebsiteDataForHostNames):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::fetchWebsiteData):
        (WebKit::PluginProcessProxy::deleteWebsiteData):
        (WebKit::PluginProcessProxy::deleteWebsiteDataForHostNames):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::updateScrollingTree):
        * UIProcess/StatisticsRequest.cpp:
        (WebKit::StatisticsRequest::completedRequest):
        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::TransientLocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::StorageArea::create):
        (WebKit::StorageManager::StorageArea::StorageArea):
        (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::getSessionStorageOrigins):
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::getLocalStorageOriginDetails):
        (WebKit::StorageManager::createTransientLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        * UIProcess/UserContent/WebScriptMessageHandler.cpp:
        (WebKit::WebScriptMessageHandler::create):
        (WebKit::WebScriptMessageHandler::WebScriptMessageHandler):
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::SnapshotRemovalTracker::start):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::fireRemovalCallbackImmediately):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::backListAsAPIArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsAPIArrayWithLimit):
        (WebKit::WebBackForwardList::removeAllItems):
        (WebKit::WebBackForwardList::clear):
        (WebKit::WebBackForwardList::restoreFromState):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::willSubmitForm):
        * UIProcess/WebFrameListenerProxy.h:
        (WebKit::WebFrameListenerProxy::setNavigation):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::contentFilterDidBlockLoad):
        * UIProcess/WebGrammarDetail.cpp:
        (WebKit::WebGrammarDetail::guesses):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::ExceededDatabaseQuotaRecords::add):
        (WebKit::WebPageProxy::create):
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setHistoryClient):
        (WebKit::WebPageProxy::setNavigationClient):
        (WebKit::WebPageProxy::setLoaderClient):
        (WebKit::WebPageProxy::setPolicyClient):
        (WebKit::WebPageProxy::setFormClient):
        (WebKit::WebPageProxy::setUIClient):
        (WebKit::WebPageProxy::setFindClient):
        (WebKit::WebPageProxy::setFindMatchesClient):
        (WebKit::WebPageProxy::setDiagnosticLoggingClient):
        (WebKit::WebPageProxy::setContextMenuClient):
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::didChangeBackForwardList):
        (WebKit::WebPageProxy::setInitialFocus):
        (WebKit::WebPageProxy::validateCommand):
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::processNextQueuedWheelEvent):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getBytecodeProfile):
        (WebKit::WebPageProxy::getContentsAsMHTMLData):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::sendMessage):
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::getMarkedRangeAsync):
        (WebKit::WebPageProxy::getSelectedRangeAsync):
        (WebKit::WebPageProxy::characterIndexForPointAsync):
        (WebKit::WebPageProxy::firstRectForCharacterRangeAsync):
        (WebKit::WebPageProxy::takeSnapshot):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setHistoryClient):
        (WebKit::WebProcessPool::setDownloadClient):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::getStatistics):
        (WebKit::WebProcessPool::pluginInfoStoreDidLoadPlugins):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createWebPage):
        (WebKit::WebProcessProxy::addBackForwardItem):
        (WebKit::WebProcessProxy::fetchWebsiteData):
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::add):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::create):
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::mediaKeyOrigins):
        * UIProcess/efl/InputMethodContextEfl.cpp:
        (WebKit::InputMethodContextEfl::InputMethodContextEfl):
        * UIProcess/efl/InputMethodContextEfl.h:
        (WebKit::InputMethodContextEfl::create):
        * UIProcess/efl/WebContextMenuProxyEfl.cpp:
        (WebKit::WebContextMenuProxyEfl::showContextMenu):
        * UIProcess/efl/WebUIPopupMenuClient.cpp:
        (WebUIPopupMenuClient::showPopupMenu):
        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::filterKeyEvent):
        * UIProcess/gtk/KeyBindingTranslator.cpp:
        (WebKit::KeyBindingTranslator::commandsForKeyEvent):
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::XDamageNotifier::add):
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        (WebKit::RedirectedXCompositeWindow::surface):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionSheetAssistant:decideActionsForElement:defaultActions:]):
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
        (-[WKGeolocationProviderIOS geolocationAuthorizationDenied]):
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView actionSheetAssistant:decideActionsForElement:defaultActions:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::updateSelectionWithTouches):
        (WebKit::WebPageProxy::requestAutocorrectionData):
        (WebKit::WebPageProxy::applyAutocorrection):
        (WebKit::WebPageProxy::executeEditCommand):
        (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::getLookupContextAtPoint):
        (WebKit::WebPageProxy::selectWithTwoTouches):
        (WebKit::WebPageProxy::moveSelectionByOffset):
        (WebKit::WebPageProxy::focusNextAssistedNode):
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::createModelAndInterface):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _chooseFiles:displayString:iconImage:]):
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataEncoder::finishEncoding):
        (WebKit::decodeFormData):
        (WebKit::decodeBackForwardTreeNode):
        (WebKit::decodeSessionHistoryEntries):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        * UIProcess/mac/ViewGestureController.h:
        (WebKit::ViewGestureController::setCustomSwipeViews):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::PendingSwipeTracker::PendingSwipeTracker):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::setSurface):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPageProxy::fontAtSelection):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (contextMenuItems):
        (WKBundlePageCopyOriginsWithApplicationCache):
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlayCreate):
        * WebProcess/InjectedBundle/API/efl/ewk_extension.cpp:
        (EwkExtension::didCreatePage):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitFrameGetOrCreate):
        (didInitiateLoadForResource):
        (willSendRequestForFrame):
        (didReceiveResponseForResource):
        (didReceiveContentLengthForResource):
        (didFinishLoadForResource):
        (didFailLoadForResource):
        (webkitWebPageDidReceiveMessage):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addUserScript):
        (WebKit::InjectedBundle::addUserStyleSheet):
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp:
        (WebKit::InjectedBundleBackForwardListItem::children):
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        (WebKit::InjectedBundlePageContextMenuClient::getCustomMenuFromDefaultItems):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::willSendSubmitEvent):
        (WebKit::InjectedBundlePageFormClient::willSubmitForm):
        (WebKit::InjectedBundlePageFormClient::didAssociateFormControls):
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        (WebKit::InjectedBundlePageResourceLoadClient::willSendRequestForFrame):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_PostURL):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::scheduleTimer):
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::convertStringToKeyCodes):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFHUDAnimationDelegate initWithAnimationCompletionHandler:]):
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement):
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::create):
        (WebKit::StorageAreaMap::StorageAreaMap):
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::storageArea):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserContentExtensions):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toHTTPBody):
        (WebKit::toFrameState):
        (WebKit::applyFrameState):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        (WebKit::WebFrameLoaderClient::contentFilterDidBlockLoad):
        * WebProcess/WebCoreSupport/WebPasteboardOverrides.cpp:
        (WebKit::WebPasteboardOverrides::addOverride):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::executePendingEditorCommands):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findStringMatches):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSubframe):
        (WebKit::WebFrame::create):
        (WebKit::WebFrame::WebFrame):
        (WebKit::WebFrame::didReceivePolicyDecision):
        (WebKit::WebFrame::childFrames):
        (WebKit::WebFrame::createSelectionSnapshot):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setInjectedBundleContextMenuClient):
        (WebKit::WebPage::setInjectedBundleFormClient):
        (WebKit::WebPage::setInjectedBundleUIClient):
        (WebKit::WebPage::trackedRepaintRects):
        (WebKit::WebPage::createDocumentLoader):
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::addUserContentExtension):
        * WebProcess/WebPage/WebPageOverlay.cpp:
        (WebKit::WebPageOverlay::create):
        (WebKit::WebPageOverlay::WebPageOverlay):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::RenderFrameScheduler::RenderFrameScheduler):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::computePagesForPrintingAndStartDrawingToPDF):
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::setTimingFunction):
        (WebKit::PlatformCAAnimationRemote::setValues):
        (WebKit::PlatformCAAnimationRemote::setTimingFunctions):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::layerWasCreated):
        (WebKit::RemoteLayerTreeContext::buildTransaction):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::create):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::BackingStoreFlusher):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::flush):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::transformObjectsToHandles):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenInterfaceContext::setLayerHostingContext):
        (WebKit::WebVideoFullscreenManager::createModelAndInterface):
        (WebKit::WebVideoFullscreenManager::setSeekableRanges):
        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamDidFailWithError):

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

        Fix the iOS and EFL builds, after an over-eager commit-queue commit.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::restoreViewState):
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::restorePageState):

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

        Fix naming in HistoryItem to refer to scrollPositions
        https://bugs.webkit.org/show_bug.cgi?id=152646

        Reviewed by Zalan Bujtas.
        
        HistoryItem stores a scrollPosition, so call it that.
        
        No behavior change.

        * Shared/SessionState.cpp:
        (WebKit::FrameState::encode):
        (WebKit::FrameState::decode):
        * Shared/SessionState.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeFrameStateNode):
        (WebKit::decodeBackForwardTreeNode):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toFrameState):
        (WebKit::applyFrameState):

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

        Fix reload and programmatic scrolling in RTL documents
        https://bugs.webkit.org/show_bug.cgi?id=152639

        Reviewed by Zalan Bujtas.

        Reloading a left-scrolled RTL document would cause the content to appear
        at an odd offset, and programmatic sideways scrolls in RTL documents also
        jumped to the wrong location.
        
        Fix by resolving offset/position confusion in ScrollableArea::scrollPositionChanged()
        and the scrolling tree.
        
        ScrollableArea::scrollPositionChanged() was erroneously passing a scrollPosition
        to setScrollOffset(). 
        
        ScrollingTreeFrameScrollingNode* were confused about offsets and positions. It
        turns out that the layer position is just -scrollPosition, but minimumScrollPosition()
        and maximumScrollPosition() need fixing to return positions, not offsets.
        
        ScrollingTreeFrameScrollingNode::viewToContentsOffset() was also doing incorrect
        math with scrollOrigin, which was detected by a failing test.
        
        Add more logging to the Scrolling channel.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::setScrollOffset):

2016-01-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] REGRESSION(r192761): Broke resource URIs for applications that use g_resource_load in a web extension
        https://bugs.webkit.org/show_bug.cgi?id=152634

        Reviewed by Carlos Garcia Campos.

        Load GResource URIs locally, not in the network process. Applications expect calling
        g_resource_load in a web extension to make it possible to load resource URIs, but that
        doesn't work now that the network process is in use. Loading them locally solves this.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::WebLoaderStrategy::scheduleLoad):

2016-01-01  Jeff Miller  <jeffm@apple.com>

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

        Reviewed by Alexey Proskuryakov.

        * DatabaseProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseService.Development/Info.plist:
        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseService/Info.plist:
        * Info.plist:
        * NetworkProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/Info-OSX.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/Info-iOS.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX-10.9-10.10.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-iOS.plist:
        * PluginProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64-10.9-10.10.Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/Info.plist:
        * WebProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info-OSX.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info-iOS.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX-10.9-10.10.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist:

2015-12-31  Simon Fraser  <simon.fraser@apple.com>

        Rename documentScrollOffsetRelativeTo* functions
        https://bugs.webkit.org/show_bug.cgi?id=152632

        Reviewed by Zalan Bujtas.

        ScrollView::documentScrollOffsetRelativeTo* functions return scroll positions,
        not offsets, so rename them and fix their return types, and fix callers. Make
        their code more similar.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        (WebKit::WebPage::plugInIntersectsSearchRect):

2015-12-31  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fix incorrect scrollPosition handling
        https://bugs.webkit.org/show_bug.cgi?id=152630

        Reviewed by Zalan Bujtas.
        
        WebPage::updateVisibleContentRects() was setting the ScrollView's scroll position
        to a scrollOffset, which was counteracted by ScrollView::unobscuredContentRect()
        adding the scrollOrigin to the scrollPosition, which resulted in the correct
        rects, but an incorrect scrollPosition. Fix.

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

2015-12-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix a log message

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):

2015-12-31  David Kilzer  <ddkilzer@apple.com>

        Stop using USE(CFNETWORK) path on iOS
        https://bugs.webkit.org/show_bug.cgi?id=142540

        Step 1/2: Do everything but turn off USE(CFNETWORK) internally.

        Original patch by Antti Koivisto <antti@apple.com> on 2015-03-10
        Reviewed by Daniel Bates.

        * NetworkProcess/Downloads/ios/DownloadIOS.mm: This is now the
        USE(CFNETWORK) && !USE(NETWORK_SESSION) code path.
        * NetworkProcess/Downloads/mac/DownloadMac.mm: This is now the
        !USE(CFNETWORK) && !USE(NETWORK_SESSION) code path.  Make use of
        NSURLDownloadSPI.h.  Ignore a deprecated delcaration warning now
        that we're using actual header declarations internally.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess): Update for
        iOS to use NSURLConnection loader.

2015-12-31  Andy Estes  <aestes@apple.com>

        Fix warnings uncovered by migrating to WTF_MOVE
        https://bugs.webkit.org/show_bug.cgi?id=152601

        Reviewed by Daniel Bates.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::actionsForElement): Moving a return value passed to the function by value is redundant, since it
        will be implicitly moved in this case.
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::actionsForElement): Ditto.

2015-12-30  Simon Fraser  <simon.fraser@apple.com>

        Add explicit conversions between scrollOffset and scrollPostion, and use them in a few places
        https://bugs.webkit.org/show_bug.cgi?id=152594

        Reviewed by Sam Weinig.

        Add functions to ScrollableArea to convert between scrollPosition and scrollOffset,
        and use them in places where code did the math with scrollOrigin.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect):

2015-12-30  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Clean up TextureMapperAnimation, TextureMapperAnimations
        https://bugs.webkit.org/show_bug.cgi?id=152112

        Reviewed by Darin Adler.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextureMapperAnimation>::decode):

2015-12-29  Simon Fraser  <simon.fraser@apple.com>

        Remove ScrollView::scrollOffset() in preparation for scrollOffset vs. scrollPosition clarification
        https://bugs.webkit.org/show_bug.cgi?id=152589

        Reviewed by Sam Weinig.

        Current code uses scrollOffset vs. scrollPosition interchangeably, and confusingly.
        Longer term, I plan to make "scrollPosition" be the value that is relative to the 
        contents, i.e. affected by scrollOrigin, and "scrollOffset" be the zero-based value
        that's used to set scrollbar values.
        
        To prepare for this, remove ScrollView::scrollOffset(), which is just the
        scrollPosition as an IntSize.
        
        Add some typedefs in ScrollableArea, which will slowly propagate through the
        code as position vs. offset is clarified.

        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.h:
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::scrollPosition):
        (WebKit::PDFPlugin::minimumScrollPosition):
        (WebKit::PDFPlugin::maximumScrollPosition):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::scrollOffset):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scrollMainFrameIfNotAtMaxScrollPosition):
        (WebKit::WebPage::updateMainFrameScrollOffsetPinning):

2015-12-25  Andy Estes  <aestes@apple.com>

        Stop moving local objects in return statements
        https://bugs.webkit.org/show_bug.cgi?id=152557

        Reviewed by Brady Eidson.

        Calling std::move() on a local object in a return statement prevents the compiler from applying the return value optimization.

        Clang can warn about these mistakes with -Wpessimizing-move, although only when std::move() is called directly.
        I found these issues by temporarily replacing WTF::move with std::move and recompiling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::ExceededDatabaseQuotaRecords::createRecord):

2015-12-26  Joonghun Park  <jh718.park@samsung.com>

        [WK2][EFL] Use eina_file_path_join at platformDefaultIconDatabasePath in WebProcessPoolEfl
        https://bugs.webkit.org/show_bug.cgi?id=152565

        Reviewed by Gyuyoung Kim.

        Use eina_file_path_join and EINA_PATH_SEP_S at platformDefaultIconDatabasePath
        instead of operator+ and separator "/" respectively
        to concatenate paths.

        * UIProcess/API/efl/APIWebsiteDataStoreEfl.cpp:
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::platformDefaultIconDatabasePath):

2015-12-25  David Kilzer  <ddkilzer@apple.com>

        ResourceError should store failingURL as URL instead of String to avoid reparsing and to address FIXME comments in ResourceErrorCF.cpp and ResourceErrorMac.mm
        <http://webkit.org/b/146391>

        Reviewed by Antti Koivisto.

        * NetworkProcess/Downloads/efl/DownloadSoupErrorsEfl.cpp:
        (WebKit::platformDownloadNetworkError):
        * NetworkProcess/Downloads/gtk/DownloadSoupErrorsGtk.cpp:
        (WebKit::platformDownloadNetworkError):
        * NetworkProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::didReceiveResponse):
        * NetworkProcess/Downloads/soup/DownloadSoupErrors.h:
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceError>::decodePlatformData):
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (LoaderClient::didFailLoadWithErrorForFrame):
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (webkit_uri_scheme_request_finish_error):
        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp:
        (WebKit::internalError):
        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:
        (WebKit::internalError):
        - Update for type change of 'failingURL' argument to
          ResourceError().

2015-12-23  Simon Fraser  <simon.fraser@apple.com>

        Use "constrainedBetween" in more places
        https://bugs.webkit.org/show_bug.cgi?id=152543

        Reviewed by Zalan Bujtas.

        Replace code that contrains points via shrunkTo/expandedTo() with calls
        to constrainedBetween(), and implement constrainedBetween() on IntPoint,
        FloatPoint and LayoutPoint.

        Convert some functions that return points to more modern syntax.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (constrainContentOffset):

2015-12-22  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] ewk_application_cache_manager test failed after r193812
        https://bugs.webkit.org/show_bug.cgi?id=152498

        Reviewed by Gyuyoung Kim.

        Need to enable the offline_web_application_cache for the ewk_application_cache_manager test.

        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        (TEST_F):

2015-12-22  Andy Estes  <aestes@apple.com>

        [CF] Replace CFNetwork-related WebKitSystemInterface calls with SPI
        https://bugs.webkit.org/show_bug.cgi?id=152463

        Reviewed by Alexey Proskuryakov.

        Replaced WebkitSystemInterface calls that wrapped CFNetwork SPI with direct calls to SPI that is now forward
        declared in CFNetworkSPI.h.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::initializeNetworkSettings):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::overrideSystemProxies):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2015-12-22  Brent Fulgham  <bfulgham@apple.com>

        Allow JavaScript to iterate over plugins for local SecurityOrigins
        https://bugs.webkit.org/show_bug.cgi?id=152489

        Reviewed by Alexey Proskuryakov.

        The 'getWebVisiblePluginInfo' is filtering plugins, even when we want to list
        all plugins. To avoid this, we check the Document's SecurityOrigin. If no such
        origin exists, we construct a SecurityOrigin from the URL.
        
        If the relevant SecurityOrigin satsifies 'isLocal', we show all plugins.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getWebVisiblePluginInfo):

2015-12-21  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] test_ewk2_context failed after r192808
        https://bugs.webkit.org/show_bug.cgi?id=151846

        Reviewed by Gyuyoung Kim.

        As we can make the single WebProcess behavior by setting the miximum number
        of WebProcess to 1 after r192808, I remove the ewk_context_process_model_{set|get}
        apis and add the ewk_context_web_process_count_limit_{set|get} apis and tests.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (EwkContext::setProcessCountLimit):
        (EwkContext::processCountLimit):
        (ewk_context_web_process_count_limit_set):
        (ewk_context_web_process_count_limit_get):
        (EwkContext::setProcessModel): Deleted.
        (EwkContext::processModel): Deleted.
        (ewk_context_process_model_set): Deleted.
        (ewk_context_process_model_get): Deleted.
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F): Changed the ewk_context_{web|network}_process_model tests to
        ewk_context_{web|network}_process_count_limit tests.

2015-12-21  Joonghun Park  <jh718.park@samsung.com>

        [WK2][EFL] Use cacheDirectoryFileSystemRepresentation and websiteDataDirectoryFileSystemRepresentation
        to refactor APIWebsiteDataStoreEfl
        https://bugs.webkit.org/show_bug.cgi?id=152475

        Reviewed by Gyuyoung Kim.

        Use cacheDirectoryFileSystemRepresentation and websiteDataDirectoryFileSystemRepresentation
        instead of to use efreet_cache_home_get
        and efreet_data_home_get directly.
        And also use EINA_PATH_SEP_S instead of "/" as directory separator,
        and WebCore::pathByAppendingComponent instead of operator+.

        * UIProcess/API/efl/APIWebsiteDataStoreEfl.cpp:
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        (API::WebsiteDataStore::defaultNetworkCacheDirectory):
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::defaultLocalStorageDirectory):
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):

2015-12-21  Antti Koivisto  <antti@apple.com>

        Factor NetworkResourceLoader code for storing a cache entry into a function
        https://bugs.webkit.org/show_bug.cgi?id=152467

        Reviewed by Andreas Kling.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):

            Having m_cacheEntryForValidation already implies canUseCache() so remove the test from this path.
            Move storing to the end of the function so we don't delay DidFinishResourceLoad message on it.

        (WebKit::NetworkResourceLoader::sendBufferMaybeAborting):
        (WebKit::NetworkResourceLoader::tryStoreAsCacheEntry):

            Factor to a function.
            Remove m_response.isHTTP() test as it is covered by NetworkCache::store().
            Remove !isPrivateSession test as it is covered by NetworkResourceLoader::canUseCache().

        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:

2015-12-21  Antti Koivisto  <antti@apple.com>

        Limit cached redirect chain length
        https://bugs.webkit.org/show_bug.cgi?id=152477

        Reviewed by Andreas Kling.

        Networking layer prevents cycles and limits the redirect chain length so creating cache cycles is difficult.
        For robustness the network cache should still limit the maximum redirect chain length.

        This patch adds a limit of five redirects both when storing and retrieving cache entries.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::canUseCache):
        (WebKit::NetworkResourceLoader::canUseCachedRedirect):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:

2015-12-21  Dan Bernstein  <mitz@apple.com>

        Different and incorrect flags are passed to sendSync when accessibility is enabled, SpinRunLoopWhileWaitingForReply
        https://bugs.webkit.org/show_bug.cgi?id=126021

        Reviewed by Darin Adler.

        Get rid of SpinRunLoopWhileWaitingForReply because it’s not used anymore.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForSyncReply): Removed the SpinRunLoopWhileWaitingForReply branch.

        * Platform/IPC/Connection.h: Removed SpinRunLoopWhileWaitingForReply.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel): Don’t check
          WebPage::synchronousMessagesShouldSpinRunLoop() and don’t specify
          SpinRunLoopWhileWaitingForReply.
        (WebKit::WebChromeClient::runJavaScriptAlert): Ditto.
        (WebKit::WebChromeClient::runJavaScriptConfirm): Ditto.
        (WebKit::WebChromeClient::runJavaScriptPrompt): Ditto.
        (WebKit::WebChromeClient::print): Ditto.
        (WebKit::WebChromeClient::exceededDatabaseQuota): Ditto.
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): Ditto.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::synchronousMessagesShouldSpinRunLoop): Deleted.
        * WebProcess/WebPage/WebPage.h:

2015-12-20  Joonghun Park  <jh718.park@samsung.com>

        [WK2][EFL] Use WebsiteDataStore instead of WebDatabaseManager which has been deleted in r194295
        https://bugs.webkit.org/show_bug.cgi?id=152460

        Reviewed by Gyuyoung Kim.

        Use WebsiteDataStore to support EFL WebDatabase API and to fix build break.

        * PlatformEfl.cmake:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        * UIProcess/API/efl/APIWebsiteDataStoreEfl.cpp: Copied from Source/WebKit2/UIProcess/API/APIWebsiteDataStore.cpp.
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        (API::WebsiteDataStore::defaultNetworkCacheDirectory):
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::defaultLocalStorageDirectory):
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (EwkDatabaseManager::EwkDatabaseManager):
        (EwkDatabaseManager::getDatabaseOrigins):
        * UIProcess/API/efl/ewk_database_manager_private.h:
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory):

2015-12-20  Dan Bernstein  <mitz@apple.com>

        Remove unused setToolbarHeight
        https://bugs.webkit.org/show_bug.cgi?id=152466

        Reviewed by Darin Adler.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::platformSetToolbarHeight): Deleted.
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::setToolbarHeight): Deleted.
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformSetToolbarHeight): Deleted.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSetToolbarHeight): Deleted.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformSetToolbarHeight): Deleted.
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::setToolbarHeight): Deleted.
        * WebProcess/WebPage/WebInspectorUI.h:

2015-12-19  Dan Bernstein  <mitz@apple.com>

        [Mac] WebKit contains dead source code for OS X Mavericks and earlier
        https://bugs.webkit.org/show_bug.cgi?id=152462

        Reviewed by Alexey Proskuryakov.

        - Removed build setting definitions for OS X 10.9 and earlier, and simplified defintions
          that became uniform across all OS X versions as a result:

        * Configurations/BaseTarget.xcconfig:
        * Configurations/BaseXPCService.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKit.xcconfig:

        - Removed the definition of BUNDLE_LOCALIZATION_KEY:

        * Configurations/WebContentService.Development.xcconfig:
        * Configurations/WebContentService.xcconfig:

        - Added CFBundleFollowParentLocalization set to true:

        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info-OSX.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info-iOS.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX-10.9-10.10.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist:

        * WebKit2.xcodeproj/project.pbxproj: Removed the “Add CFBundle Localization Info.plist Key”
          script build phases from the Web Content Service targets.

        - Simplified expressions involving __MAC_OS_X_VERSION_MIN_REQUIRED and removed code that was
          never getting compiled:

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Platform/IPC/mac/ConnectionMac.mm:
        * Platform/IPC/mac/ImportanceAssertion.h:
        * Platform/mac/MenuUtilities.h:
        * Platform/mac/MenuUtilities.mm:
        * Platform/mac/StringUtilities.h:
        * Platform/mac/StringUtilities.mm:
        * Shared/API/Cocoa/WKFoundation.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * UIProcess/mac/PageClientImpl.mm:
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/com.apple.WebProcess.sb.in:
        * config.h:

2015-12-18  Antti Koivisto  <antti@apple.com>

        Cache redirects as separate entries
        https://bugs.webkit.org/show_bug.cgi?id=152424

        Reviewed by Alex Christensen.

        We are currently caching redirect chains. This has correctness issues and can be inefficient in cases
        where multiple URLs redirect to the same destination.

        After this patch we write a cache entry for each redirect individually.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::sharedWillSendRedirectedRequest):
        * NetworkProcess/NetworkLoad.h:
        (WebKit::NetworkLoad::currentRequest):
        (WebKit::NetworkLoad::clearCurrentRequest):
        * NetworkProcess/NetworkLoadClient.h:

            Add original request as a parameter for willSendRedirectedRequest.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::canUseCache):

            Factor to a function.

        (WebKit::NetworkResourceLoader::isSynchronous):
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::retrieveCacheEntry):

            Factor to a function.
            Call dispatchWillSendRequestForCacheEntry for cached redirects.

        (WebKit::NetworkResourceLoader::startNetworkLoad):

            Make this take request as argument instead of always loading originalRequest().

        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didFinishLoading):

            Remove redirect chain code.
            Store cache entry for current request instead of the original request.

        (WebKit::NetworkResourceLoader::didFailLoading):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):

            Write cache entry for redirect.

        (WebKit::NetworkResourceLoader::continueWillSendRequest):

            If we are playing back cached redirect continue with another cache lookup.

        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):

            No need to synthesize fake willSendRequest anymore.

        (WebKit::NetworkResourceLoader::validateCacheEntry):
        (WebKit::NetworkResourceLoader::dispatchWillSendRequestForCacheEntry):

            Route via web process willSendRequest so cached redirects looks exactly like network ones.

        (WebKit::NetworkResourceLoader::messageSenderConnection):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeUseDecision):

            Ignore validation headers for cached redirects.

        (WebKit::NetworkCache::makeRetrieveDecision):
        (WebKit::NetworkCache::makeStoreDecision):
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):

            Rename originalRequest -> request since it is not really the original request anymore in all cases.

        (WebKit::NetworkCache::Cache::storeRedirect):

            Stored redirects include the network layer generated ResourceRequest instead of body data.

        (WebKit::NetworkCache::Cache::update):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):

            New constructor for making redirect entries.

        (WebKit::NetworkCache::Entry::encodeAsStorageRecord):
        (WebKit::NetworkCache::Entry::decodeStorageRecord):

            Encoding support.

        * NetworkProcess/cache/NetworkCacheEntry.h:
        (WebKit::NetworkCache::Entry::varyingRequestHeaders):
        (WebKit::NetworkCache::Entry::redirectRequest):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp:
        (WebKit::NetworkCache::SpeculativeLoad::~SpeculativeLoad):
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::cachedEntryReuseFailureToDiagnosticKey):

2015-12-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        Avoid triggering clang's -Wundefined-bool-conversion
        https://bugs.webkit.org/show_bug.cgi?id=152408

        Reviewed by Mark Lam.

        Use ASSERT_THIS_GC_OBJECT_INHERITS where needed.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::deleteProperty):

2015-12-15  Anders Carlsson  <andersca@apple.com>

        Get rid of WebDatabaseManager, it's been replaced by WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=152318

        Reviewed by Tim Horton.

        Build fixes by Ossy.

        * DerivedSources.make:
        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetDatabaseManager): Deleted.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKDatabaseManager.cpp: Removed.
        (WKDatabaseManagerGetTypeID): Deleted.
        (WKDatabaseManagerGetOriginKey): Deleted.
        (WKDatabaseManagerGetOriginQuotaKey): Deleted.
        (WKDatabaseManagerGetOriginUsageKey): Deleted.
        (WKDatabaseManagerGetDatabaseDetailsKey): Deleted.
        (WKDatabaseManagerGetDatabaseDetailsNameKey): Deleted.
        (WKDatabaseManagerGetDatabaseDetailsDisplayNameKey): Deleted.
        (WKDatabaseManagerGetDatabaseDetailsExpectedUsageKey): Deleted.
        (WKDatabaseManagerGetDatabaseDetailsCurrentUsageKey): Deleted.
        (WKDatabaseManagerGetDatabaseDetailsCreationTimeKey): Deleted.
        (WKDatabaseManagerGetDatabaseDetailsModificationTimeKey): Deleted.
        (WKDatabaseManagerSetClient): Deleted.
        (WKDatabaseManagerGetDatabasesByOrigin): Deleted.
        (WKDatabaseManagerGetDatabaseOrigins): Deleted.
        (WKDatabaseManagerDeleteDatabasesWithNameForOrigin): Deleted.
        (WKDatabaseManagerDeleteDatabasesForOrigin): Deleted.
        (WKDatabaseManagerDeleteAllDatabases): Deleted.
        (WKDatabaseManagerSetQuotaForOrigin): Deleted.
        * UIProcess/API/C/WKDatabaseManager.h: Removed.
        * UIProcess/WebDatabaseManagerProxy.cpp: Removed.
        (WebKit::WebDatabaseManagerProxy::supplementName): Deleted.
        (WebKit::WebDatabaseManagerProxy::originKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::originQuotaKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::originUsageKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::databaseDetailsKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::databaseDetailsNameKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::databaseDetailsDisplayNameKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::databaseDetailsExpectedUsageKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::databaseDetailsCurrentUsageKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::databaseDetailsCreationTimeKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::databaseDetailsModificationTimeKey): Deleted.
        (WebKit::WebDatabaseManagerProxy::create): Deleted.
        (WebKit::WebDatabaseManagerProxy::WebDatabaseManagerProxy): Deleted.
        (WebKit::WebDatabaseManagerProxy::~WebDatabaseManagerProxy): Deleted.
        (WebKit::WebDatabaseManagerProxy::initializeClient): Deleted.
        (WebKit::WebDatabaseManagerProxy::processPoolDestroyed): Deleted.
        (WebKit::WebDatabaseManagerProxy::processDidClose): Deleted.
        (WebKit::WebDatabaseManagerProxy::shouldTerminate): Deleted.
        (WebKit::WebDatabaseManagerProxy::refWebContextSupplement): Deleted.
        (WebKit::WebDatabaseManagerProxy::derefWebContextSupplement): Deleted.
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin): Deleted.
        (WebKit::WebDatabaseManagerProxy::didGetDatabasesByOrigin): Deleted.
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins): Deleted.
        (WebKit::WebDatabaseManagerProxy::didGetDatabaseOrigins): Deleted.
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin): Deleted.
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin): Deleted.
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases): Deleted.
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin): Deleted.
        (WebKit::WebDatabaseManagerProxy::didModifyOrigin): Deleted.
        (WebKit::WebDatabaseManagerProxy::didModifyDatabase): Deleted.
        * UIProcess/WebDatabaseManagerProxy.h: Removed.
        * UIProcess/WebDatabaseManagerProxy.messages.in: Removed.
        * UIProcess/WebDatabaseManagerProxyClient.cpp: Removed.
        (WebKit::WebDatabaseManagerProxyClient::didModifyOrigin): Deleted.
        (WebKit::WebDatabaseManagerProxyClient::didModifyDatabase): Deleted.
        * UIProcess/WebDatabaseManagerProxyClient.h: Removed.
        * UIProcess/WebProcessPool.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp: Removed.
        (WebKit::WebDatabaseManager::supplementName): Deleted.
        (WebKit::WebDatabaseManager::WebDatabaseManager): Deleted.
        (WebKit::WebDatabaseManager::initialize): Deleted.
        (WebKit::WebDatabaseManager::getDatabasesByOrigin): Deleted.
        (WebKit::WebDatabaseManager::getDatabaseOrigins): Deleted.
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin): Deleted.
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin): Deleted.
        (WebKit::WebDatabaseManager::deleteAllDatabases): Deleted.
        (WebKit::WebDatabaseManager::closeAllDatabases): Deleted.
        (WebKit::WebDatabaseManager::setQuotaForOrigin): Deleted.
        (WebKit::WebDatabaseManager::dispatchDidModifyOrigin): Deleted.
        (WebKit::WebDatabaseManager::dispatchDidModifyDatabase): Deleted.
        * WebProcess/WebCoreSupport/WebDatabaseManager.h: Removed.
        * WebProcess/WebCoreSupport/WebDatabaseManager.messages.in: Removed.
        * WebProcess/WebCoreSupport/ios/WebDatabaseManagerIOS.mm: Removed.
        (WebKit::WebDatabaseManager::dispatchDidAddNewOrigin): Deleted.
        (WebKit::WebDatabaseManager::dispatchDidDeleteDatabase): Deleted.
        (WebKit::WebDatabaseManager::dispatchDidDeleteDatabaseOrigin): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::processWillSuspendImminently):
        (WebKit::m_webSQLiteDatabaseTracker): Deleted.

2015-12-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Unreviewed, fix GtkDoc after r193620

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

2015-12-18  Dan Bernstein  <mitz@apple.com>

        WebPage::didCompleteUserMediaPermissionCheck and WebPage::didReceiveUserMediaPermissionDecision are exported
        https://bugs.webkit.org/show_bug.cgi?id=152429

        Reviewed by Tim Horton.

        * WebProcess/WebPage/WebPage.h: Removed WK_EXPORT specifiers from these two declarations.

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

        Move networking code from Shared to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=152421

        Reviewed by Antti Koivisto.

        Since recently removing the non-NetworkProcess configurations, this code is no longer shared with the WebProcess.

        * CMakeLists.txt:
        * DerivedSources.make:
        * NetworkProcess/CustomProtocols: Copied from Source/WebKit2/Shared/Network/CustomProtocols.
        * NetworkProcess/Downloads: Copied from Source/WebKit2/Shared/Downloads.
        * NetworkProcess/Downloads/Download.cpp: Copied from Source/WebKit2/Shared/Downloads/Download.cpp.
        * NetworkProcess/Downloads/Download.h: Copied from Source/WebKit2/Shared/Downloads/Download.h.
        * NetworkProcess/Downloads/DownloadID.h: Copied from Source/WebKit2/Shared/Downloads/DownloadID.h.
        * NetworkProcess/Downloads/DownloadManager.cpp: Copied from Source/WebKit2/Shared/Downloads/DownloadManager.cpp.
        * NetworkProcess/Downloads/DownloadManager.h: Copied from Source/WebKit2/Shared/Downloads/DownloadManager.h.
        * NetworkProcess/NetworkProcessCreationParameters.cpp: Copied from Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.cpp.
        * NetworkProcess/NetworkProcessCreationParameters.h: Copied from Source/WebKit2/Shared/Network/NetworkProcessCreationParameters.h.
        * NetworkProcess/NetworkProcessSupplement.h: Copied from Source/WebKit2/Shared/Network/NetworkProcessSupplement.h.
        * NetworkProcess/NetworkResourceLoadParameters.cpp: Copied from Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp.
        * NetworkProcess/NetworkResourceLoadParameters.h: Copied from Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.h.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * Shared/Downloads: Removed.
        * Shared/Downloads/Download.cpp: Removed.
        * Shared/Downloads/Download.h: Removed.
        * Shared/Downloads/DownloadAuthenticationClient.cpp: Removed.
        * Shared/Downloads/DownloadAuthenticationClient.h: Removed.
        * Shared/Downloads/DownloadID.h: Removed.
        * Shared/Downloads/DownloadManager.cpp: Removed.
        * Shared/Downloads/DownloadManager.h: Removed.
        * Shared/Downloads/cocoa: Removed.
        * Shared/Downloads/cocoa/DownloadCocoa.mm: Removed.
        * Shared/Downloads/efl: Removed.
        * Shared/Downloads/efl/DownloadSoupErrorsEfl.cpp: Removed.
        * Shared/Downloads/gtk: Removed.
        * Shared/Downloads/gtk/DownloadSoupErrorsGtk.cpp: Removed.
        * Shared/Downloads/ios: Removed.
        * Shared/Downloads/ios/DownloadIOS.mm: Removed.
        * Shared/Downloads/mac: Removed.
        * Shared/Downloads/mac/DownloadMac.mm: Removed.
        * Shared/Downloads/soup: Removed.
        * Shared/Downloads/soup/DownloadSoup.cpp: Removed.
        * Shared/Downloads/soup/DownloadSoupErrors.h: Removed.
        * Shared/Network: Removed.
        * Shared/Network/CustomProtocols: Removed.
        * Shared/Network/CustomProtocols/Cocoa: Removed.
        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm: Removed.
        * Shared/Network/CustomProtocols/CustomProtocolManager.h: Removed.
        * Shared/Network/CustomProtocols/CustomProtocolManager.messages.in: Removed.
        * Shared/Network/CustomProtocols/soup: Removed.
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.cpp: Removed.
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.h: Removed.
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerSoup.cpp: Removed.
        * Shared/Network/NetworkProcessCreationParameters.cpp: Removed.
        * Shared/Network/NetworkProcessCreationParameters.h: Removed.
        * Shared/Network/NetworkProcessSupplement.h: Removed.
        * Shared/Network/NetworkResourceLoadParameters.cpp: Removed.
        * Shared/Network/NetworkResourceLoadParameters.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2015-12-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        LayerTreeHostGtk triggers -Wunused-private-field
        https://bugs.webkit.org/show_bug.cgi?id=152410

        Reviewed by Carlos Garcia Campos.

        Remove the unused member variable.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

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

        Add types for DownloadID and TaskIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=152401

        Reviewed by Brady Eidson.

        DownloadID and TaskIdentifier used to both be just uint64_t's.
        It is confusing to distinguish between them, so now they both have names.
        We need a HashMap<TaskIdentifier, DownloadID> instead of a HashMap<uint64_t, uint64_t>.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::downloadRequest):
        (WebKit::NetworkProcess::resumeDownload):
        (WebKit::NetworkProcess::cancelDownload):
        (WebKit::NetworkProcess::getNetworkProcessStatistics):
        (WebKit::NetworkProcess::logDiagnosticMessage):
        (WebKit::NetworkProcess::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcess::logDiagnosticMessageWithValue):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::createDataTaskWithRequest):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkDataTask::resume):
        (WebKit::NetworkDataTask::taskIdentifier): Deleted.
        * Shared/Downloads/Download.cpp:
        (WebKit::Download::Download):
        (WebKit::Download::messageSenderDestinationID):
        * Shared/Downloads/Download.h:
        (WebKit::Download::downloadID):
        * Shared/Downloads/DownloadID.h: Added.
        (WebKit::DownloadID::DownloadID):
        (WebKit::DownloadID::operator==):
        (WebKit::DownloadID::downloadID):
        (IPC::ArgumentCoder<WebKit::DownloadID>::encode):
        (IPC::ArgumentCoder<WebKit::DownloadID>::decode):
        (WTF::DownloadIDHash::hash):
        (WTF::DownloadIDHash::equal):
        (WTF::HashTraits<WebKit::DownloadID>::emptyValue):
        (WTF::HashTraits<WebKit::DownloadID>::constructDeletedValue):
        (WTF::HashTraits<WebKit::DownloadID>::isDeletedValue):
        * Shared/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::DownloadManager):
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertHandleToDownload):
        (WebKit::DownloadManager::resumeDownload):
        (WebKit::DownloadManager::cancelDownload):
        * Shared/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::isDownloading):
        * UIProcess/API/C/WKDownload.cpp:
        (WKDownloadGetID):
        (WKDownloadCopyRequest):
        * UIProcess/Downloads/DownloadProxy.h:
        (WebKit::DownloadProxy::downloadID):
        (WebKit::DownloadProxy::request):
        (WebKit::DownloadProxy::resumeData):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::createDownloadProxy):
        (WebKit::DownloadProxyMap::downloadFinished):
        (WebKit::DownloadProxyMap::processDidClose):
        * UIProcess/Downloads/DownloadProxyMap.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::frameDidBecomeFrameSet):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::invalidatePolicyListener):
        (WebKit::WebFrame::didReceivePolicyDecision):
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSessionID):
        (WebKit::WebPage::didReceivePolicyDecision):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-12-17  Dan Bernstein  <mitz@apple.com>

        Fixed a typo from r194022.

        * Configurations/WebKit.xcconfig: Changed PlugInProcessShim.dylib to PluginProcessShim.dylib.

2015-12-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r194250 and r194254.
        https://bugs.webkit.org/show_bug.cgi?id=152414

        broke api tests (Requested by alexchristensen on #webkit).

        Reverted changesets:

        "Add types for DownloadID and TaskIdentifier"
        https://bugs.webkit.org/show_bug.cgi?id=152401
        http://trac.webkit.org/changeset/194250

        "Build fix after r194250"
        http://trac.webkit.org/changeset/194254

2015-12-17  Alex Christensen  <achristensen@webkit.org>

        Build fix after r194250

        * WebKit2.xcodeproj/project.pbxproj:
        Change target membership from all to WebKit.

2015-12-17  Alex Christensen  <achristensen@webkit.org>

        Add types for DownloadID and TaskIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=152401

        Reviewed by Brady Eidson.

        DownloadID and TaskIdentifier used to both be just uint64_t's.
        It is confusing to distinguish between them, so now they both have names.
        We need a HashMap<TaskIdentifier, DownloadID> instead of a HashMap<uint64_t, uint64_t>.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::downloadRequest):
        (WebKit::NetworkProcess::resumeDownload):
        (WebKit::NetworkProcess::cancelDownload):
        (WebKit::NetworkProcess::getNetworkProcessStatistics):
        (WebKit::NetworkProcess::logDiagnosticMessage):
        (WebKit::NetworkProcess::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcess::logDiagnosticMessageWithValue):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::createDataTaskWithRequest):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkDataTask::resume):
        (WebKit::NetworkDataTask::taskIdentifier): Deleted.
        * Shared/Downloads/Download.cpp:
        (WebKit::Download::Download):
        (WebKit::Download::messageSenderDestinationID):
        * Shared/Downloads/Download.h:
        (WebKit::Download::downloadID):
        * Shared/Downloads/DownloadID.h: Added.
        (WebKit::DownloadID::DownloadID):
        (WebKit::DownloadID::operator==):
        (WebKit::DownloadID::downloadID):
        (IPC::ArgumentCoder<WebKit::DownloadID>::encode):
        (IPC::ArgumentCoder<WebKit::DownloadID>::decode):
        (WTF::DownloadIDHash::hash):
        (WTF::DownloadIDHash::equal):
        (WTF::HashTraits<WebKit::DownloadID>::emptyValue):
        (WTF::HashTraits<WebKit::DownloadID>::constructDeletedValue):
        (WTF::HashTraits<WebKit::DownloadID>::isDeletedValue):
        * Shared/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::DownloadManager):
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertHandleToDownload):
        (WebKit::DownloadManager::resumeDownload):
        (WebKit::DownloadManager::cancelDownload):
        * Shared/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::isDownloading):
        * UIProcess/API/C/WKDownload.cpp:
        (WKDownloadGetID):
        (WKDownloadCopyRequest):
        * UIProcess/Downloads/DownloadProxy.h:
        (WebKit::DownloadProxy::downloadID):
        (WebKit::DownloadProxy::request):
        (WebKit::DownloadProxy::resumeData):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::createDownloadProxy):
        (WebKit::DownloadProxyMap::downloadFinished):
        (WebKit::DownloadProxyMap::processDidClose):
        * UIProcess/Downloads/DownloadProxyMap.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::frameDidBecomeFrameSet):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseSync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::invalidatePolicyListener):
        (WebKit::WebFrame::didReceivePolicyDecision):
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSessionID):
        (WebKit::WebPage::didReceivePolicyDecision):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-12-17  Simon Fraser  <simon.fraser@apple.com>

        Disable viewport "shrink to fit" outside of multitasking mode
        https://bugs.webkit.org/show_bug.cgi?id=152403
        rdar://problem/23818102

        Reviewed by Tim Horton.
        
        Plumb through a value that indicates whether the WKWebView is in split screen,
        and use it to conditionally enable shrink-to-fit mode only in split screen.
        
        * Shared/VisibleContentRectUpdateInfo.cpp: Added m_allowShrinkToFit, and sort
        the member variables, and encoding order, to optimize packing, with some initializers.
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::allowShrinkToFit):
        (WebKit::operator==):
        * UIProcess/API/Cocoa/WKWebView.mm: Add _allowsViewportShrinkToFit member variable,
        with getter and setter.
        (-[WKWebView _updateVisibleContentRects]): Unwrap the line.
        (-[WKWebView _setAllowsViewportShrinkToFit:]):
        (-[WKWebView _allowsViewportShrinkToFit]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: _allowsViewportShrinkToFit SPI.
        * UIProcess/WebPageProxy.h: Pass allowShrinkToFit through.
        * UIProcess/ios/WKContentView.mm: Ditto.
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects): Padd allowShrinkToFit to the web process via the VisibleContentRectUpdateInfo.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Store m_ignoreViewportScalingConstraints in a member variable since we can't
        get back to the prefs later.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects): This is the behavior change: call setCanIgnoreScalingConstraints()
        on the viewport configuration, consulting the pref (via m_ignoreViewportScalingConstraints) and the new
        visibleContentRectUpdateInfo.allowShrinkToFit().

2015-12-16  Simon Fraser  <simon.fraser@apple.com>

        ViewportConfiguration functions should return a bool to say if anything changed
        https://bugs.webkit.org/show_bug.cgi?id=152353

        Reviewed by Tim Horton.

        Rather than callers all checking whether setting ViewportConfiguration values
        changes state, have its functions return a bool if the values change.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameDidLayout):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportPropertiesDidChange):
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSize):

2015-12-16  Alex Christensen  <achristensen@webkit.org>

        Progress towards implementing downloads with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=152371

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::downloadRequest):
        (WebKit::NetworkProcess::resumeDownload):
        (WebKit::NetworkProcess::cancelDownload):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Downloads/Download.cpp:
        (WebKit::Download::Download):
        (WebKit::Download::didReceiveAuthenticationChallenge):
        * Shared/Downloads/Download.h:
        * Shared/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertHandleToDownload):
        (WebKit::DownloadManager::resumeDownload):
        (WebKit::DownloadManager::cancelDownload):
        (WebKit::DownloadManager::downloadFinished):
        (WebKit::DownloadManager::didCreateDownload):
        * Shared/Downloads/DownloadManager.h:
        * Shared/Downloads/cocoa: Added.
        * Shared/Downloads/cocoa/DownloadCocoa.mm: Added.
        (WebKit::Download::start):
        (WebKit::Download::resume):
        (WebKit::Download::cancel):
        (WebKit::Download::platformInvalidate):
        * Shared/Downloads/ios/DownloadIOS.mm:
        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::resume):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::resumeDownload):
        * UIProcess/WebProcessPool.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-12-16  Simon Fraser  <simon.fraser@apple.com>

        ViewportConfiguration functions should return a bool to say if anything changed
        https://bugs.webkit.org/show_bug.cgi?id=152353

        Reviewed by Tim Horton.

        Rather than callers all checking whether setting ViewportConfiguration values
        changes state, have its functions return a bool if the values change.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameDidLayout):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportPropertiesDidChange):
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSize):

2015-12-16  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r191299): Zoom gestures are enabled even if allowsMagnification=NO
        https://bugs.webkit.org/show_bug.cgi?id=152373
        <rdar://problem/23931998>

        Reviewed by Simon Fraser.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::gestureEventWasNotHandledByWebCoreFromViewOnly):
        Don't pass the event on to ViewGestureController if we shouldn't handle it,
        just like we would have done in magnifyWithEvent before.

2015-12-16  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r194125): Crashes in touchesEndedWithEvent on occasion when interacting with the page
        https://bugs.webkit.org/show_bug.cgi?id=152366
        <rdar://problem/23929672>

        Reviewed by Beth Dakin.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::touchesEndedWithEvent):
        (WebKit::WebViewImpl::touchesCancelledWithEvent):
        NSTouch identifiers aren't pointer-comparable. We need to use isEqual to
        compare them and find the ones to remove.

2015-12-16  Simon Fraser  <simon.fraser@apple.com>

        Simplify isOverlayScrollbar() logic
        https://bugs.webkit.org/show_bug.cgi?id=152357

        Reviewed by Beth Dakin.

        Replace code that checks for isOverlayScrollbar() explicitly with calls to new
        occupiedWidth()/occupiedHeight() functions on Scrollbar, which do the overlay
        scrollbar check internally.
        
        Add ScrollableArea::scrollbarIntrusion() which returns an IntSize with the occupiedWidth
        and occupiedHeight of any scrollbars, and use it in a few places.

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::updateScrollbars):
        (WebKit::PDFPlugin::maximumScrollPosition):

2015-12-16  Alex Christensen  <achristensen@webkit.org>

        Build fix when using NETWORK_SESSION after r193972.

        Rubber-stamped by Joseph Pecoraro.

        Renamed NetworkSessionDelegate to WKNetworkSessionDelegate to conform to the 
        newly-enforced style rule in check-for-inappropriate-objc-class-names.

        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toNSURLSessionAuthChallengeDisposition):
        (-[WKNetworkSessionDelegate initWithNetworkSession:]):
        (WebKit::NetworkSession::NetworkSession):
        (-[NetworkSessionDelegate initWithNetworkSession:]): Deleted.

2015-12-16  Alex Christensen  <achristensen@webkit.org>

        Implement Web Timing when using NETWORK_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=152285

        Reviewed by Darin Adler.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[NetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (WebKit::NetworkSession::NetworkSession):
        Use functions moved to ResourceLoadTiming.h.  setCollectsTimingData is for Mavericks, _timingDataOptions is post-Mavericks.

2015-12-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Fetch API] Add fetch API compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=152254

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2015-12-15  Tim Horton  <timothy_horton@apple.com>

        [Mac] Gesture Events should not have negative scale
        https://bugs.webkit.org/show_bug.cgi?id=151065
        <rdar://problem/23474123>

        Reviewed by Anders Carlsson.

        * Shared/NativeWebGestureEvent.h:
        * Shared/mac/NativeWebGestureEventMac.mm:
        (WebKit::distanceForTouches):
        (WebKit::NativeWebGestureEvent::NativeWebGestureEvent):
        Compute the distance between the two oldest touches, and use that as
        the scale (really the gesture diameter) on the event, instead of
        passing through AppKit's magnification (which is computed differently).
        This matches the documented behavior of the existing gesture events on iOS.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView touchesBeganWithEvent:]):
        (-[WKWebView touchesMovedWithEvent:]):
        (-[WKWebView touchesEndedWithEvent:]):
        (-[WKWebView touchesCancelledWithEvent:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView touchesBeganWithEvent:]):
        (-[WKView touchesMovedWithEvent:]):
        (-[WKView touchesEndedWithEvent:]):
        (-[WKView touchesCancelledWithEvent:]):
        Plumb touch events through to WebViewImpl.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::magnifyWithEvent):
        (WebKit::WebViewImpl::touchesOrderedByAge):
        (WebKit::WebViewImpl::touchesBeganWithEvent):
        (WebKit::WebViewImpl::touchesMovedWithEvent):
        (WebKit::WebViewImpl::touchesEndedWithEvent):
        (WebKit::WebViewImpl::touchesCancelledWithEvent):
        (WebKit::WebViewImpl::rotateWithEvent):
        Keep track of the most recent incoming touches, by identifier, in age order.
        Pass them through to NativeWebGestureEvent so it can determine the gesture diameter.

2015-12-15  Anders Carlsson  <andersca@apple.com>

        Call DatabaseManager directly from WKBundle.cpp
        https://bugs.webkit.org/show_bug.cgi?id=152317

        Reviewed by Tim Horton.

        This is in preparation for getting rid of some old database manager code.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleClearAllDatabases):
        (WKBundleSetDatabaseQuota):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearAllDatabases): Deleted.
        (WebKit::InjectedBundle::setDatabaseQuota): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:

2015-12-15  Daniel Bates  <dabates@apple.com>

        Guard code that uses class LayerTreeHost with USE(COORDINATED_GRAPHICS) or USE(TEXTURE_MAPPER)
        https://bugs.webkit.org/show_bug.cgi?id=152265

        Reviewed by Tim Horton.

        We neither make use of LayerTreeHost on Mac nor on iOS. We should guard code that makes
        use of this class as applicable. This also fixes the iOS Simulator build when using
        Apple Internal software.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Guard code that used LayerTreeHost.
        * WebProcess/WebPage/LayerTreeHost.cpp: Guard contents of file with USE(COORDINATED_GRAPHICS) || USE(TEXTURE_MAPPER).
        * WebProcess/WebPage/LayerTreeHost.h: Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scalePage): Ditto.
        (WebKit::WebPage::setDeviceScaleFactor): Ditto.
        * WebProcess/WebPage/WebPage.h: Substitute header LayerTreeContext.h for LayerTreeHost.h since we make use
        of the enum class LayerHostingMode.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects): Remove unnecessary code; DrawingArea::layerTreeHost() always
        returns nullptr on iOS.

2015-12-15  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Operate with a reference to the TextureMapper wherever possible
        https://bugs.webkit.org/show_bug.cgi?id=152118

        Reviewed by Martin Robinson.

        Replace pointers to the TextureMapper object with references.

        * Shared/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStoreTile::swapBuffers):
        (WebKit::CoordinatedBackingStore::paintTilesToTextureMapper):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        (WebKit::CoordinatedBackingStore::drawBorder):
        (WebKit::CoordinatedBackingStore::drawRepaintCounter):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * Shared/CoordinatedGraphics/CoordinatedBackingStore.h:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebKit::CoordinatedGraphicsScene::paintToGraphicsContext):
        (WebKit::CoordinatedGraphicsScene::commitPendingBackingStoreOperations):

2015-12-14  YongGeol Jung  <yg48.jung@samsung.com>

        [Coordinated Graphics] CSS transition effect is not shown when transformed with "%" unit.
        https://bugs.webkit.org/show_bug.cgi?id=152278

        Reviewed by Darin Adler.

        boxSize is encoded as FloatSize type but decoded as IntSize type.
        So boxSize gets invalid value after decoding.
        Due to this layer goes to out of screen during animation.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextureMapperAnimation>::decode):

2015-12-14  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/23886216> REGRESSION (r194022): Production builds of PluginProcess crash on launch when not installed in /System
        https://bugs.webkit.org/show_bug.cgi?id=152291

        Reviewed by Darin Adler.

        * Configurations/PluginProcess.xcconfig: Added a FIXME.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::addDYLDEnvironmentAdditions): Set DYLD_LIBRARY_PATH to point to where the shims
        are. This is needed because starting in El Capitan, the processes’ main executables link
        directly against the shims, so the dynamic linker needs to be able to find them in the
        non-/System location. Also added a FIXME about not having to set DYLD_INSERT_LIBRARIES when
        the main executables link the them directly.

2015-12-14  Simon Fraser  <simon.fraser@apple.com>

        Dump some more data in the RemoteLayerTreeTransaction
        https://bugs.webkit.org/show_bug.cgi?id=152283

        Reviewed by Dean Jackson.
        
        Dump some scale factors, viewport meta tag width and render tree size.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::description):

2015-12-14  Tim Horton  <timothy_horton@apple.com>

        Frequent crash under -[WKPDFView web_setMinimumSize:]_block_invoke
        https://bugs.webkit.org/show_bug.cgi?id=152266
        <rdar://problem/22092676>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setMinimumSize:]):
        We weren't retaining the UIScrollView, but depending on it surviving
        into this block's invocation.

        We don't need to do this asynchronously anymore because the referenced
        bug is fixed, so make it happen synchronously. This also fixes the crash
        because there's no opportunity for the scroll view to be released.

2015-12-14  Tim Horton  <timothy_horton@apple.com>

        TiledCoreAnimationDrawingAreaProxy::createFenceForGeometryUpdate() sets fence port on context twice
        https://bugs.webkit.org/show_bug.cgi?id=152239
        <rdar://problem/22893289>

        Reviewed by Darin Adler.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::createFenceForGeometryUpdate):
        No need to setFencePort; createFencePort also installs it on the creating context.

2015-12-12  Alex Christensen  <achristensen@webkit.org>

        Use existing code for redirects when using NETWORK_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=152207
        rdar://problem/23860624

        Reviewed by Darin Adler.
        
        This fixes http/tests/cookies/set-cookie-on-redirect.html when using NETWORK_SESSION.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::continueWillSendRequest):
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::willPerformHTTPRedirection):
        (WebKit::NetworkLoad::didReceiveChallenge):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkSession.h:

2015-12-13  Tim Horton  <timothy_horton@apple.com>

        Adopt CGIOSurfaceContextCreateImageReference to avoid unnecessary readback
        https://bugs.webkit.org/show_bug.cgi?id=150988
        <rdar://problem/18993594>

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSelectionSnapshot):
        Adopt sinkIntoImage and drawConsumingImageBuffer in a few places.

2015-12-13  Dan Bernstein  <mitz@apple.com>

        Another fix after r194018.

        * Configurations/BaseTarget.xcconfig:
        * Configurations/BaseXPCService.xcconfig:

2015-12-13  Dan Bernstein  <mitz@apple.com>

        [Mac] Shims used by XPC services are installed inside legacy process bundles
        https://bugs.webkit.org/show_bug.cgi?id=152233

        Reviewed by Sam Weinig.

        Have the shim dylibs installed in the framework’s Frameworks directory instead.

        * Configurations/BaseLegacyProcess.xcconfig: Simplified now that EXCLUDED_SHIM_FILE_NAME is
          no longer defined, because shims aren’t copied into legacy processes.

        * Configurations/NetworkProcess.xcconfig: Removed definition of EXCLUDED_SHIM_FILE_NAME.
        * Configurations/PluginProcess.xcconfig: Ditto.
        * Configurations/WebContentProcess.xcconfig: Ditto.

        * Configurations/Shim.xcconfig: Install the shims when building for OS X. Added definitions
          of INSTALL_PATH and DYLIB_INSTALL_NAME_BASE which are now common to all shims.

        * Configurations/PluginProcessShim.xcconfig: Removed definitions of INSTALL_PATH and
          DYLIB_INSTALL_NAME_BASE from here, now that they are defined for all shims in
          Shim.xcconfig.
        * Configurations/SecItemShim.xcconfig: Ditto.
        * Configurations/WebProcessShim.xcconfig:

        * Configurations/WebKit.xcconfig: Added the shims to EXCLUDED_SOURCE_FILE_NAMES for iOS.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX-10.9-10.10.plist: Changed
          the value of DYLD_INSERT_LIBRARIES to point to the shim’s new location.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64-10.9-10.10.Info.plist: Ditto.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX-10.9-10.10.plist: Ditto.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::computeProcessShimPath): Changed to return the new paths, which are all inside the
          framework’s Frameworks directory.

        * WebKit2.xcodeproj/project.pbxproj:
        - Removed references to WRAPPER_NAME from the “Copy XPC services for engineering builds”
          build phase in the All target, becase WRAPPER_NAME is empty in an aggregate target.
        - Removed the PlugInProcess target’s dependency on the PluginProcessShim target and its
          Copy Plug-in Process Shim build phase.
        - Removed the NetworkProcess target’s dependency on the SecItemShim target and its Copy
          Sec Item Shim build phase.
        - Removed the WebProcess target’s dependency on the WebProcessShim target and its Copy
          WebProcessShim build phase.
        - Made the WebKit target depend on the shim targets, and added to it a Copy Shims build
          phase that copies the shims into the framework’s Frameworks directory.

2015-12-13  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * Configurations/PluginProcess.xcconfig:

2015-12-13  Dan Bernstein  <mitz@apple.com>

        [Mac] Shims aren’t inserted properly on Yosemite when building with the El Capitan SDK
        https://bugs.webkit.org/show_bug.cgi?id=152229

        Reviewed by Darin Adler.

        * Configurations/BaseTarget.xcconfig: Defined WK_LINK_SHIM on OS X to YES or NO based on the
          target version.
        * Configurations/BaseXPCService.xcconfig: Define WK_XPC_SERVICE_INFOPLIST_SUFFIX to
          "-10.9-10.10" when targeting those OS X versions.
        * Configurations/NetworkService.xcconfig: Use WK_XPC_SERVICE_INFOPLIST_SUFFIX in the
          definition of INFOPLIST_FILE. Use WK_LINK_SHIM in the definition of OTHER_LDFLAGS.
        * Configurations/PluginProcess.xcconfig: Use WK_LINK_SHIM in the definition of
          LDFLAGS_SHIM_Production for OS X.
        * Configurations/PluginService.32.xcconfig: Use WK_XPC_SERVICE_INFOPLIST_SUFFIX in the
          definition of INFOPLIST_FILE. Use WK_LINK_SHIM in the definition of OTHER_LDFLAGS.
        * Configurations/PluginService.64.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Ditto.

2015-12-12  Katlyn Graff  <kgraff@apple.com>

        Safari background tabs should be fully suspended where possible.
        https://bugs.webkit.org/show_bug.cgi?id=150515

        Reviewed by Ryosuke Niwa.

        Added a runtime flag enabling tab suspension, default off.

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

2015-12-11  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add a setting to allow the mock media capture devices to be enabled and disabled
        https://bugs.webkit.org/show_bug.cgi?id=152197

        Reviewed by Dean Jackson.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMockCaptureDevicesEnabled):
        (WKPreferencesGetMockCaptureDevicesEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _mockCaptureDevicesEnabled]):
        (-[WKPreferences _setMockCaptureDevicesEnabled:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        check-for-inappropriate-objc-class-names should check all class names, not just externally visible ones
        https://bugs.webkit.org/show_bug.cgi?id=152156

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        Rename internal classes with "_WK" prefix.

2015-12-10  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Expose media capture devices persistent permissions to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=152087

        Reviewed by Chris Dumez.

        * CMakeLists.txt: Add UserMediaPermissionCheckProxy.cpp and WKUserMediaPermissionCheck.cpp.

        * Shared/API/APIObject.h: Define UserMediaPermissionCheck.

        * Shared/API/c/WKBase.h: Add WKUserMediaPermissionCheckRef typedef.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::checkUserMediaPermissionForOrigin): New.

        * UIProcess/API/C/WKAPICast.h: Add WKUserMediaPermissionCheckRef/UserMediaPermissionCheckProxy mapping.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient): Implement checkUserMediaPermissionForOrigin.

        * UIProcess/API/C/WKPageUIClient.h: Add WKCheckUserMediaPermissionCallback typedef and add
          checkUserMediaPermissionForOrigin to WKPageUIClientV6.

        * UIProcess/API/C/WKUserMediaPermissionCheck.cpp: Added.
        (WKUserMediaPermissionCheckGetTypeID):
        (WKUserMediaPermissionCheckSetHasPermission):

        * UIProcess/API/C/WKUserMediaPermissionCheck.h: Added.

        * UIProcess/UserMediaPermissionCheckProxy.cpp: Added.
        (WebKit::UserMediaPermissionCheckProxy::UserMediaPermissionCheckProxy):
        (WebKit::UserMediaPermissionCheckProxy::setHasPermission):
        (WebKit::UserMediaPermissionCheckProxy::invalidate):
        * UIProcess/UserMediaPermissionCheckProxy.h: Added.
        (WebKit::UserMediaPermissionCheckProxy::create):
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::invalidateRequests):
        (WebKit::UserMediaPermissionRequestManagerProxy::createRequest):
        (WebKit::UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision):
        (WebKit::UserMediaPermissionRequestManagerProxy::createUserMediaPermissionCheck):
        (WebKit::UserMediaPermissionRequestManagerProxy::didCompleteUserMediaPermissionCheck):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        (WebKit::WebPageProxy::checkUserMediaPermissionForFrame):
        (WebKit::WebPageProxy::requestNotificationPermission):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebKit2.xcodeproj/project.pbxproj: Add UserMediaPermissionCheckProxy.*, and WKUserMediaPermissionCheck.*.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startUserMediaRequest): Renamed from startRequest.
        (WebKit::UserMediaPermissionRequestManager::cancelUserMediaRequest): Renamed from cancelRequest.
        (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision): m_requestToIDMap ->
          m_userMediaRequestToIDMap.remove.
        (WebKit::UserMediaPermissionRequestManager::startUserMediaPermissionCheck): New, start the request.
        (WebKit::UserMediaPermissionRequestManager::cancelUserMediaPermissionCheck): New, cancel
          the request.
        (WebKit::UserMediaPermissionRequestManager::didCompleteUserMediaPermissionCheck): New, 
          all the request completion method.
        (WebKit::UserMediaPermissionRequestManager::startRequest): Deleted.
        (WebKit::UserMediaPermissionRequestManager::cancelRequest): Deleted.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:

        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        (WebKit::WebUserMediaClient::requestUserMediaAccess): startRequest -> startUserMediaRequest.
        (WebKit::WebUserMediaClient::cancelUserMediaAccessRequest): cancelRequest -> cancelUserMediaRequest.
        (WebKit::WebUserMediaClient::checkUserMediaPermission): New.
        (WebKit::WebUserMediaClient::cancelUserMediaPermissionCheck): New.
        * WebProcess/WebCoreSupport/WebUserMediaClient.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCompleteUserMediaPermissionCheck): New.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add DidCompleteUserMediaPermissionCheck.

2015-12-10  Joseph Pecoraro  <pecoraro@apple.com>

        Remote Inspector: Verify the identity of the other side of XPC connections
        https://bugs.webkit.org/show_bug.cgi?id=152153

        Reviewed by Brian Burg.

        * Shared/mac/SandboxUtilities.mm:
        * UIProcess/ApplicationStateTracker.mm:
        Use new header.

2015-12-10  Alex Christensen  <achristensen@webkit.org>

        REGRESSION (r192796) WKBundlePageResourceLoadClient should be able to setHTTPBody in willSendRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=152022
        rdar://problem/23763584

        Reviewed by Darin Adler.

        * Shared/API/c/WKURLRequest.cpp:
        (WKURLRequestCopyHTTPMethod):
        (WKURLRequestCopyWithHTTPBody):
        (WKURLRequestSetDefaultTimeoutInterval):
        * Shared/API/c/WKURLRequest.h:
        Make WKURLRequestCopyWithHTTPBody SPI for testing.
        * Shared/API/c/mac/WKURLRequestNS.mm:
        (WKURLRequestCreateWithNSURLRequest):
        Crash if someone tries to use an NSURLRequest with HTTPBodyStream, which will not work with the network process.
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        (WebKit::InjectedBundlePageResourceLoadClient::willSendRequestForFrame):
        Use an HTTP body if the client's willSendRequestForFrame returned one.
        This is the functional change of this patch.

2015-12-10  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Reserve capacity for the children vector in CoordinatedGraphicsScene::setLayerChildrenIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=152117

        Reviewed by Martin Robinson.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::setLayerChildrenIfNeeded): Reserve the capacity
        for the new Vector that will contain the same number of items as the Vector
        on the CoordinatedGraphicsLayerState object.

2015-12-09  Daniel Bates  <dabates@apple.com>

        [iOS] Bail out if the page proxy is invalid when WebPageProxy::processWillBecome{Foreground, Suspended}() are called
        https://bugs.webkit.org/show_bug.cgi?id=151877

        Reviewed by Darin Adler.

        We cannot assume that a WebPageProxy is in a valid state when WebPageProxy::processWillBecome{Foreground, Suspended}()
        are called because these callbacks may occur after the web process crashed and before a
        WebPageProxy attaches to a new web process (and hence is considered in a valid state).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processWillBecomeSuspended): Early return if the page proxy is invalid.
        (WebKit::WebPageProxy::processWillBecomeForeground): Ditto.

2015-12-09  Commit Queue  <commit-queue@webkit.org>

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

        caused all inspector tests to assert in WK2 Debug (Requested
        by brrian on #webkit).

        Reverted changeset:

        "Web Inspector: reproducible debug ASSERT when inspecting the
        inspector (WK2)"
        https://bugs.webkit.org/show_bug.cgi?id=152080
        http://trac.webkit.org/changeset/193864

2015-12-09  Brian Burg  <bburg@apple.com>

        Web Inspector: reproducible debug ASSERT when inspecting the inspector (WK2)
        https://bugs.webkit.org/show_bug.cgi?id=152080

        Reviewed by Timothy Hatcher.

        We hit an assert underneath ChildProcessProxy::addMessageReceiver because
        we tried to connect the inspector page and inspected page more than once.
        This relationship is already set up in the constructor of WebProcessProxy.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::eagerlyCreateInspectorPage):

2015-12-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Need to change expectation result in ewk_settings_offline_web_application_cache_enabled API test
        https://bugs.webkit.org/show_bug.cgi?id=152063

        Reviewed by Csaba Osztrogonác.

        Expect false initial value of ewk_settings_offline_web_application_cache_enabled_get()
        because r193812 didn't enable it by default.

        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2015-12-09  Gwang Yoon Hwang  <yoon@igalia.com>

        [ThreadedCompositor] Add support for HiDPI
        https://bugs.webkit.org/show_bug.cgi?id=152071

        Reviewed by Carlos Garcia Campos.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::setDeviceScaleFactor): Added to receive the
        device scale factor from the layer tree host.
        (WebKit::ThreadedCompositor::renderLayerTree):
        Apply device scale factor before rendering the page.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        Send a updated device scale factor to the compositing thread.

2015-12-09  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Remove unnecessary guards in CoordinatedDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=152068

        Reviewed by Gyuyoung Kim.

        CoordinatedDrawingArea is only for UI side compositor of CoordinatedGraphics.
        So, COORDINATED_GRAPHICS_MULTIPROCESS guards are not necessary.
        This patch also removes COORDINATED_GRAPHICS_MULTIPROCESS guards from DrawingAreaImpl
        because of same reason.

        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:
        (WebKit::CoordinatedDrawingAreaProxy::CoordinatedDrawingAreaProxy): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::CoordinatedDrawingArea): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.h:

2015-12-09  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] Crash in WebProcess when loading large content with custom URI schemes
        https://bugs.webkit.org/show_bug.cgi?id=144262

        Reviewed by Carlos Garcia Campos.

        Properly handle scenarios where errors happen after reading the first
        chunk of data coming from the GInputStream provided by the application.

        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextIsLoadingCustomProtocol): New, checks whether a load
        is still in progress, after the startLoading method has been called.
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestReadCallback): Early return if the stream has been
        cancelled on finish_error, so that we make sure we don't keep on reading
        the GInputStream after that point.
        (webkit_uri_scheme_request_finish_error): Don't send a didFailWithError
        message to the Network process if the load is not longer in progress.
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.cpp:
        (WebKit::CustomProtocolManagerImpl::didFailWithError): Handle the case where
        an error is notified from the UI process after the first chunk has been read.
        (WebKit::CustomProtocolManagerImpl::didReceiveResponse): Handle the case where
        data might no longer be available if an error happened even before this point.
        * WebProcess/soup/WebKitSoupRequestInputStream.h:
        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamDidFailWithError): Notify the custom GInputStream
        that we no longer want to keep reading data in chunks due to a specific error.
        (webkitSoupRequestInputStreamReadAsync): Early finish the GTask with a specific
        error whenever webkitSoupRequestInputStreamDidFailWithError() has been called.

2015-12-09  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics][EFL] Fix unhandled web process message when launching MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=152048

        Reviewed by Gyuyoung Kim.

        WebPage should be initialized before updating preferences.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewInitialize): Deleted.
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        Calls WKViewSetIsActive instead of WKViewInitialize not to change the behavior
        of EFL port.
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::WebView):
        Initialize just before creating WebPage because there is not use case to separate
        initializing WebPage from creating in CoordinatedGraphics.
        (WebKit::WebView::initialize): Deleted.
        * UIProcess/CoordinatedGraphics/WebView.h:

2015-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to handle beforeunload events
        https://bugs.webkit.org/show_bug.cgi?id=139090

        Reviewed by Gustavo Noronha Silva.

        beforeunload is fired when a page is about to be closed, to ask
        the user for confirmation. This happens when reloading a page,
        when navigating to another page or when the page is closed by a
        user action (a tab or window closed). In the first two cases, the
        event is automatically fired by WebCore, but in the case of a user
        action we need additional API to ensure the event is fired before
        the page is closed. A new script dialog type has been added to
        handle beforeunload events and webkit_web_view_try_close() to
        allow applications to try to close the page.

        * UIProcess/API/gtk/WebKitScriptDialog.cpp:
        (webkit_script_dialog_confirm_set_confirmed): BeforeUnloadConfirm
        dialogs can also be confirmed.
        * UIProcess/API/gtk/WebKitScriptDialog.h: Add
        WEBKIT_SCRIPT_DIALOG_BEFORE_UNLOAD_CONFIRM script dialog type.
        * UIProcess/API/gtk/WebKitUIClient.cpp: Implement
        canRunBeforeUnloadConfirmPanel() and runBeforeUnloadConfirmPanel().
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewCreateJavaScriptDialog): Add secondaryText optional
        parameter for BeforeUnloadConfirm dialogs. Do not set the default
        response if the dialog was created without buttons.
        (webkitWebViewScriptDialog): Handle
        WEBKIT_SCRIPT_DIALOG_BEFORE_UNLOAD_CONFIRM script dialog type to
        create a message dialog for beforeunlos events.
        (webkit_web_view_class_init): Update documentation of
        WebKitWebView::close and WebKitWebView::script-dialog.
        (webkitWebViewRunJavaScriptBeforeUnloadConfirm): Emit WebKitWebView::script-dialog.
        (webkit_web_view_try_close): Try to close the page.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.

2015-12-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Missing to set ignoreTLSError to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=152047

        Reviewed by Csaba Osztrogonác.

        NetworkProcess has been enabled for all ports since r192796 though, EFL port
        didn't send the ignoreTLSError value to NetworkProcess. This has caused failure of EFL API tests
        related with ssl feature.

        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::setIgnoreTLSErrors):

2015-12-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] REGRESSION(r193616): WKPreferences test has been failed since r193616
        https://bugs.webkit.org/show_bug.cgi?id=151942

        Reviewed by Darin Adler.

        As wkpreference settings were moved from EwkView to WKPreferenceEfl, the offline-web-application-cache feature
        is enabled by default when running API test. It seems this option should be enabled by MiniBrowser.

        * UIProcess/efl/WebPreferencesEfl.cpp:
        (WebKit::WebPreferences::platformInitializeStore): Remove to enable web application cache feature here.

2015-12-09  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] layerTreeHost always exist in CoordinatedDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=151987

        Reviewed by Darin Adler.

        CoordinatedGraphics using UI side compositor always forces accelerated compositing.
        This patch cleans up dead code for layerTreeHost which always exists.

        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:
        (WebKit::CoordinatedDrawingAreaProxy::paint): Deleted.
        (WebKit::CoordinatedDrawingAreaProxy::setBackingStoreIsDiscardable): Deleted.
        (WebKit::CoordinatedDrawingAreaProxy::update): Deleted.
        (WebKit::CoordinatedDrawingAreaProxy::didUpdateBackingStoreState): Deleted.
        (WebKit::CoordinatedDrawingAreaProxy::exitAcceleratedCompositingMode): Deleted.
        (WebKit::CoordinatedDrawingAreaProxy::incorporateUpdate): Deleted.
        (WebKit::CoordinatedDrawingAreaProxy::enterAcceleratedCompositingMode): Deleted.
        (WebKit::CoordinatedDrawingAreaProxy::discardBackingStoreSoon): Deleted.
        (WebKit::CoordinatedDrawingAreaProxy::discardBackingStore): Deleted.
        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.h:
        (WebKit::CoordinatedDrawingAreaProxy::setBackingStoreIsDiscardable):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::CoordinatedDrawingArea): Deleted.
        (WebKit::CoordinatedDrawingArea::layerHostDidFlushLayers): Deleted.
        (WebKit::CoordinatedDrawingArea::scheduleCompositingLayerFlush): Deleted.
        (WebKit::CoordinatedDrawingArea::didUpdate): Deleted.
        (WebKit::CoordinatedDrawingArea::enterAcceleratedCompositingMode): Deleted.
        (WebKit::CoordinatedDrawingArea::scheduleDisplay): Deleted.
        (WebKit::CoordinatedDrawingArea::displayTimerFired): Deleted.
        (WebKit::CoordinatedDrawingArea::display): Deleted.
        (WebKit::shouldPaintBoundsRect): Deleted.
        (WebKit::CoordinatedDrawingArea::attachViewOverlayGraphicsLayer): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:

2015-12-08  Alex Christensen  <achristensen@webkit.org>

        Progress towards implementing downloads with NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=151883

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::~NetworkLoad):
        (WebKit::NetworkLoad::continueDidReceiveResponse):
        (WebKit::NetworkLoad::convertTaskToDownload):
        (WebKit::NetworkLoad::willPerformHTTPRedirection):
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didReceiveResponse):
        (WebKit::NetworkLoad::didReceiveData):
        (WebKit::NetworkLoad::didCompleteWithError):
        (WebKit::NetworkLoad::didBecomeDownload):
        (WebKit::NetworkLoad::didReceiveResponseAsync):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::didConvertToDownload):
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::didConvertHandleToDownload): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
        (WebKit::NetworkSession::~NetworkSession): Deleted.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[NetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[NetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::createDataTaskWithRequest):
        * Shared/Downloads/Download.h:
        * Shared/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::isDownloading):
        (WebKit::DownloadManager::activeDownloadCount):

2015-12-08  Joseph Pecoraro  <pecoraro@apple.com>

        Create a Sandbox SPI header
        https://bugs.webkit.org/show_bug.cgi?id=151981

        Reviewed by Andy Estes.

        * PluginProcess/mac/PluginProcessShim.mm:
        * Shared/ios/ChildProcessIOS.mm:
        * Shared/mac/ChildProcessMac.mm:
        * Shared/mac/SandboxUtilities.mm:

2015-12-08  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Rename UserMediaClient and UserMediaController methods
        https://bugs.webkit.org/show_bug.cgi?id=152001

        Reviewed by Brady Eidson.

        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        (WebKit::WebUserMediaClient::pageDestroyed):
        (WebKit::WebUserMediaClient::requestUserMediaAccess):
        (WebKit::WebUserMediaClient::cancelUserMediaAccessRequest):
        (WebKit::WebUserMediaClient::requestPermission): Deleted.
        (WebKit::WebUserMediaClient::cancelRequest): Deleted.
        * WebProcess/WebCoreSupport/WebUserMediaClient.h:

2015-12-08  Tomas Popela  <tpopela@redhat.com>

        [GTK] Remove an unused variable from WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=151999

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebContext.cpp:

2015-12-08  Chris Dumez  <cdumez@apple.com>

        Add diagnostic logging to measure speculative revalidation accuracy
        https://bugs.webkit.org/show_bug.cgi?id=151953
        <rdar://problem/23092196>

        Reviewed by Darin Adler.

        We track the following:
        1. Resources we knew about AND did not get requested
           A. We did not speculate (Good)
           B. We speculated but did not go to network (Bad)
           C. We speculated and went to network (Very bad)
        2. Resources we did not know about (Neutral)
        3. Resources we knew about AND got requested
           A. We did not speculate (Bad)
           B. We speculated but did not go to network (Good)
           C. We speculated and went to network (Very good)

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::allSpeculativeLoadingDiagnosticMessages):
        (WebKit::NetworkCache::printSpeculativeLoadingDiagnosticMessageCounts):
        (WebKit::NetworkCache::logSpeculativeLoadingDiagnosticMessage):
        (WebKit::NetworkCache::SpeculativeLoadManager::ExpiringEntry::ExpiringEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::PreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::wasRevalidated):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::markLoadAsCompleted):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieve):
        (WebKit::NetworkCache::SpeculativeLoadManager::addPreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        (WebKit::NetworkCache::makeSubresourcesKey): Deleted.
        (WebKit::NetworkCache::constructRevalidationRequest): Deleted.
        (WebKit::NetworkCache::responseNeedsRevalidation): Deleted.
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::saveToDiskIfReady): Deleted.
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage): Deleted.
        (WebKit::NetworkCache::SpeculativeLoadManager::satisfyPendingRequests): Deleted.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:

2015-12-08  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] REGRESSION(r173394): MiniBrowser stucked in an infinite loop if NETWORK_CACHE is disabled
        https://bugs.webkit.org/show_bug.cgi?id=137692

        Reviewed by Darin Adler.

        * WebProcess/Network/WebLoaderStrategy.cpp:
        (WebKit::maximumBufferingTime): Disable caching if NETWORK_CACHE is disabled.

2015-12-08  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Add API to provide preferences before creating ewk_view
        https://bugs.webkit.org/show_bug.cgi?id=151587

        Reviewed by Gyuyoung Kim.

        This patch adds ewk_view_configuration_settings_get to provide preferences
        before createing ewk_view.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view_configuration.cpp:
        (EwkViewConfiguration::EwkViewConfiguration):
        (ewk_view_configuration_settings_get):
        * UIProcess/API/efl/ewk_view_configuration.h:
        * UIProcess/API/efl/ewk_view_configuration_private.h:
        (EwkViewConfiguration::pageGroup):
        * UIProcess/API/efl/tests/test_ewk2_view_configuration.cpp:
        (TEST_F): Added test case for ewk_view_configuration_settings_get().

2015-12-07  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Notify WebCore when notification is clicked
        https://bugs.webkit.org/show_bug.cgi?id=151951

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitNotification.cpp:
        (webkit_notification_class_init): new clicked signal.
        (webkit_notification_clicked): method to emit the clicked signal.
        * UIProcess/API/gtk/WebKitNotification.h:
        * UIProcess/API/gtk/WebKitNotificationProvider.cpp:
        (WebKitNotificationProvider::notificationClickedCallback): handle the clicked signal and tell WebProcess about the click.
        (WebKitNotificationProvider::show): connect to the clicked signal in addition to closed.
        * UIProcess/API/gtk/WebKitNotificationProvider.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (notifyNotificationClicked): handle the click on our libnotify notification.
        (webkitWebViewShowNotification): add the "default" action to our libnotify notification to be notified of the click.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:

2015-12-07  Commit Queue  <commit-queue@webkit.org>

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

        This change broke existing LayoutTests on mac-wk2 (Requested
        by ryanhaddad on #webkit).

        Reverted changeset:

        "UIProcess should determine AppNap state for WebPage"
        https://bugs.webkit.org/show_bug.cgi?id=151964
        http://trac.webkit.org/changeset/193655

2015-12-05  Gavin Barraclough  <barraclough@apple.com>

        UIProcess should determine AppNap state for WebPage
        https://bugs.webkit.org/show_bug.cgi?id=151964

        Reviewed by Anders Carlson.

        Step 1 in unifying this with the iOS process suppression mechanism is to move the decision out of the WebContent process.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::dispatchViewStateChange):
        (WebKit::WebPageProxy::setPageActivityState):
        (WebKit::WebPageProxy::updateActivityToken):
        (WebKit::WebPageProxy::preferencesDidChange):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isInWindow):
        (WebKit::WebPageProxy::didUpdateViewState):
        * UIProcess/WebPageProxy.messages.in:
            - WebPage now propagates PageActivityState to the WebPageProxy, for use
              determining the supression state of the WebProcess.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):
        (WebKit::WebPage::setPageActivityState):
        (WebKit::WebPage::setUserActivityStarted):
        (WebKit::WebPage::setViewState):
        (WebKit::WebPage::updatePreferences):
        (WebKit::WebPage::updateUserActivity): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
            - WebPage no longer determines when to update it's own UserActivity - instead,
              let the UI process do so. As such, no longer need to track whether process
              supression is enabled. Instead, add message to

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

        [WK2] Regression(r187691): If a page is showing an auth pane in one tab, any new tabs with same page hang until credentials are entered in first tab
        https://bugs.webkit.org/show_bug.cgi?id=151960
        <rdar://problem/23618112>

        Reviewed by Alex Christensen.

        After r187691, if a page is showing an auth pane in one tab, any new
        tabs with same page hang until credentials are entered in first tab.
        This is because we coalescing all authentication challenges from the
        same domain, no matter what tab they are for. This can be confusing
        so we now only coalesce authentication challenges within each tab,
        by leveraging the pageID (in addition to the domain).

        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::shouldCoalesceChallenge):
        (WebKit::AuthenticationManager::coalesceChallengesMatching):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:

2015-12-07  Beth Dakin  <bdakin@apple.com>

        Hook up request and show for typing candidates in WK1
        https://bugs.webkit.org/show_bug.cgi?id=151831
        -and corresponding-
        <rdar://problem/23751214>

        Reviewed by Enrica Casucci.

        Empty client for now.
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2015-12-07  Philippe Normand  <pnormand@igalia.com>

        [GTK][Mac] socketpair assertion failure
        https://bugs.webkit.org/show_bug.cgi?id=151293

        Reviewed by Carlos Garcia Campos.

        * Platform/IPC/unix/ConnectionUnix.cpp: Don't use SEQPACKET sockets on Darwin.

2015-12-07  Gwang Yoon Hwang  <yoon@igalia.com>

        [ThreadedCompositor] Add support for PlatformLayer.
        https://bugs.webkit.org/show_bug.cgi?id=143299

        Reviewed by Žan Doberšek.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        Swap pending buffers of TextureMapperPlatformLayerProxies before painting contents.
        (WebKit::CoordinatedGraphicsScene::syncPlatformLayerIfNeeded):
        In threaded compositor, CoordinatedGraphicsScence only cares about creation and deletion
        of platform layers.

        (WebKit::CoordinatedGraphicsScene::onNewBufferAvailable):
        Whenever new buffer comes via TextureMapperPlatformLayerProxy, CoordinatedGraphicsScene will
        update the scene if it is needed.

2015-12-07  Mario Sanchez Prada  <mario@endlessm.com>

        [GTK] Allow applications to force Accelerated Compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=150558

        Reviewed by Carlos Garcia Campos.

        Enable forcing Accelerated Compositing mode to be always on if
        a WEBKIT_FORCE_COMPOSITING_MODE environment variable is set.

        This can be useful for controlled environments where we know that
        AC always on works well enough, to get smoother animations.

        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore): Set forceCompositingMode
        setting to true if the environment variable is found.

2015-12-07  Jon Forsberg  <jon.orebro@gmail.com>

        [GTK] Add webkit_uri_request_get_http_method
        https://bugs.webkit.org/show_bug.cgi?id=151601

        Reviewed by Martin Robinson.

        Add a method to get the HTTP method of a WebKitURIRequest.

        * UIProcess/API/gtk/WebKitURIRequest.cpp:
        (webkit_uri_request_get_http_method):
        * UIProcess/API/gtk/WebKitURIRequest.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:

2015-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebPage::console-message-sent signal to Web Extensions API
        https://bugs.webkit.org/show_bug.cgi?id=79918

        Reviewed by Gustavo Noronha Silva.

        Add WebKitConsoleMessage boxed type that is passed to the
        WebKitWebPage::console-message-sent signal with all the details
        about the message.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Add webkit_console_message_get_type.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section to the docs.
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        (API::InjectedBundle::PageUIClient::willAddMessageToConsole): Add
        paramaters for all console message details.
        * WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessage.cpp: Added.
        (webkit_console_message_copy):
        (webkit_console_message_free):
        (webkit_console_message_get_source):
        (webkit_console_message_get_level):
        (webkit_console_message_get_text):
        (webkit_console_message_get_line):
        (webkit_console_message_get_source_id):
        * WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessage.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitConsoleMessagePrivate.h: Added.
        (_WebKitConsoleMessage::_WebKitConsoleMessage):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitWebPageDidSendConsoleMessage): Emit the
        WebKitWebPage::console-message-sent signal.
        (didReceiveResponseForResource): Generate a console message in
        case of HTTP failure >= 400 for consistency with the inspector.
        (didFailLoadForResource): Generate a console message in case of
        resource load failure for consistency with the inspector.
        (webkit_web_page_class_init): Add WebKitWebPage::console-message-sent signal.
        (webkitWebPageCreate): Set custom UI client.
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::willAddMessageToConsole):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::addMessageToConsole): Pass all the
        console message details to the ui client.

2015-12-07  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] MiniBrowser doesn't exit when called ewk_view_try_close()
        https://bugs.webkit.org/show_bug.cgi?id=151934

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_try_close):
        Called window_close callback immediately when WKPageTryClose returns true.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F): Improved test cases for try_close to test when content does not contain
        onbeforeunload callback.

2015-12-07  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL] Moving preference settings from EwkView to WebPreferencesEfl
        https://bugs.webkit.org/show_bug.cgi?id=151928

        Reviewed by Gyuyoung Kim.

        It implements WebPreferences::platformInitializeStore() in WebPreferencesEfl.cpp.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/efl/WebPreferencesEfl.cpp:
        (WebKit::WebPreferences::platformInitializeStore):

2015-12-04  Anders Carlsson  <andersca@apple.com>

        Crash when secondary clicking on a link on yahoo.com
        https://bugs.webkit.org/show_bug.cgi?id=151900
        rdar://problem/23765149

        Reviewed by Beth Dakin.

        Don't use +[NSURL URLWithString:] since it doesn't handle invalid URLs as well as WebCore::URL.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::createShareMenuItem):

2015-12-04  Beth Dakin  <bdakin@apple.com>

        Crash in clients using userData in 
        _immediateActionAnimationControllerForHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=151887

        Rubber-stamped by Anders Carlsson.

        Follow-up fix to handle null userData.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _web_immediateActionAnimationControllerForHitTestResultInternal:withType:userData:]):

2015-12-04  Beth Dakin  <bdakin@apple.com>

        Crash in clients using userData in 
        _immediateActionAnimationControllerForHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=151887

        Reviewed by Sam Weinig.

        Cast this correctly.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _web_immediateActionAnimationControllerForHitTestResultInternal:withType:userData:]):

2015-12-04  Gavin Barraclough  <barraclough@apple.com>

        Background state not being tracked correctly for PDFs on iOS
        https://bugs.webkit.org/show_bug.cgi?id=151886

        Reviewed by Anders Carlson.

        The problem here is that when viewing a PDF we don't have an ApplicationStateTracker.
        (While we do have a content view - which normally holds the ApplicationStateTracker -
        the content view is not in a window, and only has an ApplicationStateTracker while in a
        window). For now, let's give the WKPDFView an ApplicationStateTracker of its very own.
        In the future we may want to refactor ownership of the ApplicationStateTracker up to
        the WKWebView.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isBackground]):
            - Added, checks background state of content/PDF view.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
            - expose _isBackground to PageClientImplIOS.
        * UIProcess/ApplicationStateTracker.h:
        (WebKit::ApplicationStateTracker::isInBackground):
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::isBackgroundState):
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
            - generalize WKContentView -> UIView, so this may now also be a WKPDFView.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewVisible):
            - check background state via the WKWebView.
        * UIProcess/ios/WKPDFView.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView willMoveToWindow:]):
        (-[WKPDFView didMoveToWindow]):
        (-[WKPDFView isBackground]):
        (-[WKPDFView _applicationDidEnterBackground]):
        (-[WKPDFView _applicationWillEnterForeground]):
            - added methods to initialize ApplicationStateTracker, access background state, & callbacks to the page proxy.

2015-12-04  Antti Koivisto  <antti@apple.com>

        Rename WebResourceLoadScheduler to WebLoaderStrategy
        https://bugs.webkit.org/show_bug.cgi?id=151854

        Reviewed by Anders Carlsson.

        It implements WebCore::LoaderStrategy and doesn't do any scheduling.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/Network/WebLoaderStrategy.cpp: Copied from Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp.
        (WebKit::WebLoaderStrategy::WebLoaderStrategy):
        (WebKit::WebLoaderStrategy::~WebLoaderStrategy):
        (WebKit::WebLoaderStrategy::loadResource):
        (WebKit::WebLoaderStrategy::schedulePluginStreamLoad):
        (WebKit::maximumBufferingTime):
        (WebKit::WebLoaderStrategy::scheduleLoad):
        (WebKit::WebLoaderStrategy::scheduleInternallyFailedLoad):
        (WebKit::WebLoaderStrategy::internallyFailedLoadTimerFired):
        (WebKit::WebLoaderStrategy::startLocalLoad):
        (WebKit::WebLoaderStrategy::remove):
        (WebKit::WebLoaderStrategy::setDefersLoading):
        (WebKit::WebLoaderStrategy::crossOriginRedirectReceived):
        (WebKit::WebLoaderStrategy::servePendingRequests):
        (WebKit::WebLoaderStrategy::suspendPendingRequests):
        (WebKit::WebLoaderStrategy::resumePendingRequests):
        (WebKit::WebLoaderStrategy::networkProcessCrashed):
        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
        (WebKit::WebLoaderStrategy::createPingHandle):
        (WebKit::WebResourceLoadScheduler::WebResourceLoadScheduler): Deleted.
        (WebKit::WebResourceLoadScheduler::~WebResourceLoadScheduler): Deleted.
        (WebKit::WebResourceLoadScheduler::loadResource): Deleted.
        (WebKit::WebResourceLoadScheduler::schedulePluginStreamLoad): Deleted.
        (WebKit::WebResourceLoadScheduler::scheduleLoad): Deleted.
        (WebKit::WebResourceLoadScheduler::scheduleInternallyFailedLoad): Deleted.
        (WebKit::WebResourceLoadScheduler::internallyFailedLoadTimerFired): Deleted.
        (WebKit::WebResourceLoadScheduler::startLocalLoad): Deleted.
        (WebKit::WebResourceLoadScheduler::remove): Deleted.
        (WebKit::WebResourceLoadScheduler::setDefersLoading): Deleted.
        (WebKit::WebResourceLoadScheduler::crossOriginRedirectReceived): Deleted.
        (WebKit::WebResourceLoadScheduler::servePendingRequests): Deleted.
        (WebKit::WebResourceLoadScheduler::suspendPendingRequests): Deleted.
        (WebKit::WebResourceLoadScheduler::resumePendingRequests): Deleted.
        (WebKit::WebResourceLoadScheduler::networkProcessCrashed): Deleted.
        (WebKit::WebResourceLoadScheduler::loadResourceSynchronously): Deleted.
        (WebKit::WebResourceLoadScheduler::createPingHandle): Deleted.
        * WebProcess/Network/WebLoaderStrategy.h: Copied from Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h.
        (WebKit::WebLoaderStrategy::webResourceLoaderForIdentifier):
        (WebKit::WebResourceLoadScheduler::webResourceLoaderForIdentifier): Deleted.
        * WebProcess/Network/WebResourceLoadScheduler.cpp: Removed.
        * WebProcess/Network/WebResourceLoadScheduler.h: Removed.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::start):
        (WebKit::PluginView::Stream::cancel):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createLoaderStrategy):
        (WebKit::WebPlatformStrategies::createPasteboardStrategy):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::webLoaderStrategy):
        (WebKit::WebProcess::webResourceLoadScheduler): Deleted.
        * WebProcess/WebProcess.h:

2015-12-03  Simon Fraser  <simon.fraser@apple.com>

        Have layer memory use consult the backing store format
        https://bugs.webkit.org/show_bug.cgi?id=151827
        rdar://problem/23746497

        Reviewed by Dean Jackson.

        When computing the backing store memory size, take the pixel format into account,
        rather than assuming 4 bytes per pixel.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::bytesPerPixel):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::backingStoreBytesPerPixel):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2015-12-03  Jer Noble  <jer.noble@apple.com>

        Expose WebCore's InvisibleAutoplayNotPermitted setting to WebKit & WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=151830

        Reviewed by Anders Carlsson.

        Add a new, private WKWebViewConfiguration property _invisibleAutoplayNotPermitted.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _invisibleAutoplayNotPermitted]):
        (-[WKWebViewConfiguration _setInvisibleAutoplayNotPermitted:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-12-03  Sam Weinig  <sam@webkit.org>

        It should be possible to use version 6 of the WKPageUIClient without adopting the new createNewPage
        https://bugs.webkit.org/show_bug.cgi?id=151826

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        Pick which variant of createNewPage to use based on which function pointer is available,
        not the version number.

2015-12-03  Anders Carlsson  <andersca@apple.com>

        Remove Objective-C GC support
        https://bugs.webkit.org/show_bug.cgi?id=151819
        rdar://problem/23746991

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/BaseLegacyProcess.xcconfig:
        * Configurations/BaseXPCService.xcconfig:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject): Deleted.

2015-12-03  Jer Noble  <jer.noble@apple.com>

        Unreviewed build-fix; fix !HAVE(AVKIT) build after r193340.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::applicationDidBecomeActive):

2015-12-03  Sam Weinig  <sam@webkit.org>

        Need completionHandler-based WebKit C SPI for alert, confirm, and prompt
        <rdar://problem/23320863>
        https://bugs.webkit.org/show_bug.cgi?id=151708

        (Add missing function definitions)

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptAlertResultListenerGetTypeID):
        (WKPageRunJavaScriptAlertResultListenerCall):
        (WKPageRunJavaScriptConfirmResultListenerGetTypeID):
        (WKPageRunJavaScriptConfirmResultListenerCall):
        (WKPageRunJavaScriptPromptResultListenerGetTypeID):
        (WKPageRunJavaScriptPromptResultListenerCall):

2015-12-03  Jer Noble  <jer.noble@apple.com>

        [iOS] Fullscreen -> PiP should resume to Fullscreen, not inline
        https://bugs.webkit.org/show_bug.cgi?id=150906

        Reviewed by Simon Fraser.

        Add methods to pass isVisible(), applicationDidBecomeActive(), and requestFullscreenMode()
        to and from models and interfaces.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidBecomeActive): Notify the fullscreen manager, if preset.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenModelContext::requestFullscreenMode): Renamed from requestExitFullscreen(); takes a mode enum.
        (WebKit::WebVideoFullscreenModelContext::isVisible): Added.
        (WebKit::WebVideoFullscreenManagerProxy::applicationDidBecomeActive): Pass to all existing interfaces.
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): Do not re-create the view if it already exists.
        (WebKit::WebVideoFullscreenManagerProxy::requestFullscreenMode): Renamed from requestExitFullscreen(); takes a mode enum.
        (WebKit::WebVideoFullscreenManagerProxy::isVisible): Added. Query Page::isVisible() and Page::isInWindow(), the latter because
                PiP will cause Page::isVisible() to be TRUE even when the containing tab is backgrounded.
        (WebKit::WebVideoFullscreenModelContext::requestExitFullscreen): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::requestExitFullscreen): Deleted.
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement): Only resize the view if we are not already in one of
                the fullscreen modes.
        (WebKit::WebVideoFullscreenManager::requestFullscreenMode): Renamed from requestExitFullscreen().
        (WebKit::WebVideoFullscreenManager::requestExitFullscreen): Deleted.

2015-12-02  Antti Koivisto  <antti@apple.com>

        Move ResourceLoadScheduler to WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=151743

        Reviewed by Alex Christensen.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createCookiesStrategy):
        (WebKit::NetworkProcessPlatformStrategies::createLoaderStrategy):
        (WebKit::NetworkProcessPlatformStrategies::createPasteboardStrategy):
        (WebKit::NetworkProcessPlatformStrategies::createPluginStrategy):
        (WebKit::NetworkProcessPlatformStrategies::createBlobRegistry):
        (WebKit::NetworkProcessPlatformStrategies::resourceLoadScheduler): Deleted.
        (WebKit::NetworkProcessPlatformStrategies::loadResourceSynchronously): Deleted.
        * NetworkProcess/NetworkProcessPlatformStrategies.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::~WebResourceLoadScheduler):
        (WebKit::WebResourceLoadScheduler::loadResource):
        (WebKit::WebResourceLoadScheduler::resumePendingRequests):
        (WebKit::WebResourceLoadScheduler::networkProcessCrashed):
        (WebKit::WebResourceLoadScheduler::loadResourceSynchronously):
        (WebKit::WebResourceLoadScheduler::createPingHandle):
        (WebKit::WebResourceLoadScheduler::scheduleSubresourceLoad): Deleted.
        (WebKit::WebResourceLoadScheduler::setSerialLoadingEnabled): Deleted.
        * WebProcess/Network/WebResourceLoadScheduler.h:
        (WebKit::WebResourceLoadScheduler::webResourceLoaderForIdentifier):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::start):
        (WebKit::PluginView::Stream::cancel):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createLoaderStrategy):
        (WebKit::WebPlatformStrategies::createPasteboardStrategy):
        (WebKit::WebPlatformStrategies::createPluginStrategy):
        (WebKit::WebPlatformStrategies::createBlobRegistry):
        (WebKit::WebPlatformStrategies::cookiesForDOM):
        (WebKit::WebPlatformStrategies::deleteCookie):
        (WebKit::WebPlatformStrategies::refreshPlugins):
        (WebKit::WebPlatformStrategies::resourceLoadScheduler): Deleted.
        (WebKit::WebPlatformStrategies::loadResourceSynchronously): Deleted.
        (WebKit::WebPlatformStrategies::createPingHandle): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2015-12-02  Alex Christensen  <achristensen@webkit.org>

        Fix authentication requests with NetworkSession and canHandleHTTPSServerTrustEvaluation true
        https://bugs.webkit.org/show_bug.cgi?id=151775
        rdar://problem/23586265

        Reviewed by Chris Dumez.

        In https://bugs.webkit.org/show_bug.cgi?id=150968 I copied functionality from 
        NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync into NetworkLoad::didReceiveChallenge
        but I overlooked the call to m_client.canAuthenticateAgainstProtectionSpaceAsync which is needed
        if canHandleHTTPSServerTrustEvaluation is true.  This adds that call and moves what should happen
        after that to NetworkLoad::continueCanAuthenticateAgainstProtectionSpace.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didReceiveResponse):
        (WebKit::NetworkLoad::continueCanAuthenticateAgainstProtectionSpace):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkSession.h:
        * Shared/Authentication/AuthenticationManager.h:

2015-12-01  Hunseop Jeong  <hs85.jeong@samsung.com>

        Unreviewed, fix build after r192931.

        * CMakeLists.txt: Remove the WKOriginDataManager in CMakeLists.txt.

2015-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
        https://bugs.webkit.org/show_bug.cgi?id=150792

        Reviewed by Saam Barati.

        * Configurations/FeatureDefines.xcconfig:

2015-12-01  Commit Queue  <commit-queue@webkit.org>

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

        JSC tests for this change are failing on 32 and 64-bit bots
        (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "[ES6] Implement LLInt/Baseline Support for ES6 Generators and
        enable this feature"
        https://bugs.webkit.org/show_bug.cgi?id=150792
        http://trac.webkit.org/changeset/192914

2015-12-01  Anders Carlsson  <andersca@apple.com>

        Remove WKOriginDataManager
        https://bugs.webkit.org/show_bug.cgi?id=151723

        Reviewed by Andy Estes.

        * UIProcess/API/C/WKOriginDataManager.cpp: Removed.
        (WKOriginDataManagerGetTypeID): Deleted.
        (WKOriginDataManagerGetOrigins): Deleted.
        (WKOriginDataManagerDeleteEntriesForOrigin): Deleted.
        (WKOriginDataManagerDeleteEntriesModifiedBetweenDates): Deleted.
        (WKOriginDataManagerDeleteAllEntries): Deleted.
        * UIProcess/API/C/WKOriginDataManager.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2015-12-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement LLInt/Baseline Support for ES6 Generators and enable this feature
        https://bugs.webkit.org/show_bug.cgi?id=150792

        Reviewed by Saam Barati.

        * Configurations/FeatureDefines.xcconfig:

2015-12-01  Sam Weinig  <sam@webkit.org>

        Need completionHandler-based WebKit C SPI for alert, confirm, and prompt
        <rdar://problem/23320863>
        https://bugs.webkit.org/show_bug.cgi?id=151708

        Reviewed by Anders Carlsson.

        Add listener based versions of alert, confirm and prompt.

        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * UIProcess/API/C/WKPage.cpp:
        (WebKit::RunJavaScriptAlertResultListener::create):
        (WebKit::RunJavaScriptAlertResultListener::~RunJavaScriptAlertResultListener):
        (WebKit::RunJavaScriptAlertResultListener::call):
        (WebKit::RunJavaScriptAlertResultListener::RunJavaScriptAlertResultListener):
        (WebKit::RunJavaScriptConfirmResultListener::create):
        (WebKit::RunJavaScriptConfirmResultListener::~RunJavaScriptConfirmResultListener):
        (WebKit::RunJavaScriptConfirmResultListener::call):
        (WebKit::RunJavaScriptConfirmResultListener::RunJavaScriptConfirmResultListener):
        (WebKit::RunJavaScriptPromptResultListener::create):
        (WebKit::RunJavaScriptPromptResultListener::~RunJavaScriptPromptResultListener):
        (WebKit::RunJavaScriptPromptResultListener::call):
        (WebKit::RunJavaScriptPromptResultListener::RunJavaScriptPromptResultListener):
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:

2015-12-01  Anders Carlsson  <andersca@apple.com>

        Remove WebKit2.framework
        https://bugs.webkit.org/show_bug.cgi?id=151715

        Reviewed by Dan Bernstein.

        * Configurations/WebKit2.xcconfig: Removed.
        * UIProcess/API/Cocoa/WebKit2.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        * mac/Info-WebKit2.plist: Removed.
        * mac/MigrateHeadersToWebKit2.make: Removed.
        * mac/WebKit2.m: Removed.

2015-12-01  Alex Christensen  <achristensen@webkit.org>

        Use Optional for matrix inverses
        https://bugs.webkit.org/show_bug.cgi?id=151575

        Reviewed by Myles C. Maxfield.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::convertFromRootView):
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::convertPoint):
        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::convertFromPDFViewToRootView):
        (WebKit::PDFPlugin::convertFromPDFViewToScreen):
        (WebKit::PDFPlugin::boundsOnScreen):
        (WebKit::PDFPlugin::geometryDidChange):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::geometryDidChange):

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

        Remove swipe snapshot before main document load if scroll position is already restored
        https://bugs.webkit.org/show_bug.cgi?id=151224

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::didRestoreScrollPosition):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didRestoreScrollPosition):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didRestoreScrollPosition):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didRestoreScrollPosition):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didRestoreScrollPosition):
        * WebProcess/WebPage/WebPage.h:
        Plumb didRestoreScrollPosition through to ViewGestureController (yikes!).

        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::didFirstVisuallyNonEmptyLayoutForMainFrame):
        Cancel waiting for any more loads if we get to firstVisuallyNonEmptyLayout.

        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState):
        Cancel waiting for scroll position restoration if we make it to main frame load,
        because there is a chance we won't be able to restore the old scroll position, and
        by main frame load time we've tried as hard as we're going to to restore it.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        Make some legacy-style-only code clearer that it's legacy-style-only.
        Wait for scroll position restoration.

2015-12-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r192834): [GTK] Test /webkit2/WebKitWebView/editor-state/typing-attributes times out after r192834
        https://bugs.webkit.org/show_bug.cgi?id=151699

        Reviewed by Tim Horton.

        In r192834 the code to send EditorStateChanged message to the UI
        process from WebPage::didChangeSelection was removed for non-mac
        ports.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection): Send EditorStateChanged
        message to the UI process also for non-mac ports, as before r192834.

2015-12-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix timeouts in several HTTP layout tests in GTK+ after r192796.

        In r192796, the initialization of m_ignoreTLSErrors in
        WebProcessPool was removed by mistake, making all HTTP tests that use
        HTTPS fail due to invalid certificate errors.

        * UIProcess/WebProcessPool.h: Bring back m_ignoreTLSErrors initialization.

2015-12-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r192247): [GTK] ASSERTION FAILED: type == WebCore::ActionType || type == WebCore::CheckableActionType || type == WebCore::SeparatorType
        https://bugs.webkit.org/show_bug.cgi?id=151513

        Reviewed by Martin Robinson.

        This happens because we are using our own WebContextMenuItemGtk
        derived from WebContextMenuItemData, but using our own submenu
        items handling. We are using the non-submenu
        WebContextMenuItemData constructor to create our submenu items
        too, because WebContextMenuItemData always expect the submenu
        items to be passed to the constructor, but we have a set_submenu
        method in the public API. So we consider that a
        WebContextMenuItemGtk is SubmenuType if it has submenu items, but
        we use the action type internally. When converting a
        WebContextMenuItemGtk to a generic WebContextMenuItemData, we
        correctly set the type and pass the submenu items to the
        approriate constructor.

        * Shared/gtk/WebContextMenuItemGtk.cpp:
        (WebKit::WebContextMenuItemGtk::WebContextMenuItemGtk): When
        constructing from a WebContextMenuItemData, set the type as
        ActionType when it's a submenu type.
        * Shared/gtk/WebContextMenuItemGtk.h:
        (WebKit::WebContextMenuItemGtk::type): Return SubmenuType if
        submenu items vector is not empty, otherwise use the parent method.
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        (webkit_context_menu_item_new_with_submenu): Create the
        WebContextMenuItemGtk as ActionType.

2015-12-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add missing inspector files to the GTK+ build.

        * PlatformGTK.cmake: Add also Debug css files.

2015-11-30  Alexey Proskuryakov  <ap@apple.com>

        Build fix for some compiler versions.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: Disable deprecation warnings while
        processing SOFT_LINK_CLASS too.

2015-11-30  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test http/tests/misc/detach-during-notifyDone.html
        https://bugs.webkit.org/show_bug.cgi?id=149309
        <rdar://problem/22748363>

        Reviewed by Brent Fulgham.

        Callback of bundle clients could kill the documentloader. Therefore, make a copy
        of the navigationID before invoking the callback.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidPushStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidReplaceStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidPopStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):

2015-11-30  Tim Horton  <timothy_horton@apple.com>

        Get rid of the !USE(ASYNC_NSTEXTINPUTCLIENT) codepath
        https://bugs.webkit.org/show_bug.cgi?id=151673

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::resignFirstResponder): Deleted.
        (WebKit::WebViewImpl::interpretKeyEvent): Deleted.
        (WebKit::WebViewImpl::executeSavedKeypressCommands): Deleted.
        (WebKit::WebViewImpl::doCommandBySelector): Deleted.
        (WebKit::WebViewImpl::insertText): Deleted.
        (WebKit::WebViewImpl::inputContext): Deleted.
        (WebKit::WebViewImpl::selectedRange): Deleted.
        (WebKit::WebViewImpl::hasMarkedText): Deleted.
        (WebKit::WebViewImpl::unmarkText): Deleted.
        (WebKit::WebViewImpl::setMarkedText): Deleted.
        (WebKit::WebViewImpl::markedRange): Deleted.
        (WebKit::WebViewImpl::attributedSubstringForProposedRange): Deleted.
        (WebKit::WebViewImpl::characterIndexForPoint): Deleted.
        (WebKit::WebViewImpl::firstRectForCharacterRange): Deleted.
        (WebKit::WebViewImpl::performKeyEquivalent): Deleted.
        (WebKit::WebViewImpl::keyUp): Deleted.
        (WebKit::WebViewImpl::keyDown): Deleted.
        (WebKit::WebViewImpl::flagsChanged): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Deleted.
        (WebKit::WebPageProxy::resetStateAfterProcessExited): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::notifyApplicationAboutInputContextChange): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition): Deleted.
        (WebKit::WebPageProxy::confirmComposition): Deleted.
        (WebKit::WebPageProxy::insertText): Deleted.
        (WebKit::WebPageProxy::insertDictatedText): Deleted.
        (WebKit::WebPageProxy::getMarkedRange): Deleted.
        (WebKit::WebPageProxy::getSelectedRange): Deleted.
        (WebKit::WebPageProxy::getAttributedSubstringFromRange): Deleted.
        (WebKit::WebPageProxy::characterIndexForPoint): Deleted.
        (WebKit::WebPageProxy::firstRectForCharacterRange): Deleted.
        (WebKit::WebPageProxy::executeKeypressCommands): Deleted.
        (WebKit::WebPageProxy::cancelComposition): Deleted.
        (WebKit::WebPageProxy::editorStateChanged): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setComposition): Deleted.
        (WebKit::WebPage::confirmComposition): Deleted.
        (WebKit::WebPage::insertText): Deleted.
        (WebKit::WebPage::insertDictatedText): Deleted.
        (WebKit::WebPage::getMarkedRange): Deleted.
        (WebKit::WebPage::getSelectedRange): Deleted.
        (WebKit::WebPage::getAttributedSubstringFromRange): Deleted.
        (WebKit::WebPage::characterIndexForPoint): Deleted.
        (WebKit::WebPage::firstRectForCharacterRange): Deleted.
        (WebKit::WebPage::executeKeypressCommands): Deleted.
        (WebKit::WebPage::cancelComposition): Deleted.

2015-11-30  Tim Horton  <timothy_horton@apple.com>

        Remove some unused synchronous drawing SPI
        https://bugs.webkit.org/show_bug.cgi?id=151672

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView forceAsyncDrawingAreaSizeUpdate:]): Deleted.
        (-[WKView waitForAsyncDrawingAreaSizeUpdate]): Deleted.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::forceAsyncDrawingAreaSizeUpdate): Deleted.
        (WebKit::WebViewImpl::waitForAsyncDrawingAreaSizeUpdate): Deleted.

2015-11-30  Tim Horton  <timothy_horton@apple.com>

        Get rid of the legacy swipe shadow style
        https://bugs.webkit.org/show_bug.cgi?id=151671

        Reviewed by Anders Carlsson.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture): Deleted.
        (WebKit::ViewGestureController::handleSwipeGesture): Deleted.
        (WebKit::ViewGestureController::removeSwipeSnapshot): Deleted.
        It is no longer needed.

2015-11-30  Tim Horton  <timothy_horton@apple.com>

        [iOS] Option-up and Option-down should scroll a little less than a full page
        https://bugs.webkit.org/show_bug.cgi?id=151538
        <rdar://problem/23642675>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _scrollOffsetForEvent:]):
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):
        Clean up the code a little, and adjust so that we *always* use pageStep
        instead of just scrolling by the unobscured rect when scrolling by a page.
        Previously, we did for the spacebar, but not for option-up and option-down.

2015-11-30  Brian Burg  <bburg@apple.com>

        Web Inspector: using "Reload Web Inspector" when docked breaks dock-specific styles
        https://bugs.webkit.org/show_bug.cgi?id=151642

        Reviewed by Timothy Hatcher.

        After a frontend loads, explicitly tell it about the current dock
        state. This is necessary for force-reloading the inspector, since
        the dock state isn't sent from UIProcess in this case.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::frontendLoaded):
        (WebKit::WebInspectorUI::setDockingUnavailable):
        * WebProcess/WebPage/WebInspectorUI.h:

2015-11-30  Alex Christensen  <achristensen@webkit.org>

        Make ProcessModel always MultipleSecondaryProcesses
        https://bugs.webkit.org/show_bug.cgi?id=151662

        Reviewed by Antti Koivisto.

        Single WebProcess behavior can still be achieved by setting the maximum number of WebProcesses to 1.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKContextSetUsesNetworkProcess):
        (WKContextSetProcessModel):
        (WKContextGetProcessModel):
        (WKGraphicsContextGetCGContext):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        (WebKit::toFontSmoothingLevel):
        (WebKit::toProcessModel): Deleted.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetCacheModel):
        (WKContextSetMaximumNumberOfProcesses):
        (WKContextSetProcessModel): Deleted.
        (WKContextGetProcessModel): Deleted.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::cacheModel):
        (EwkContext::setProcessModel):
        (EwkContext::processModel):
        (EwkContext::clearResourceCache):
        (EwkContext::jsGlobalContext):
        (ewk_context_message_from_extensions_callback_set):
        (ewk_context_process_model_set):
        (ewk_context_process_model_get):
        (ewk_context_tls_error_policy_get):
        (toWKProcessModel): Deleted.
        (toEwkProcessModel): Deleted.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        * UIProcess/ProcessModel.h: Removed.
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::shouldTerminate):
        (WebKit::WebCookieManagerProxy::refWebContextSupplement):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectorProcessPool):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::create):
        (WebKit::WebProcessPool::setDownloadClient):
        (WebKit::WebProcessPool::setMaximumNumberOfProcesses):
        (WebKit::WebProcessPool::processDidCachePage):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::postMessageToInjectedBundle):
        (WebKit::WebProcessPool::requestWebContentStatistics):
        (WebKit::WebProcessPool::requestNetworkingStatistics):
        (WebKit::WebProcessPool::setProcessModel): Deleted.
        (WebKit::WebProcessPool::ensureSharedWebProcess): Deleted.
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToAllProcessesRelaunchingThemIfNecessary):
        (WebKit::WebProcessPool::sendToOneProcess):
        * WebKit2.xcodeproj/project.pbxproj:

2015-11-30  Chris Dumez  <cdumez@apple.com>

        [WK2][Cache] We should not speculatively revalidate transient resources
        https://bugs.webkit.org/show_bug.cgi?id=151402
        <rdar://problem/23092196>

        Reviewed by Antti Koivisto.

        We should not speculatively revalidate transient resources. This patch
        adds a simple and conservative algorithm to detect that a subresource is
        transient and then ignores those when doing the speculative revalidation.

        The algorithm is question marks as transient all subresources that are
        not common to the 2 last loads of a main resource.

        This is not perfect as I see the number of non-speculative revalidations
        going up to 11-12 from 9 in the context of the warm PLT. However, it is
        best to be conservative at first and we can improve this later.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::create):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::~PendingFrameLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::registerSubresource):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::markLoadAsCompleted):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::setExistingSubresourcesEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::PendingFrameLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::saveToDiskIfReady):
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveSubresourcesEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieve): Deleted.
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry): Deleted.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourcesEntry::encodeAsStorageRecord):
        (WebKit::NetworkCache::SubresourcesEntry::decodeStorageRecord):
        (WebKit::NetworkCache::SubresourcesEntry::SubresourcesEntry):
        (WebKit::NetworkCache::SubresourcesEntry::updateSubresourceKeys):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:
        (WebKit::NetworkCache::SubresourcesEntry::SubresourceInfo::encode):
        (WebKit::NetworkCache::SubresourcesEntry::SubresourceInfo::decode):
        (WebKit::NetworkCache::SubresourcesEntry::SubresourceInfo::SubresourceInfo):
        (WebKit::NetworkCache::SubresourcesEntry::subresources):

2015-11-30  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Add font service permission to the sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=151509
        <rdar://problem/23508753>

        Reviewed by Anders Carlsson.

        Update the sandbox profile for Mac WebKit to allow access to the
        "com.apple.fonts" service.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2015-11-30  Alex Christensen  <achristensen@webkit.org>

        Make usesNetworkProcess always true
        https://bugs.webkit.org/show_bug.cgi?id=151580

        Reviewed by Darin Adler.

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKInspectorToggleJavaScriptProfiling):
        (WKContextSetUsesNetworkProcess):
        (WKGraphicsContextGetCGContext):
        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (WebKit::CustomProtocolManager::initializeConnection):
        (WebKit::CustomProtocolManager::initialize):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
        (WebKit::CustomProtocolManager::initialize):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetJavaScriptGarbageCollectorTimerEnabled):
        (WKContextUseTestingNetworkSession):
        (WKContextSetUsesNetworkProcess): Deleted.
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::setProcessModel):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::updateProcessSuppressionState):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::cancel):
        (WebKit::DownloadProxy::invalidate):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::m_processSuppressionDisabledForPageCounter):
        (WebKit::WebProcessPool::networkingProcessConnection):
        (WebKit::WebProcessPool::languageChanged):
        (WebKit::WebProcessPool::textCheckerStateChanged):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::download):
        (WebKit::WebProcessPool::resumeDownload):
        (WebKit::WebProcessPool::setCanHandleHTTPSServerTrustEvaluation):
        (WebKit::WebProcessPool::setCacheModel):
        (WebKit::WebProcessPool::createDownloadProxy):
        (WebKit::WebProcessPool::addMessageReceiver):
        (WebKit::WebProcessPool::allowSpecificHTTPSCertificateForHost):
        (WebKit::WebProcessPool::setHTTPPipeliningEnabled):
        (WebKit::WebProcessPool::requestNetworkingStatistics):
        (WebKit::WebProcessPool::setUsesNetworkProcess): Deleted.
        (WebKit::WebProcessPool::usesNetworkProcess): Deleted.
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToNetworkingProcess):
        (WebKit::WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::canTerminateChildProcess):
        (WebKit::WebProcessProxy::updateTextCheckerState):
        (WebKit::WebProcessProxy::didSaveToPageCache):
        (WebKit::WebProcessProxy::didSetAssertionState):
        (WebKit::WebProcessProxy::createDownloadProxy): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::setIgnoreTLSErrors):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURL):
        (WebKit::BlobRegistryProxy::unregisterBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLForSlice):
        (WebKit::BlobRegistryProxy::blobSize):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookiesForDOM):
        (WebKit::WebPlatformStrategies::setCookiesFromDOM):
        (WebKit::WebPlatformStrategies::cookiesEnabled):
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebKit::WebPlatformStrategies::getRawCookies):
        (WebKit::WebPlatformStrategies::deleteCookie):
        (WebKit::WebPlatformStrategies::resourceLoadScheduler):
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):
        (WebKit::WebPlatformStrategies::createPingHandle):
        (WebKit::WebPlatformStrategies::createBlobRegistry):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        (WebKit::WebFrame::source):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::m_webSQLiteDatabaseTracker):
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        (WebKit::WebProcess::pluginProcessConnectionManager):
        (WebKit::WebProcess::shouldTerminate):
        (WebKit::WebProcess::setInjectedBundleParameters):
        (WebKit::WebProcess::networkConnection):
        (WebKit::WebProcess::setEnhancedAccessibility):
        (WebKit::WebProcess::prefetchDNS):
        (WebKit::WebProcess::didCreateDownload): Deleted.
        (WebKit::WebProcess::didDestroyDownload): Deleted.
        (WebKit::WebProcess::downloadProxyConnection): Deleted.
        (WebKit::WebProcess::downloadsAuthenticationManager): Deleted.
        (WebKit::WebProcess::downloadManager): Deleted.
        (WebKit::WebProcess::usesNetworkProcess): Deleted.
        (WebKit::WebProcess::downloadRequest): Deleted.
        (WebKit::WebProcess::resumeDownload): Deleted.
        (WebKit::WebProcess::cancelDownload): Deleted.
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::textCheckerState):
        (WebKit::WebProcess::eventDispatcher):
        * WebProcess/WebProcess.messages.in:
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformClearResourceCaches):
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformTerminate):
        (WebKit::getCacheDiskFreeSize): Deleted.
        (WebKit::setSoupSessionAcceptLanguage): Deleted.
        (WebKit::languageChanged): Deleted.
        (WebKit::WebProcess::setIgnoreTLSErrors): Deleted.
        (WebKit::WebProcess::allowSpecificHTTPSCertificateForHost): Deleted.

2015-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] UI process crash when the screensaver DBus proxy is being created while the web view is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=151653

        Reviewed by Martin Robinson.

        We correctly cancel the proxy creation, but when the async ready
        callback is called, the view could be destroyed already. In that
        case g_dbus_proxy_new_for_bus_finish() will return nullptr and
        fail with cancelled error, but we are using the passed web view
        without checking first if the creation failed or not.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (screenSaverProxyCreatedCallback):

2015-11-28  Tim Horton  <timothy_horton@apple.com>

        Stop unnecessarily copying WKWebViewConfiguration in a few places
        https://bugs.webkit.org/show_bug.cgi?id=151639

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView dealloc]):
        (-[WKWebView _contentProviderRegistry]):
        (-[WKWebView _selectionGranularity]):
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::mimeTypesWithCustomContentProviders):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _stopAssistingKeyboard]):
        Looking at allocation traces I noticed that we were making way more
        WKWebViewConfigurations than made sense; looking at backtraces I found
        a few internal callers of -[WKWebView configuration], which copies the
        configuration. There's no reason for these internal callers to make 
        such a copy, though.

        I'm not exactly sure what the usual approach is here, but I added
        getters so WKContentViewInteraction and PageClientImplIOS can get to
        the values they're looking for without using the configuration property.

2015-11-27  Brady Eidson  <beidson@apple.com>

        Modern IDB: Class-ify IDBGetResult making it impossible to get the data members wrong.
        https://bugs.webkit.org/show_bug.cgi?id=151627

        Reviewed by Alexey Proskuryakov.

        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::getRecordFromBackingStore):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        
        * DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h:
        
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::getIndexRecord):
        
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<IDBGetResult>::encode):
        (IPC::ArgumentCoder<IDBGetResult>::decode):
        * Shared/WebCoreArgumentCoders.h:
        
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in:

2015-11-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove the remaining uses of GMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=151632

        Reviewed by Žan Doberšek.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate::_WebKitWebViewBasePrivate):
        (_WebKitWebViewBasePrivate::clearRedirectedWindowSoonTimerFired):
        (webkitWebViewBaseClearRedirectedWindowSoon):
        (webkitWebViewBaseEnterAcceleratedCompositingMode):

2015-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use the network process unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=151541

        Reviewed by Alex Christensen.

        Make the shared secondary process model become multiple secondary
        process model with a limit of 1 web process. Use the same options
        when creating a context with legacy configuration (unit tests and
        inspector proxy).

        * NetworkProcess/gtk/NetworkProcessMainGtk.cpp:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        * UIProcess/API/gtk/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):
        (toWebKitProcessModel): Deleted.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::setIgnoreTLSErrors):
        (WebKit::WebProcessPool::platformInitializeWebProcess):

2015-11-23  Brian Burg  <bburg@apple.com>

        Web Inspector: inspector settings should not be shared between different inspection levels
        https://bugs.webkit.org/show_bug.cgi?id=151151

        Reviewed by Timothy Hatcher.

        In WebKit2, we already track the inspection level of WebPages in order to give inspectors
        different page groups. Send the inspection level to WebInspectorUI WebProcess when
        establishing a connection from the UIProcess. Use this number in the FrontendClient.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectionLevel): Renamed from inspectorLevel to be consistent.
        (WebKit::WebInspectorProxy::inspectorPageGroupIdentifier):
        (WebKit::WebInspectorProxy::didRelaunchInspectorPageProcess):
        (WebKit::WebInspectorProxy::eagerlyCreateInspectorPage):
        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::inspectorLevel): Deleted.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::updateInspectorWindowTitle):
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::establishConnection):
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.messages.in:

2015-11-23  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        REGRESSION(r188206): [EFL] Missing to adjust scrollbar size to ewk_view_contents_size_get API test
        https://bugs.webkit.org/show_bug.cgi?id=148735

        Reviewed by Csaba Osztrogonác.

        r189256 missed to adjust scrollbar size to other tests in ewk_view_contents_size_get() API test.
        In this case we need to apply scrollbar size to both width and height unlike previous fix. Because
        horizontal scrollbar is also shown since device pixel ratio(= 2.0) is adjusted.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2015-11-23  Alex Christensen  <achristensen@webkit.org>

        Fix crash in ~WebProcessPool when using Geolocation with useNetworkProcess=true
        https://bugs.webkit.org/show_bug.cgi?id=151532

        Reviewed by Benjamin Poulain.

        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::processPoolDestroyed):
        (WebKit::WebGeolocationManagerProxy::processDidClose):
        When a WebProcessPool is destroyed, only call stopUpdating if m_updateRequesters.clear()
        stopped the updating, like we do in WebGeolocationManagerProxy::removeRequester.
        Otherwise, call setEnableHighAccuracy if needed, also like we do in WebGeolocationManagerProxy::removeRequester.

2015-11-23  Brian Burg  <bburg@apple.com>

        Web Inspector: when inspecting the inspector, add the inspection level to the title bar
        https://bugs.webkit.org/show_bug.cgi?id=151555

        Reviewed by Timothy Hatcher.

        If the inspection level says we are inspecting an inspector, include the level
        in the title bar to easily disambiguate it from the base level inspector.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::updateInspectorWindowTitle):

2015-11-23  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative buildfix after r192701.

        * PlatformMac.cmake:

2015-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.11.2 release.

        * gtk/NEWS: Add release notes for 2.11.2.

2015-11-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add missing inspector file to GTK+ compilation.

        * PlatformGTK.cmake:

== Rolled over to ChangeLog-2015-11-21 ==
