2015-11-20  Simon Fraser  <simon.fraser@apple.com>

        More deviceRGB color cleanup
        https://bugs.webkit.org/show_bug.cgi?id=151523
        <rdar://problem/23638597>

        Reviewed by Tim Horton.

        Replace calls to deviceRGBColorSpaceRef() with sRGBColorSpaceRef(), and use
        sRGBColorSpaceRef() in a few places that were manually creating the colorspace.

        Also use cachedCGColor() in a more places that were manually constructing CGColorRefs
        from Colors.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::createCGImage):
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::cgColorFromColor):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::initializeDebugIndicator):

2015-11-20  Geoffrey Garen  <ggaren@apple.com>

        A window with a hung tab waits 5s before becoming active
        https://bugs.webkit.org/show_bug.cgi?id=151426

        Reviewed by Sam Weinig.

        This patch adds an optimization to skip the synchronous web process
        message to check for a legacy scrollbar when we know that legacy
        scrollbars are not enabled.

        (Note that legacy scrollbars don't work quite right, due to
        <rdar://problem/23585420> and <rdar://problem/23605296>. Still, I verified
        with logging that we do the synchronous message when legacy scrollbars
        are enabled.)

        A consequence of this change is that we will no longer support
        click-to-scroll-while-inactive behavior for scrollbars with custom looks
        on systems with modern scrollbars. I spoke with Beth and Dan, and they
        agreed that this is a reasonable change to make, since we don't support
        click-to-scroll-while-inactive behavior for fully custom scrollbars either,
        and since systems with modern scrollbars typically use swipe to scroll.

        * UIProcess/Cocoa/WebViewImpl.h: Added some helper functions to explain
        the behaviors we're checking for.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::mightBeginDragWhileInactive): Factored out from
        shouldDelayWindowOrderingForEvent.

        (WebKit::WebViewImpl::mightBeginScrollWhileInactive): New function.

        (WebKit::WebViewImpl::acceptsFirstMouse): Moved this function next to
        shouldDelayWindowOrderingForEvent because their responsibilities are
        very similar. Added a fast path check for when we know that we will
        not accept first mouse because we can't start a drag or scroll by
        clicking while inactive.

        (WebKit::WebViewImpl::shouldDelayWindowOrderingForEvent): Refactored
        to use the helper function. Behavior unchanged.

2015-11-20  Geoffrey Garen  <ggaren@apple.com>

        A hung webpage pretends to be responsive if you scroll
        https://bugs.webkit.org/show_bug.cgi?id=151518

        Reviewed by Sam Weinig.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sendWheelEvent):
        (WebKit::WebPageProxy::didReceiveEvent): Don't treat wheel events as
        starting or stopping the responsiveness timer. Wheel events usually
        process on the event dispatch thread, which responds even if the main
        thread is hung.

        Instead, send an out-of-band ping to the main thread to verify that
        it is still responsive and we'll be able to paint and respond to clicks
        after scrolling.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendMainThreadPing):
        (WebKit::WebProcessProxy::didReceiveMainThreadPing):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in: UI process support for pinging
        the main thread in the web process.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::mainThreadPing):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Web process support for responding
        to pings.

2015-11-20  Simon Fraser  <simon.fraser@apple.com>

        Allow more buffer formats in the IOSurface pool
        https://bugs.webkit.org/show_bug.cgi?id=151516

        Reviewed by Tim Horton.
        
        Have RemoteLayerBackingStore go through a static function on IOSurface to return
        a surface to the pool, rather than knowing about IOSurfacePool directly.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::Buffer::discard):

2015-11-20  Alex Christensen  <achristensen@webkit.org>

        Remove NETWORK_PROCESS compile flag
        https://bugs.webkit.org/show_bug.cgi?id=151512

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * NetworkProcess/EntryPoint/mac/LegacyProcess/NetworkProcessMain.mm:
        (NetworkProcessMain):
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (NetworkServiceInitializer):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::filesInBlob):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoad.cpp:
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkLoadParameters.cpp:
        (WebKit::NetworkLoadParameters::NetworkLoadParameters):
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkResourceLoader.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearDiskCache):
        * NetworkProcess/efl/NetworkProcessMainEfl.cpp:
        (WebKit::NetworkProcessMainUnix):
        * NetworkProcess/gtk/NetworkProcessMainGtk.cpp:
        (WebKit::NetworkProcessMainUnix):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkLoadMac.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::willCacheResponseAsync):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformTerminate):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::storageSession):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (WebKit::CustomProtocolManager::initialize):
        (WebKit::CustomProtocolManager::addCustomProtocol):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
        (WebKit::CustomProtocolManager::supplementName):
        (WebKit::CustomProtocolManager::initialize):
        (WebKit::CustomProtocolManager::registerScheme):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * Shared/Network/NetworkProcessSupplement.h:
        (WebKit::NetworkProcessSupplement::initialize):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        * Shared/ProcessExecutablePath.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/efl/ProcessExecutablePathEfl.cpp:
        (WebKit::executablePathOfPluginProcess):
        (WebKit::executablePathOfNetworkProcess):
        (WebKit::executablePathOfDatabaseProcess):
        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        (WebKit::executablePathOfPluginProcess):
        (WebKit::executablePathOfNetworkProcess):
        (WebKit::executablePathOfDatabaseProcess):
        * Shared/mac/CookieStorageShim.h:
        * Shared/mac/CookieStorageShim.mm:
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):
        * Shared/mac/CookieStorageShimLibrary.cpp:
        * Shared/mac/CookieStorageShimLibrary.h:
        * UIProcess/API/APISession.cpp:
        (API::Session::~Session):
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextGetNetworkProcessIdentifier):
        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_process_model_set):
        (ewk_context_process_model_get):
        (ewk_context_tls_error_policy_get):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::updateProcessSuppressionState):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::WebProcessPool::platformInvalidateContext):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::cancel):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::computeProcessShimPath):
        (WebKit::serviceName):
        (WebKit::shouldLeakBoost):
        (WebKit::createProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::platformGetLaunchOptions):
        * UIProcess/Network/soup/NetworkProcessProxySoup.cpp:
        (WebKit::NetworkProcessProxy::platformGetLaunchOptions):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setSessionID):
        (WebKit::WebPageProxy::initializeWebPage):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::~WebProcessPool):
        (WebKit::WebProcessPool::initializeClient):
        (WebKit::WebProcessPool::networkingProcessConnection):
        (WebKit::WebProcessPool::languageChanged):
        (WebKit::WebProcessPool::setUsesNetworkProcess):
        (WebKit::WebProcessPool::usesNetworkProcess):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::getNetworkProcessConnection):
        (WebKit::WebProcessPool::ensureDatabaseProcess):
        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::download):
        (WebKit::WebProcessPool::resumeDownload):
        (WebKit::WebProcessPool::setAdditionalPluginsDirectory):
        (WebKit::WebProcessPool::networkProcessIdentifier):
        (WebKit::WebProcessPool::setAlwaysUsesComplexTextCodePath):
        (WebKit::WebProcessPool::setCanHandleHTTPSServerTrustEvaluation):
        (WebKit::WebProcessPool::registerURLSchemeAsLocal):
        (WebKit::WebProcessPool::setCacheModel):
        (WebKit::WebProcessPool::setDefaultRequestTimeoutInterval):
        (WebKit::WebProcessPool::createDownloadProxy):
        (WebKit::WebProcessPool::useTestingNetworkSession):
        (WebKit::WebProcessPool::allowSpecificHTTPSCertificateForHost):
        (WebKit::WebProcessPool::requestNetworkingStatistics):
        (WebKit::WebProcessPool::handleMessage):
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToNetworkingProcess):
        (WebKit::WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        (WebKit::WebProcessProxy::getNetworkProcessConnection):
        (WebKit::WebProcessProxy::getDatabaseProcessConnection):
        (WebKit::WebProcessProxy::createDownloadProxy):
        (WebKit::WebProcessProxy::didCancelProcessSuspension):
        (WebKit::WebProcessProxy::reinstateNetworkProcessAssertionState):
        (WebKit::WebProcessProxy::didSetAssertionState):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::throttler):
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        (WebKit::WebsiteDataStore::cloneSessionData):
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::initInspectorServer):
        (WebKit::WebProcessPool::setIgnoreTLSErrors):
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebKit2Prefix.h:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::blobSize):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::networkProcessCrashed):
        * WebProcess/Network/WebResourceLoadScheduler.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::initializeBrowserFuncs):
        (WebKit::netscapeBrowserFuncs):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::registerRedirect):
        (WebKit::NetscapePlugin::urlRedirectResponse):
        * 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::createBlobRegistry):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        (WebKit::WebProcess::registerURLSchemeAsEmptyDocument):
        (WebKit::WebProcess::usesNetworkProcess):
        (WebKit::WebProcess::networkConnection):
        (WebKit::WebProcess::webResourceLoadScheduler):
        (WebKit::WebProcess::webToDatabaseProcessConnectionClosed):
        (WebKit::WebProcess::prefetchDNS):
        * WebProcess/WebProcess.h:
        * config.h:

2015-11-19  Simon Fraser  <simon.fraser@apple.com>

        Back-buffer to front-buffer copy fails for some buffer formats
        https://bugs.webkit.org/show_bug.cgi?id=151475
        rdar://problem/23617899

        Reviewed by Tim Horton.
        
        When displaying RemoteLayerBackingStore, we copy the back buffer to the front
        buffer before painting the updated regions. For buffers using Format::RGB10A8,
        the CGImage-based copy fails, so in this case, use IOSurface::copyToSurface().
        
        Reorganized RemoteLayerBackingStore::drawInContext() to make this a bit easier
        to understand. First, we either copy the entire surface over, or paint the backImage.
        Then we clip to the dirty rects, and clear them, then paint the layer contents.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):
        (WebKit::RemoteLayerBackingStore::drawInContext):

2015-11-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r192667 and r192668.
        https://bugs.webkit.org/show_bug.cgi?id=151476

        broke api tests (Requested by alexchristensen on #webkit).

        Reverted changesets:

        "Remove the non-NetworkProcess configurations"
        https://bugs.webkit.org/show_bug.cgi?id=151418
        http://trac.webkit.org/changeset/192667

        "Fix GTK Build after r192667."
        http://trac.webkit.org/changeset/192668

2015-11-19  Alex Christensen  <achristensen@webkit.org>

        Fix GTK Build after r192667.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkit_web_context_set_process_model):
        (webkit_web_context_get_process_model):
        (toWebKitProcessModel): Deleted.
        (injectedBundleDirectory): Deleted.

2015-11-19  Alex Christensen  <achristensen@webkit.org>

        Remove the non-NetworkProcess configurations
        https://bugs.webkit.org/show_bug.cgi?id=151418

        Reviewed by Geoffrey Garen.

        This patch assumes ENABLE(NETWORK_PROCESS) is always 1, usesNetworkProcess is always true, 
        and ProcessModel is always ProcessModelMultipleSecondaryProcesses.  It does this by removing
        the checks and the code that would be executed with other configurations.

        * CMakeLists.txt:
        * NetworkProcess/EntryPoint/mac/LegacyProcess/NetworkProcessMain.mm:
        (NetworkProcessMain):
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (NetworkServiceInitializer):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::filesInBlob):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoad.cpp:
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkLoadClient.h:
        * NetworkProcess/NetworkLoadParameters.cpp:
        (WebKit::NetworkLoadParameters::NetworkLoadParameters):
        * NetworkProcess/NetworkLoadParameters.h:
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkResourceLoader.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearDiskCache):
        * NetworkProcess/efl/NetworkProcessMainEfl.cpp:
        (WebKit::NetworkProcessMainUnix):
        * NetworkProcess/gtk/NetworkProcessMainGtk.cpp:
        (WebKit::NetworkProcessMainUnix):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkLoadMac.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformTerminate):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::storageSession):
        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKInspectorToggleJavaScriptProfiling):
        (WKContextSetProcessModel):
        (WKContextGetProcessModel):
        (WKContextSetUsesNetworkProcess):
        (WKGraphicsContextGetCGContext):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (WebKit::CustomProtocolManager::initialize):
        (WebKit::CustomProtocolManager::addCustomProtocol):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
        (WebKit::CustomProtocolManager::supplementName):
        (WebKit::CustomProtocolManager::initialize):
        (WebKit::CustomProtocolManager::registerScheme):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * Shared/Network/NetworkProcessSupplement.h:
        (WebKit::NetworkProcessSupplement::initialize):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        * Shared/ProcessExecutablePath.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/efl/ProcessExecutablePathEfl.cpp:
        (WebKit::executablePathOfPluginProcess):
        (WebKit::executablePathOfNetworkProcess):
        (WebKit::executablePathOfDatabaseProcess):
        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        (WebKit::executablePathOfPluginProcess):
        (WebKit::executablePathOfNetworkProcess):
        (WebKit::executablePathOfDatabaseProcess):
        * Shared/mac/CookieStorageShim.h:
        * Shared/mac/CookieStorageShim.mm:
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):
        * Shared/mac/CookieStorageShimLibrary.cpp:
        * Shared/mac/CookieStorageShimLibrary.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/APISession.cpp:
        (API::Session::~Session):
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        (WebKit::toFontSmoothingLevel):
        (WebKit::toProcessModel): Deleted.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetCacheModel):
        (WKContextSetMaximumNumberOfProcesses):
        (WKContextSetJavaScriptGarbageCollectorTimerEnabled):
        (WKContextUseTestingNetworkSession):
        (WKContextSetProcessModel): Deleted.
        (WKContextGetProcessModel): Deleted.
        (WKContextSetUsesNetworkProcess): Deleted.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextGetNetworkProcessIdentifier):
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_process_model_set):
        (ewk_context_process_model_get):
        (ewk_context_tls_error_policy_get):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::updateProcessSuppressionState):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::WebProcessPool::platformInvalidateContext):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::cancel):
        (WebKit::DownloadProxy::invalidate):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::computeProcessShimPath):
        (WebKit::serviceName):
        (WebKit::shouldLeakBoost):
        (WebKit::createProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::platformGetLaunchOptions):
        * UIProcess/Network/soup/NetworkProcessProxySoup.cpp:
        (WebKit::NetworkProcessProxy::platformGetLaunchOptions):
        * UIProcess/ProcessModel.h: Removed.
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::shouldTerminate):
        (WebKit::WebCookieManagerProxy::refWebContextSupplement):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectorProcessPool):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::setSessionID):
        (WebKit::WebPageProxy::initializeWebPage):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::create):
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::~WebProcessPool):
        (WebKit::WebProcessPool::initializeClient):
        (WebKit::WebProcessPool::setDownloadClient):
        (WebKit::WebProcessPool::setMaximumNumberOfProcesses):
        (WebKit::WebProcessPool::networkingProcessConnection):
        (WebKit::WebProcessPool::languageChanged):
        (WebKit::WebProcessPool::textCheckerStateChanged):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::getNetworkProcessConnection):
        (WebKit::WebProcessPool::ensureDatabaseProcess):
        (WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebProcessPool::processDidCachePage):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::download):
        (WebKit::WebProcessPool::resumeDownload):
        (WebKit::WebProcessPool::postMessageToInjectedBundle):
        (WebKit::WebProcessPool::setAdditionalPluginsDirectory):
        (WebKit::WebProcessPool::networkProcessIdentifier):
        (WebKit::WebProcessPool::setAlwaysUsesComplexTextCodePath):
        (WebKit::WebProcessPool::setCanHandleHTTPSServerTrustEvaluation):
        (WebKit::WebProcessPool::registerURLSchemeAsLocal):
        (WebKit::WebProcessPool::setCacheModel):
        (WebKit::WebProcessPool::setDefaultRequestTimeoutInterval):
        (WebKit::WebProcessPool::createDownloadProxy):
        (WebKit::WebProcessPool::addMessageReceiver):
        (WebKit::WebProcessPool::useTestingNetworkSession):
        (WebKit::WebProcessPool::allowSpecificHTTPSCertificateForHost):
        (WebKit::WebProcessPool::requestWebContentStatistics):
        (WebKit::WebProcessPool::requestNetworkingStatistics):
        (WebKit::WebProcessPool::handleMessage):
        (WebKit::WebProcessPool::setProcessModel): Deleted.
        (WebKit::WebProcessPool::setUsesNetworkProcess): Deleted.
        (WebKit::WebProcessPool::usesNetworkProcess): Deleted.
        (WebKit::WebProcessPool::ensureSharedWebProcess): Deleted.
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToNetworkingProcess):
        (WebKit::WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary):
        (WebKit::WebProcessPool::sendToAllProcessesRelaunchingThemIfNecessary):
        (WebKit::WebProcessPool::sendToOneProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        (WebKit::WebProcessProxy::getNetworkProcessConnection):
        (WebKit::WebProcessProxy::getDatabaseProcessConnection):
        (WebKit::WebProcessProxy::updateTextCheckerState):
        (WebKit::WebProcessProxy::didSaveToPageCache):
        (WebKit::WebProcessProxy::didCancelProcessSuspension):
        (WebKit::WebProcessProxy::reinstateNetworkProcessAssertionState):
        (WebKit::WebProcessProxy::didSetAssertionState):
        (WebKit::WebProcessProxy::createDownloadProxy): Deleted.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::throttler):
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        (WebKit::WebsiteDataStore::cloneSessionData):
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::initInspectorServer):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::setIgnoreTLSErrors):
        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebKit2Prefix.h:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURL):
        (WebKit::BlobRegistryProxy::unregisterBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLForSlice):
        (WebKit::BlobRegistryProxy::blobSize):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::networkProcessCrashed):
        * WebProcess/Network/WebResourceLoadScheduler.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::initializeBrowserFuncs):
        (WebKit::netscapeBrowserFuncs):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::registerRedirect):
        (WebKit::NetscapePlugin::urlRedirectResponse):
        * 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/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        (WebKit::WebFrame::source):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        (WebKit::WebProcess::registerURLSchemeAsEmptyDocument):
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        (WebKit::WebProcess::pluginProcessConnectionManager):
        (WebKit::WebProcess::shouldTerminate):
        (WebKit::WebProcess::setInjectedBundleParameters):
        (WebKit::WebProcess::networkConnection):
        (WebKit::WebProcess::webResourceLoadScheduler):
        (WebKit::WebProcess::webToDatabaseProcessConnectionClosed):
        (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::WebProcess::setIgnoreTLSErrors):
        (WebKit::WebProcess::allowSpecificHTTPSCertificateForHost):
        (WebKit::getCacheDiskFreeSize): Deleted.
        (WebKit::setSoupSessionAcceptLanguage): Deleted.
        (WebKit::languageChanged): Deleted.
        * config.h:

2015-11-19  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix Wreturn-type clang warning in EWK2UnitTestBase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=151444

        Reviewed by Darin Adler.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilTitleChangedTo):

2015-11-19  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix -Winconsistent-missing-override clang warnings
        https://bugs.webkit.org/show_bug.cgi?id=151443

        Reviewed by Darin Adler.

        * Shared/CoordinatedGraphics/CoordinatedBackingStore.h:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * UIProcess/CoordinatedGraphics/WebView.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        (WebKit::CoordinatedDrawingArea::layerTreeStateIsFrozen):
        (WebKit::CoordinatedDrawingArea::layerTreeHost):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (WebKit::CoordinatedLayerTreeHost::layerTreeContext):
        (WebKit::CoordinatedLayerTreeHost::pauseRendering):
        (WebKit::CoordinatedLayerTreeHost::resumeRendering):

2015-11-18  Alex Christensen  <achristensen@webkit.org>

        Progress towards implementing Downloads with NETWORK_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=151414

        Reviewed begrudgingly by Brady Eidson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::NetworkLoad):
        (WebKit::NetworkLoad::didReceiveChallenge):
        (WebKit::NetworkLoad::didReceiveResponse):
        (WebKit::NetworkLoad::didReceiveData):
        * NetworkProcess/NetworkLoad.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        (WebKit::NetworkProcess::downloadRequest):
        (WebKit::NetworkProcess::resumeDownload):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::didConvertHandleToDownload):
        (WebKit::NetworkResourceLoader::abort):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (toNSURLSessionResponseDisposition):
        (-[NetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[NetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        (-[NetworkSessionDelegate URLSession:downloadTask:didFinishDownloadingToURL:]):
        (-[NetworkSessionDelegate URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:]):
        (-[NetworkSessionDelegate URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:]):
        (-[NetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::useCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForSingleChallenge):
        (WebKit::AuthenticationManager::cancelSingleChallenge):
        (WebKit::AuthenticationManager::performDefaultHandlingForSingleChallenge):
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinueForSingleChallenge):
        * Shared/Downloads/Download.h:
        * Shared/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::DownloadManager):
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertHandleToDownload):
        (WebKit::DownloadManager::resumeDownload):
        (WebKit::DownloadManager::cancelDownload):
        (WebKit::DownloadManager::downloadFinished):
        (WebKit::DownloadManager::didCreateDownload):
        * Shared/Downloads/DownloadManager.h:
        (WebKit::DownloadManager::isDownloading):
        (WebKit::DownloadManager::activeDownloadCount):
        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::resume):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::download):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::canCachePage):
        (WebKit::WebFrameLoaderClient::convertMainResourceLoadToDownload):
        (WebKit::WebFrameLoaderClient::createFrame):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        (WebKit::WebFrame::source):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::downloadRequest):
        (WebKit::WebProcess::resumeDownload):
        (WebKit::WebProcess::releasePageCache):
        (WebKit::WebProcess::fetchWebsiteData):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2015-11-18  Chris Dumez  <cdumez@apple.com>

        Clean up / optimize NetworkCacheSubresourcesEntry
        https://bugs.webkit.org/show_bug.cgi?id=151405

        Reviewed by Antti Koivisto.

        Clean up / optimize NetworkCacheSubresourcesEntry:
        - Remove m_sourceStorageRecord data member
        - Avoid copying the Key when constructing it

        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::encodeAsSubresourcesRecord):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.cpp:
        (WebKit::NetworkCache::SubresourcesEntry::SubresourcesEntry):
        * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h:

2015-11-18  Jer Noble  <jer.noble@apple.com>

        Expose WebCore's AudioPlaybackRequiresUserGesture setting to WebKit & WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=151274

        Reviewed by Anders Carlsson.

        Add a new, private, WKWebViewConfiguration property, _requiresUserActionForAudioPlayback,
        and use that configuration property to set WebCore's AudioPlaybackRequiresUserGesture setting
        during page creation.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAudioPlaybackRequiresUserGesture): Add legacy C API for setting this new WK preference.
        (WKPreferencesGetAudioPlaybackRequiresUserGesture): Ditto.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Set the page configuration value from preferences.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Default the value of the new configuration property to YES for iOS.
        (-[WKWebViewConfiguration copyWithZone:]): Copy the value across.
        (-[WKWebViewConfiguration _requiresUserActionForAudioPlayback]): Simple getter.
        (-[WKWebViewConfiguration _setRequiresUserActionForAudioPlayback:]): Simple setter.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Set WebCore's audioPlaybackRequiresUserGesture Setting.

2015-11-18  Daniel Bates  <dabates@apple.com>

        [iOS] ASSERTION FAILED: temporaryFilePath.last() == '/' in WebCore::openTemporaryFile()
        https://bugs.webkit.org/show_bug.cgi?id=151392
        <rdar://problem/23595341>

        Reviewed by Alexey Proskuryakov.

        Workaround <rdar://problem/23579077> where confstr(_CS_DARWIN_USER_TEMP_DIR, ..., ...) retrieves
        the path to the user temporary directory without a trailing slash in the iOS simulator.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::createHandleForTemporaryFile): Add a path separator (/) between the directory path and filename.

2015-11-17  Geoffrey Garen  <ggaren@apple.com>

        A window with a hung tab waits 5s before closing
        https://bugs.webkit.org/show_bug.cgi?id=151319

        Reviewed by Anders Carlsson.

        I manually tested that I did not break unload events upon window close
        by running run-webkit-httpd and invoking a 1x1 image load of
        http://127.0.0.1:8000/navigation/resources/save-Ping.php from an unload
        handler.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::tryClose): Use the sudden termination bit to
        close without waiting for a response.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::isSuddenTerminationEnabled): Expose the bit.

2015-11-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web Process crashes on reparenting a WebView with AC mode on
        https://bugs.webkit.org/show_bug.cgi?id=151139

        Reviewed by Mario Sanchez Prada.

        When the web view is reparented, the widget is first unrealized,
        and then realized again when added to the new parent. In the
        second realize, the old redirected XComposite window is destroyed
        and a new one is created, but the web process is still using the
        old redirected window ID. As soon as the redirected window is
        destroyed and the web process tries to use the window ID, it
        crashes due to a BadDrawable X error. We have to notify the web
        process as soon as the web view is unrealized to stop using the
        current window ID and exit accelerated compositing mode until a
        new window ID is given. This notification needs to be synchronous,
        because the window can be destroyed in the UI process before the
        message is received in the web process.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Add an assert to ensure we never have
        a redirected window when the view is realized. Also check drawing
        area is not nullptr, since it can be destroyed at any time if the
        web process crashes.
        (webkitWebViewBaseUnrealize): Call
        DrawingAreaProxyImpl::destroyNativeSurfaceHandleForCompositing()
        and destroy the redirected XComposite window.
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::destroyNativeSurfaceHandleForCompositing):
        Send DestroyNativeSurfaceHandleForCompositing synchronous messsage
        to the web process.
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in: Add
        DestroyNativeSurfaceHandleForCompositing message.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::destroyNativeSurfaceHandleForCompositing):
        Set the native surface handler for compositing to 0 to reset it.
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::makeContextCurrent): Return false
        early always when layer tree context ID is 0, even if we already
        have a context.
        (WebKit::LayerTreeHostGtk::setNativeSurfaceHandleForCompositing):
        Cancel any pending layer flush when setting a new handler.

2015-11-16  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build and make PluginProcess executable
        https://bugs.webkit.org/show_bug.cgi?id=151332

        Reviewed by Tim Horton.

        * PlatformMac.cmake:

2015-11-16  Tim Horton  <timothy_horton@apple.com>

        Multi-WKWebView find completes after the first view
        https://bugs.webkit.org/show_bug.cgi?id=151325

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKTextFinderClient.mm:
        (-[WKTextFinderClient findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:]):
        Update progress before calling the completion handler; NSTextFinder assumes
        that if the progress doesn't change, the search is complete.

2015-11-16  Ryuan Choi  <ryuan.choi@navercorp.com>

        WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction calls an std::function after it's been moved from
        https://bugs.webkit.org/show_bug.cgi?id=151248

        Reviewed by Darin Adler.

        Like r188287, calling an empty std::function results in a std::bad_function_call
        exception being thrown when sendSync is failed.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2015-11-16  Beth Dakin  <bdakin@apple.com>

        Add SPI for handling inline link navigation for peek/pop
        https://bugs.webkit.org/show_bug.cgi?id=151270
        -and corresponding-
        rdar://problem/22233739

        Reviewed by Darin Adler.

        This patch adds three new SPI methods. If a client wants to disable previews 
        entirely for the given element, they should return NO in 
        shouldPreviewElement:. Returning NO in shouldPreviewElement will prevent the 
        other methods from being invoked. The client can provide a custom preview by 
        returning their own UIViewController from 
        previewingViewControllerForElement:defaultActions:. Returning nil will result 
        in the default preview behavior for that element. This will allow clients to 
        implement this method to handle http link navigation inline, but still opt 
        into UIKit’s built-in DataDetectors behaviors for DD links once we start 
        supporting DD links in WK2. 
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        Added linkURL to _WKElementInfo. linkURL will be nil for elements that are 
        not links.
        * UIProcess/API/Cocoa/_WKElementInfo.h:
        * UIProcess/API/Cocoa/_WKElementInfo.mm:
        (-[_WKElementInfo copyWithZone:]):
        (-[_WKElementInfo linkURL]):
        * UIProcess/API/Cocoa/_WKElementInfoInternal.h: Added.

        _WKPreviewingElementInfo inherits from _WKElementInfo. Added a constructor.
        * UIProcess/API/Cocoa/_WKPreviewElementInfo.h: Added.
        * UIProcess/API/Cocoa/_WKPreviewElementInfo.mm: Added.
        (-[_WKPreviewElementInfo _initWithLinkURL:]):
        * UIProcess/API/Cocoa/_WKPreviewElementInfoInternal.h: Added.

        Invoke shouldPreviewElement:.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):

        Invoke previewingViewControllerForElement: for all potentially preview-able 
        elements that have a default implementations, which will be limited to links 
        at this time.
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):

        Invoke commitPreviewingViewController:
        (-[WKContentView _previewItemController:commitPreview:]):
        * WebKit2.xcodeproj/project.pbxproj:

2015-11-16  Anders Carlsson  <andersca@apple.com>

        Add identifier strings for a bunch of context menu items
        https://bugs.webkit.org/show_bug.cgi?id=151272

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKMenuItemIdentifiers.mm: Added.
        * UIProcess/API/Cocoa/WKMenuItemIdentifiersPrivate.h: Added.
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::menuItemIdentifier):
        (WebKit::WebContextMenuProxyMac::createShareMenuItem):
        (WebKit::WebContextMenuProxyMac::createContextMenuItem):
        * WebKit2.xcodeproj/project.pbxproj:

2015-11-16  Simon Fraser  <simon.fraser@apple.com>

        Sort the Xcode project files.

        * WebKit2.xcodeproj/project.pbxproj:

2015-11-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r192445, r192451, and r192452.
        https://bugs.webkit.org/show_bug.cgi?id=151291

        Broke Mavericks build (and thus EWS) (Requested by ap on
        #webkit).

        Reverted changesets:

        "Add identifier strings for a bunch of context menu items"
        https://bugs.webkit.org/show_bug.cgi?id=151272
        http://trac.webkit.org/changeset/192445

        "Try to fix the 32-bit build"
        http://trac.webkit.org/changeset/192451

        "Try to fix the 32-bit build"
        http://trac.webkit.org/changeset/192452

2015-11-13  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the 32-bit build

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::createShareMenuItem):

2015-11-13  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the 32-bit build

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::menuItemIdentifier):

2015-11-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        WK2 iOS interaction tests in LayoutTests/fast/events/ios are flaky
        https://bugs.webkit.org/show_bug.cgi?id=151199
        <rdar://problem/23518459>

        Reviewed by Tim Horton.

        While transforming touch positions from document to global coordinates, HIDEventGenerator
        sometimes uses an old scale of the webview in computing the transformed position. This happens
        in spite of how we force the UI script to run after the UI process receives a layer tree commit
        because we invoke the callback before calling WebPageProxy::didCommitLayerTree, which is where
        we actually use the layer transaction information to update the WKWebView.

        To fix this, we run the drawing-ensured callbacks after committing the layer tree, so the
        callbacks will have updated information about the web view's scale and dimensions.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):

2015-11-13  Tim Horton  <timothy_horton@apple.com>

        Support printing in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=151276
        <rdar://problem/23525715>

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _printOperationWithPrintInfo:]):
        (-[WKWebView _printOperationWithPrintInfo:forFrame:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Expose SPI similar to what we have on WKView.

2015-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Follow-up to r192437. Add availability macros.

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2015-11-13  Anders Carlsson  <andersca@apple.com>

        Add identifier strings for a bunch of context menu items
        https://bugs.webkit.org/show_bug.cgi?id=151272

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKMenuItemIdentifiers.mm: Added.
        * UIProcess/API/Cocoa/WKMenuItemIdentifiersPrivate.h: Added.
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::menuItemIdentifier):
        (WebKit::WebContextMenuProxyMac::createShareMenuItem):
        (WebKit::WebContextMenuProxyMac::createContextMenuItem):
        * WebKit2.xcodeproj/project.pbxproj:

2015-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide a way to override the WKWebView remote inspector name
        https://bugs.webkit.org/show_bug.cgi?id=151075

        Reviewed by Tim Horton.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _remoteInspectionNameOverride]):
        (-[WKWebView _setRemoteInspectionNameOverride:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setRemoteInspectionNameOverride):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::remoteInspectionNameOverride):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):
        (WebKit::WebPage::setRemoteInspectionNameOverride):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-11-13  Tim Horton  <timothy_horton@apple.com>

        Hardware keyboard spacebar scrolls too far on iOS
        https://bugs.webkit.org/show_bug.cgi?id=151227
        <rdar://problem/23500681>

        Reviewed by Simon Fraser.

        There were two bugs conspiring here to make spacebar scrolling very wrong on iOS:

        1) Incoming key events were being handled twice
            - fix this by only propagating the event to super if we don't
            end up handling the event ourselves

        2) _scrollByOffset was not converting the offset delta out of content coordinates
            - fix this by doing the relevant conversion and renaming the function
            to make it more clear exactly what it does

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollByContentOffset:]):
        (-[WKWebView _scrollByOffset:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Rename to _scrollByContentOffset to make it clear that this is
        in content coordinates, and do the conversion from content coordinates
        (apply the scale) so that we scroll by the right amount.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::doneWithKeyEvent):
        Pass whether the event was handled through to WKContentView.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKWebEvent dealloc]):
        Add WKWebEvent, which is a WebEvent and retains a reference to the UIEvent
        from which it came.

        (-[WKContentView _handleKeyUIEvent:]):
        Only pass the event to super immediately if we don't try to handle it.
        We'll re-send it to super asynchronously if we decide not to handle it.

        (-[WKContentView handleKeyEvent:]):
        If we're in the middle of resending an event we didn't handle the first
        time, just ignore it.

        Make a WKWebEvent and store the UIEvent on it.

        (-[WKContentView _didHandleKeyEvent:eventWasHandled:]):
        If the event wasn't handled, and is one of our special events with a
        wrapped UIEvent, resend it to super. We'll ignore it as noted above.

        (-[WKContentView _interpretKeyEvent:isCharEvent:]):
        Factor out unobscured content rect retrieval.
        Make use of Scrollbar::pageStep to match the Mac behavior of not
        scrolling quite a whole page when scrolling with the spacebar.

2015-11-12  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Fix wrong test case for window_create since r192196
        https://bugs.webkit.org/show_bug.cgi?id=151247

        Reviewed by Gyuyoung Kim.

        r192196 introduces new test cases for window_create but there are typos which hide bug
        This patch fixes typos and split ewk_view_create_window test case.

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

2015-11-12  Anders Carlsson  <andersca@apple.com>

        Add a context menu delegate method that takes a userInfo parameter
        https://bugs.webkit.org/show_bug.cgi?id=151232

        Reviewed by Tim Horton.

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::menuFromProposedMenu):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2015-11-12  Anders Carlsson  <andersca@apple.com>

        ContextMenuAction and WebMenuItemTag shouldn't have to be in sync
        https://bugs.webkit.org/show_bug.cgi?id=151226

        Reviewed by Tim Horton.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        Remove ContextMenuItemTagOpenLinkInThisWindow.

2015-11-12  Anders Carlsson  <andersca@apple.com>

        ContextMenuController::contextMenuItemSelected only needs the action and title, not the full item
        https://bugs.webkit.org/show_bug.cgi?id=151217

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::itemSelected):

2015-11-12  Anders Carlsson  <andersca@apple.com>

        Remove an unused function
        https://bugs.webkit.org/show_bug.cgi?id=151215

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::contextMenuItemSelected): Deleted.
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:

2015-11-11  Anders Carlsson  <andersca@apple.com>

        Enable cross-platform context menus by default
        https://bugs.webkit.org/show_bug.cgi?id=151173

        Reviewed by Tim Horton.

        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::WebContextMenuItemData): Deleted.
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::menuItemsWithUserData): Deleted.

2015-11-12  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (PluginServiceInitializer):

2015-11-12  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(SATURATED_LAYOUT_ARITHMETIC) guards
        https://bugs.webkit.org/show_bug.cgi?id=150972

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2015-11-11  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Print result of memory sampler more readable
        https://bugs.webkit.org/show_bug.cgi?id=151085

        Reviewed by Darin Adler.

        Current memory sampler prints result of memory sample horizontally. It makes us hard to read
        the result at a glance. To improve readability of the memory sampler result, this patch prints it
        vertically.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::appendCurrentMemoryUsageToFile):
        (WebKit::WebMemorySampler::writeHeaders):

2015-11-11  Geoffrey Garen  <ggaren@apple.com>

        Rename handle.*Event to dispatch.*Event
        https://bugs.webkit.org/show_bug.cgi?id=151168

        Reviewed by Chris Dumez.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebKit::WebFrameLoaderClient::dispatchDidDispatchOnloadEvents):
        (WebKit::WebFrameLoaderClient::dispatchDidHandleOnloadEvents): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2015-11-11  Anders Carlsson  <andersca@apple.com>

        Fix builds.

        * WebProcess/WebCoreSupport/efl/WebContextMenuClientEfl.cpp:
        (WebKit::WebContextMenuClient::shareMenuItem): Deleted.
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        (WebKit::WebContextMenuClient::shareMenuItem): Deleted.

2015-11-11  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r191407): Context menus are missing Services
        https://bugs.webkit.org/show_bug.cgi?id=151167
        rdar://problem/23500769

        Reviewed by Tim Horton.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        Use contentsToRootView to better indicate which coordinate system we're using.

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):
        Use +[NSMenu popUpContextMenu:withEvent:forView:] so we'll get service menus where applicable.

2015-11-11  Anders Carlsson  <andersca@apple.com>

        Remove more dead context menu code
        https://bugs.webkit.org/show_bug.cgi?id=151163

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::shareMenuItem): Deleted.

2015-11-11  Tim Horton  <timothy_horton@apple.com>

        Remove an unnecessary zero-delay timer from swipe snapshot removal
        https://bugs.webkit.org/show_bug.cgi?id=151161

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::mainFrameDidLayout):
        (WebKit::ViewGestureGeometryCollector::ViewGestureGeometryCollector): Deleted.
        (WebKit::ViewGestureGeometryCollector::renderTreeSizeNotificationTimerFired): Deleted.
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        There's no discernable reason for this zero-delay timer, and it dates back
        to the original swipe patch with no explanation given. My only theory
        is that I was depending on spinning the runloop to ensure we've painted,
        but we have other mechanisms to do that now, on both platforms.

        This also was a surprising waste of time in some cases where the web
        process was very slow.

2015-11-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix the Mac CMake build.

        * CMakeLists.txt:

2015-11-11  Chris Dumez  <cdumez@apple.com>

        [WK2] Add initial support for speculative resource revalidation to the WebKit disk cache
        https://bugs.webkit.org/show_bug.cgi?id=150856
        <rdar://problem/23092196>

        Reviewed by Antti Koivisto.

        Add initial support for speculative resource revalidation to the WebKit
        disk cache. When a main resource is requested by WebCore, we look up its
        list of subresources in the cache and speculatively warm them up before
        WebCore asks for them, in order to improve page load time. In this
        context, warming it up means:
        1. If the cached resource is usable (has not expired), keep it around
           in a memory for a limited amount of time (10 seconds).
        2. If the resource has expired, do a speculative revalidation of the
           resource and then keep it in memory for a while as well (10 seconds).

        The feature is currently behind a compile-time flag that is only enabled
        on COCOA. Also, it is currently disabled at run-time until it is mature
        enough.

        Initial results show that speculative revalidation gives a ~5%
        progression on throttled warm PLT on iPhone 5s.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::update):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):
        * NetworkProcess/cache/NetworkCacheEntry.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp: Added.
        (WebKit::NetworkCache::SpeculativeLoad::SpeculativeLoad):
        (WebKit::NetworkCache::SpeculativeLoad::~SpeculativeLoad):
        (WebKit::NetworkCache::SpeculativeLoad::willSendRedirectedRequest):
        (WebKit::NetworkCache::SpeculativeLoad::didReceiveBuffer):
        (WebKit::NetworkCache::SpeculativeLoad::didFinishLoading):
        (WebKit::NetworkCache::SpeculativeLoad::didFailLoading):
        (WebKit::NetworkCache::SpeculativeLoad::didComplete):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.h: Added.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp:
        (WebKit::NetworkCache::constructRevalidationRequest):
        (WebKit::NetworkCache::responseNeedsRevalidation):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::PreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::takeCacheEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::PreloadedEntry::lifetimeTimerFired):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::PendingFrameLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieve):
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::addPreloadedEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::retrieveEntryFromStorage):
        (WebKit::NetworkCache::SpeculativeLoadManager::satisfyPendingRequests):
        (WebKit::NetworkCache::SpeculativeLoadManager::revalidateEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::preloadEntry):
        (WebKit::NetworkCache::SpeculativeLoadManager::startSpeculativeRevalidation):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::registerSubresource): Deleted.
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::encodeAsSubresourcesRecord): Deleted.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-11-11  Anders Carlsson  <andersca@apple.com>

        _WKRemoteObjectInterface should handle specifying allowed classes for reply block arguments
        https://bugs.webkit.org/show_bug.cgi?id=151144

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.h:
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (classesForSelectorArgument):
        (-[_WKRemoteObjectInterface classesForSelector:argumentIndex:ofReply:]):
        (-[_WKRemoteObjectInterface setClasses:forSelector:argumentIndex:ofReply:]):
        (-[_WKRemoteObjectInterface classesForSelector:argumentIndex:]):
        (-[_WKRemoteObjectInterface setClasses:forSelector:argumentIndex:]):

2015-11-11  Tim Horton  <timothy_horton@apple.com>

        Add some font-related preferences to the modern API
        https://bugs.webkit.org/show_bug.cgi?id=151138
        <rdar://problem/23492636>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _defaultFontSize]):
        (-[WKPreferences _setDefaultFontSize:]):
        (-[WKPreferences _defaultFixedPitchFontSize]):
        (-[WKPreferences _setDefaultFixedPitchFontSize:]):
        (-[WKPreferences _fixedPitchFontFamily]):
        (-[WKPreferences _setFixedPitchFontFamily:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2015-11-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Runtime critical warnings when closing a page containing windowed plugins
        https://bugs.webkit.org/show_bug.cgi?id=151132

        Reviewed by Martin Robinson.

        This is because our plugin widget, that is a GtkPlug (derived from
        GtkWindow), can receive the delete-event signal before
        NetscapePlugin::platformDestroy is called. The delete-event
        signal, by default, destroys the window when the signal is not
        handled. So, after the delete-event the GtkPlug is destroyed, but
        our pointer hasn't been reset. We can handle the delete-event
        using gtk_widget_hide_on_delete as callback, so that the plugin
        widget is hidden instead of destroyed.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPostInitializeWindowed):

2015-11-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r191856): [GTK] SOCK_SEQPACKET no longer used after r191856
        https://bugs.webkit.org/show_bug.cgi?id=151129

        Reviewed by Martin Robinson.

        r191856 unconditionally disabled SOCK_SEQPACKET for GTK port.

        * Platform/IPC/unix/ConnectionUnix.cpp: Use always SOCK_SEQPACKET
        when available.

2015-11-10  Alex Christensen  <achristensen@webkit.org>

        Implement authentication challenge handling when using NETWORK_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=150968

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkLoad.cpp:
        (WebKit::NetworkLoad::didReceiveChallenge):
        Copy functionality from NetworkLoad::canAuthenticateAgainstProtectionSpaceAsync (which is used when we don't use NETWORK_SESSION)
        because there is no canAuthenticateAgainstProtectionSpace delegate callback when using NSURLSession, according to
        https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/AuthenticationChallenges.html
        Instead, all authentication challenge callbacks go to URLSession:task:didReceiveChallenge:completionHandler:
        because we do not implement URLSession:didReceiveChallenge:completionHandler:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[NetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[NetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[NetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        Make a block copy of the completion handlers so we can copy the std::functions that wrap them into HashMaps and call them later,
        in this case we call the completion handler after the UIProcess gives us credentials for an authentication challenge.
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        (WebKit::AuthenticationManager::addChallengeToChallengeMap):
        (WebKit::AuthenticationManager::shouldCoalesceChallenge):
        (WebKit::AuthenticationManager::coalesceChallengesMatching):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        Fix an existing bug that caused multiple calls to addChallengeToChallengeMap for one challenge.  This caused too many calls to 
        the AuthenticationClient methods, which did not cause a problem because they were not one-time-use block copies of completion handlers before.
        (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):
        Call completion handlers which we stored in a HashMap before doing IPC if we are using NETWORK_SESSION,
        which has completion handlers instead of continueSomething client calls.
        * Shared/Authentication/AuthenticationManager.h:
        (WebKit::AuthenticationManager::outstandingAuthenticationChallengeCount):
        * Shared/Downloads/Download.cpp:
        (WebKit::Download::didReceiveAuthenticationChallenge):
        (WebKit::Download::didReceiveResponse):
        * Shared/Downloads/DownloadAuthenticationClient.cpp:
        (WebKit::DownloadAuthenticationClient::receivedChallengeRejection):
        * Shared/Downloads/DownloadAuthenticationClient.h:
        Add ifdefs for code related to downloading I will implement later.

2015-11-10  Simon Fraser  <simon.fraser@apple.com>

        Use different pixel formats for displays that support them
        https://bugs.webkit.org/show_bug.cgi?id=151122
        rdar://problem/22846841

        Reviewed by Tim Horton.
        
        New the new IOSurface formats when appropriate for the properties of the
        display.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::bufferFormat):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):

2015-11-10  Tim Horton  <timothy_horton@apple.com>

        Adopt formal protocols for CA delegates
        https://bugs.webkit.org/show_bug.cgi?id=151121
        <rdar://problem/6739193>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/Cocoa/WebViewImpl.mm:
        * UIProcess/mac/WKTextFinderClient.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        Adapt to the split out SPI headers.

        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        Conform!

2015-11-10  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

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

2015-11-10  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Rename SpeculativeLoader to SpeculativeLoadManager
        https://bugs.webkit.org/show_bug.cgi?id=151110

        Reviewed by Alex Christensen.

        Rename SpeculativeLoader to SpeculativeLoadManager for clarity, as it
        manages all speculative loads.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::initialize):
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.cpp: Renamed from Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoader.cpp.
        (WebKit::NetworkCache::subresourcesType):
        (WebKit::NetworkCache::makeSubresourcesKey):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::PendingFrameLoad):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::registerSubresource):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::encodeAsSubresourcesRecord):
        (WebKit::NetworkCache::SpeculativeLoadManager::PendingFrameLoad::markAsCompleted):
        (WebKit::NetworkCache::SpeculativeLoadManager::SpeculativeLoadManager):
        (WebKit::NetworkCache::SpeculativeLoadManager::~SpeculativeLoadManager):
        (WebKit::NetworkCache::SpeculativeLoadManager::registerLoad):
        * NetworkProcess/cache/NetworkCacheSpeculativeLoadManager.h: Renamed from Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoader.h.
        * WebKit2.xcodeproj/project.pbxproj:

2015-11-10  Tim Horton  <timothy_horton@apple.com>

        Add WKWebViewConfiguration SPI for a variety of different ex-preferences
        https://bugs.webkit.org/show_bug.cgi?id=151070
        <rdar://problem/23020454>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _setRespectsImageOrientation:]):
        (-[WKWebViewConfiguration _respectsImageOrientation]):
        (-[WKWebViewConfiguration _setPrintsBackgrounds:]):
        (-[WKWebViewConfiguration _printsBackgrounds]):
        (-[WKWebViewConfiguration _setIncrementalRenderingSuppressionTimeout:]):
        (-[WKWebViewConfiguration _incrementalRenderingSuppressionTimeout]):
        (-[WKWebViewConfiguration _setAllowsJavaScriptMarkup:]):
        (-[WKWebViewConfiguration _allowsJavaScriptMarkup]):
        (-[WKWebViewConfiguration _setConvertsPositionStyleOnCopy:]):
        (-[WKWebViewConfiguration _convertsPositionStyleOnCopy]):
        (-[WKWebViewConfiguration _setAllowsMetaRefresh:]):
        (-[WKWebViewConfiguration _allowsMetaRefresh]):
        (-[WKWebViewConfiguration _setShowsURLsInToolTips:]):
        (-[WKWebViewConfiguration _showsURLsInToolTips]):
        (-[WKWebViewConfiguration _setServiceControlsEnabled:]):
        (-[WKWebViewConfiguration _serviceControlsEnabled]):
        (-[WKWebViewConfiguration _setImageControlsEnabled:]):
        (-[WKWebViewConfiguration _imageControlsEnabled]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        Plumb some configuration SPI for various clients.

2015-11-10  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Update WebContent sandbox profile to allow loading injected bundles again
        https://bugs.webkit.org/show_bug.cgi?id=151102
        <rdar://problem/23442311>

        Reviewed by Dan Bernstein.

        Update WebContent sandbox profile to allow loading injected bundles again.

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

2015-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] Environment variable should take precedence over directories in plugin search path
        https://bugs.webkit.org/show_bug.cgi?id=151096

        Reviewed by Martin Robinson.

        Otherwise you can't override the directories using the env vars
        for plugins already installed.

        * Shared/Plugins/unix/PluginSearchPath.cpp:
        (WebKit::pluginsDirectories):

2015-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use CROSS_PLATFORM_CONTEXT_MENUS
        https://bugs.webkit.org/show_bug.cgi?id=150642

        Reviewed by Martin Robinson.

        Use CROSS_PLATFORM_CONTEXT_MENUS. Since we can't just use
        WebContextMenuItemData, because we need to bind a GtkAction to the
        menu items, this patch adds WebContextMenuItemGtk that derives
        from WebContextMenuItemData and adds the GtkAction and its own
        handling of submenu items. WebKitContextMenu and
        WebKitContextMenuItem no longer deal with the widgets (GtkMenu and
        GtkMenuItem), that are now created by WebContextMenuProxy when
        building the popup menu.
        This patch also removes the support for input methods submenu,
        since it has been deprecated (and disabled by default) in GTK+ for
        long time, it has never actually worked (because the menu items
        don't have a GtkAction associated) and it makes the code more
        complicated for no benefit.

        * PlatformGTK.cmake:
        * Shared/gtk/WebContextMenuItemGtk.cpp: Added.
        (WebKit::gtkStockIDFromContextMenuAction):
        (WebKit::WebContextMenuItemGtk::WebContextMenuItemGtk):
        (WebKit::WebContextMenuItemGtk::~WebContextMenuItemGtk):
        (WebKit::WebContextMenuItemGtk::createGtkActionIfNeeded):
        * Shared/gtk/WebContextMenuItemGtk.h: Copied from Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h.
        (WebKit::WebContextMenuItemGtk::gtkAction):
        (WebKit::WebContextMenuItemGtk::submenuItems):
        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        (webkitContextMenuPopulate):
        (webkitContextMenuCreate): Deleted.
        (webkitContextMenuSetParentItem): Deleted.
        * UIProcess/API/gtk/WebKitContextMenuActions.cpp:
        (webkitContextMenuActionGetForContextMenuItem):
        * UIProcess/API/gtk/WebKitContextMenuActionsPrivate.h:
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        (webkitContextMenuItemSetSubMenu):
        (webkitContextMenuItemCreate):
        (webkitContextMenuItemToWebContextMenuItemGtk):
        (webkitContextMenuItemToWebContextMenuItemData):
        (webkit_context_menu_item_new):
        (webkit_context_menu_item_new_from_stock_action):
        (webkit_context_menu_item_new_from_stock_action_with_label):
        (webkit_context_menu_item_new_with_submenu):
        (webkit_context_menu_item_new_separator):
        (webkit_context_menu_item_get_action):
        (webkit_context_menu_item_get_stock_action):
        (webkit_context_menu_item_is_separator): Deleted.
        * UIProcess/API/gtk/WebKitContextMenuItemPrivate.h:
        * UIProcess/API/gtk/WebKitContextMenuPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewPopulateContextMenu):
        (contextMenuDismissed): Deleted.
        (webkitWebViewSubmitFormRequest): Deleted.
        (webkitWebViewHandleAuthenticationChallenge): Deleted.
        (webkitWebViewInsecureContentDetected): Deleted.
        (webkitWebViewEmitRunColorChooser): Deleted.
        (webkitWebViewRequestInstallMissingMediaPlugins): Deleted.
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::contextMenuItemActivatedCallback):
        (WebKit::WebContextMenuProxyGtk::append):
        (WebKit::WebContextMenuProxyGtk::populate):
        (WebKit::WebContextMenuProxyGtk::show):
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:
        (WebKit::WebContextMenuProxyGtk::gtkMenu):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:

2015-11-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r192184.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):
        (WebKit::LayerTreeHostGtk::pageBackgroundTransparencyChanged):

2015-11-09  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Add a mock AppleTV device for testing
        https://bugs.webkit.org/show_bug.cgi?id=148912
        <rdar://problem/22596272>

        Reviewed by Tim Horton.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encode): Update for MediaPlaybackTargetContext changes.
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::decode): Ditto.
        * Shared/WebCoreArgumentCoders.h:

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encodePlatformData): Ditto.
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::decodePlatformData): Ditto.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMockMediaPlaybackTargetPickerEnabled): New.
        (WebKit::WebPageProxy::setMockMediaPlaybackTargetPickerState): Ditto.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPageProxy.messages.in: Add SetMockMediaPlaybackTargetPickerEnabled and 
          SetMockMediaPlaybackTargetPickerState.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setMockMediaPlaybackTargetPickerEnabled): New.
        (WebKit::WebChromeClient::setMockMediaPlaybackTargetPickerState): Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

        * WebProcess/WebPage/WebPage.h: MediaPlaybackTargetContext is a class, not a struct.

        * WebProcess/WebPage/WebPage.messages.in: Ditto.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::playbackTargetSelected): Support mock target.

2015-11-09  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Crash while opening child webview with EWK_PROCESS_MODEL_MULTIPLE_SECONDARY
        https://bugs.webkit.org/show_bug.cgi?id=145924

        Reviewed by Gyuyoung Kim.

        There are some crashes when we clicked the link that opens child window
        via window.open or <a> tag with _blank target if process model is multiple
        secondary.

        It's because multiple secondary process model tries to assign new webprocess
        if related page is null. In order to keep the child window in same process
        with opener, we should pass related page when we create WebPageProxy.

        This patch adds ewk_view_configuration object and ewk_view_add_configuration()
        to pass related page to WebPageProxy.

        * PlatformEfl.cmake:
        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewCreate):
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/efl/EWebKit2.h.in:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::createNewPage):
        * UIProcess/API/efl/ewk_view_configuration.cpp: Added.
        * UIProcess/API/efl/ewk_view_configuration.h: Added.
        * UIProcess/API/efl/ewk_view_configuration_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (EWKViewCreate):
        (ewk_view_smart_add):
        (ewk_view_add_with_configuration): Added to pass configuration.
        (ewk_view_add_with_context):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilTitleChangedTo):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilNotNull):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Added test cases to test window_create smart method.
        (windowCreateCallback):
        (TEST_F):
        (EWK2ViewTestNewWindowWithMultipleProcesses::EWK2ViewTestNewWindowWithMultipleProcesses):
        * UIProcess/API/efl/tests/test_ewk2_window_features.cpp:
        (EWK2WindowFeaturesTest::createDefaultWindow):
        (EWK2WindowFeaturesTest::createWindow):
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::WebView):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebView::create):
        (WebKit::WebViewEfl::WebViewEfl):
        * UIProcess/efl/WebViewEfl.h:

2015-11-09  Anders Carlsson  <andersca@apple.com>

        Don't call Vector::uncheckedAppend on a vector that we haven't reserved the capacity for
        https://bugs.webkit.org/show_bug.cgi?id=151069
        rdar://problem/23473435

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (initializeMethod):

2015-11-09  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::callReplyBlock):

2015-11-09  Anders Carlsson  <andersca@apple.com>

        Add reply blocks to _WKRemoteObjectInterface similar to NSXPCConnection
        https://bugs.webkit.org/show_bug.cgi?id=151056
        rdar://problem/23222609

        Reviewed by Tim Horton.

        * Platform/spi/Cocoa/NSInvocationSPI.h:
        Add NSBlockInvocation declaration.

        * Shared/API/Cocoa/RemoteObjectInvocation.mm:
        (WebKit::RemoteObjectInvocation::encode):
        Encode true if we have a reply ID.

        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        Add new members.

        * Shared/API/Cocoa/RemoteObjectRegistry.messages.in:
        Add new CallReplyBlock message.

        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::sendReplyBlock):
        Just send the CallReplyBlock message.

        (WebKit::RemoteObjectRegistry::callReplyBlock):
        Call through to _WKRemoteObjectRegistry.

        * Shared/API/Cocoa/WKRemoteObjectCoder.h:
        Pass an optional reply selector.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (encodeInvocationArguments):
        Don't hard-code the first argument index.

        (encodeInvocation):
        Encode block invocations.

        (-[WKRemoteObjectDecoder initWithInterface:rootObjectDictionary:replyToSelector:]):
        Initialize _replyToSelector.

        (validateClass):
        NSBlockInvocation doesn't need to conform to NSSecureCoding.

        (decodeInvocationArguments):
        Don't hard-code the first argument, take it as a parameter instead.

        (decodeInvocation):
        Decode NSBlockInvocations (reply block invocations).

        (decodeObject):
        Check for NSBlockInvocation.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (-[_WKRemoteObjectInterface _methodSignatureForSelector:]):
        Return null if we can't find the method.

        (-[_WKRemoteObjectInterface _methodSignatureForReplyBlockOfSelector:]):
        Look up the reply block signature and return it.

        (-[_WKRemoteObjectInterface _allowedArgumentClassesForReplyBlockOfSelector:]):
        Look up the allowed reply argument classes and return them.

        * Shared/API/Cocoa/_WKRemoteObjectInterfaceInternal.h:
        Add new methods.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (PendingReply::PendingReply):
        Add new object that represents a pending reply.

        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]):
        If the invocation has a reply block, add a pending reply to our map.

        (-[_WKRemoteObjectRegistry _invokeMethod:]):
        If the method we're about to invoke has a reply block, construct a special reply block that calls us back with an invocation.
        Encode this invocation and send it back across the wire.

        (-[_WKRemoteObjectRegistry _callReplyWithID:blockInvocation:]):
        Find the pending reply, decode the reply block invocation and call it.

        * Shared/API/Cocoa/_WKRemoteObjectRegistryInternal.h:
        Add new methods.

2015-11-09  Tim Horton  <timothy_horton@apple.com>

        Add drawsBackground SPI to WKWebView, and get rid of drawsTransparentBackground from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=151054
        <rdar://problem/22907994>

        Reviewed by Simon Fraser.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Deleted.
        (WebKit::WebPageCreationParameters::decode): Deleted.
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView setDrawsTransparentBackground:]):
        (-[WKView drawsTransparentBackground]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::updateLayer):
        (WebKit::WebViewImpl::setDrawsTransparentBackground): Deleted.
        (WebKit::WebViewImpl::drawsTransparentBackground): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Deleted.
        (WebKit::WebPageProxy::setDrawsTransparentBackground): Deleted.
        (WebKit::WebPageProxy::creationParameters): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::drawsTransparentBackground): Deleted.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Deleted.
        (WebKit::m_shouldDispatchFakeMouseMoveEvents): Deleted.
        (WebKit::WebPage::setDrawsTransparentBackground): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::drawsTransparentBackground): Deleted.
        * WebProcess/WebPage/WebPage.messages.in:
        Get rid of drawsTransparentBackground. It doesn't seem like there's any observable
        difference in a layer-backed world. WKView's (set)drawsTransparentBackground
        will just forward to drawsBackground (inverted).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webProcessIsResponsive]):
        Move _webProcessIsResponsive up with the other cross-platform SPI methods, instead
        of below all of the platform-specific SPI methods.

        (-[WKWebView _drawsBackground]):
        (-[WKWebView _setDrawsBackground:]):
        Added.

        (-[WKWebView _drawsTransparentBackground]):
        (-[WKWebView _setDrawsTransparentBackground:]):
        Deleted.
        
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Replace drawsTransparentBackground with drawsBackground.

2015-11-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION: 2nd level inspector should not be able to dock to first
        https://bugs.webkit.org/show_bug.cgi?id=151050

        Reviewed by Brian Burg.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCanAttach):
        Check now that the inspected view can be a WKWebView.

2015-11-09  Anders Carlsson  <andersca@apple.com>

        Introspect reply block types as well
        https://bugs.webkit.org/show_bug.cgi?id=151048

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (initializeMethod):
        (initializeMethods):
        (-[_WKRemoteObjectInterface debugDescription]):

2015-11-09  Anders Carlsson  <andersca@apple.com>

        Implement -[_WKRemoteObjectInterface debugDescription] and have it look like the NSXPCInterface equivalent
        https://bugs.webkit.org/show_bug.cgi?id=151044

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (-[_WKRemoteObjectInterface debugDescription]):
        (-[_WKRemoteObjectInterface description]): Deleted.

2015-11-06  Anders Carlsson  <andersca@apple.com>

        Rework the way allowed argument classes are stored
        https://bugs.webkit.org/show_bug.cgi?id=150992

        Reviewed by Darin Adler.

        Add a separate MethodInfo class so we have someplace to store the reply block arguments.
        Use HashSet<Class> instead of NSSet. No functionality change intended.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (-[WKRemoteObjectDecoder decodeValueOfObjCType:at:]):
        (decodeObjectFromObjectStream):
        (checkIfClassIsAllowed):
        (decodeInvocationArguments):
        (decodeObject):
        (-[WKRemoteObjectDecoder decodeObjectOfClasses:forKey:]):
        (-[WKRemoteObjectDecoder allowedClasses]):
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (isContainerClass):
        (propertyListClasses):
        (initializeMethod):
        (initializeMethods):
        (-[_WKRemoteObjectInterface initWithProtocol:identifier:]):
        (classesForSelectorArgument):
        (-[_WKRemoteObjectInterface classesForSelector:argumentIndex:]):
        (-[_WKRemoteObjectInterface setClasses:forSelector:argumentIndex:]):
        (-[_WKRemoteObjectInterface _allowedArgumentClassesForSelector:]):
        (allowedArgumentClassesForMethod): Deleted.
        (initializeAllowedArgumentClasses): Deleted.
        * Shared/API/Cocoa/_WKRemoteObjectInterfaceInternal.h:

2015-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed CMake buildfix after r192113.

        * PlatformMac.cmake: New file added.

2015-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative CMake buildfix after r192111.

        * CMakeLists.txt: New files added.

2015-11-08  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Add UserAgentEFl.cpp|h
        https://bugs.webkit.org/show_bug.cgi?id=151007

        Reviewed by Darin Adler.

        As other ports EFL port starts to have UserAgentEfl class in order to support more detailed
        UA.

        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::standardUserAgent): Call WebCore::standardUserAgent().

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

        Remove ColorSpace argument to all the drawing calls
        https://bugs.webkit.org/show_bug.cgi?id=150967

        Reviewed by Darin Adler.

        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateFromCGImage):
        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeImage):
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateScrollViewBackground]):
        * UIProcess/WKInspectorHighlightView.mm:
        (-[WKInspectorHighlightView _layoutForNodeHighlight:offset:]):
        (-[WKInspectorHighlightView _layoutForRectsHighlight:]):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _updateTapHighlight]):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSelectionSnapshot):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotAtSize):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindIndicatorOverlayClientIOS::drawRect):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::didSetupFullscreen):

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

        Use ColorSpaceSRGB for image buffers everywhere
        https://bugs.webkit.org/show_bug.cgi?id=150990

        Reviewed by Zalan Bujtas.

        ColorSpaceSRGB and ColorSpaceDeviceRGB are equivalent now, so convert
        code that creates image buffers tagged with ColorSpaceDeviceRGB to use ColorSpaceSRGB.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::decode):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2015-11-06  Brady Eidson  <beidson@apple.com>

        Modern IDB: Make the result data for a "get" request be an IDBGetResult.
        https://bugs.webkit.org/show_bug.cgi?id=150985

        Reviewed by Alex Christensen.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<IDBGetResult>::encode):
        (IPC::ArgumentCoder<IDBGetResult>::decode):

2015-11-06  Tim Horton  <timothy_horton@apple.com>

        Add preliminary (SPI) support for NSTextFinder on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=150907
        <rdar://problem/19171624>

        Reviewed by Darin Adler.

        New API test: WebKit2.FindInPage

        * Platform/spi/mac/AppKitSPI.h:
        Add some SPI.

        * UIProcess/API/APIFindClient.h:
        (API::FindClient::didFindString):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFindClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFindString):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/Cocoa/FindClient.h:
        * UIProcess/Cocoa/FindClient.mm:
        (WebKit::FindClient::didFindString):
        Make didFindString return the match rects like didFindStringMatches does.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        (WebKit::FindController::findString):
        Keep the most recent find match around for incremental find just like we do
        for the non-incremental version. This way, getImageForFindMatch and selectFindMatch
        will work for incremental find too!

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _ensureTextFinderClient]):
        (-[WKWebView findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:]):
        (-[WKWebView documentContainerView]):
        (-[WKWebView getSelectedText:]):
        (-[WKWebView selectFindMatch:completionHandler:]):
        Implement NSTextFinder's async client protocol and forward to the new WKTextFinderClient.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Privately note our conformance to the aformentioned protocol.

        * UIProcess/mac/WKTextFinderClient.h: Added.
        * UIProcess/mac/WKTextFinderClient.mm: Added.
        (WebKit::TextFinderFindClient::TextFinderFindClient):
        (-[WKTextFinderMatch initWithClient:view:index:rects:]):
        (-[WKTextFinderMatch containingView]):
        (-[WKTextFinderMatch textRects]):
        (-[WKTextFinderMatch generateTextImage:]):
        (-[WKTextFinderMatch index]):
        (-[WKTextFinderClient initWithPage:view:]):
        (-[WKTextFinderClient willDestroyView:]):
        (-[WKTextFinderClient findMatchesForString:relativeToMatch:findOptions:maxResults:resultCollector:]):
        (-[WKTextFinderClient getSelectedText:]):
        (-[WKTextFinderClient selectFindMatch:completionHandler:]):
        (-[WKTextFinderClient didFindStringMatches:rects:index:]):
        (-[WKTextFinderClient didGetImageForMatchResult:index:]):
        (-[WKTextFinderClient didFindString:rects:index:]):
        (-[WKTextFinderClient didFailToFindString:]):
        (-[WKTextFinderClient getImageForMatchResult:completionHandler:]):
        * WebKit2.xcodeproj/project.pbxproj:
        Add WKTextFinderClient. It installs itself as the FindClient and FindMatchesClient,
        so you can only use one mechanism or the other.

2015-11-06  Chris Dumez  <cdumez@apple.com>

        [WK2][SpeculativeRevalidation] Save to disk cache relationship between resources
        https://bugs.webkit.org/show_bug.cgi?id=150951
        <rdar://problem/23092196>

        Reviewed by Darin Adler.

        This patch is a first step towards speculative revalidation support in
        the WebKit network cache. It maps sub-resources to the main resource
        that caused them to be requested. We then write this information to the
        network cache, as a list of subresource keys for each main resource,
        even if the main resource is not cacheable.

        To map sub-resources to main resources, we track the loads happening
        in each frame and store the key of the main resource for the frame,
        as well as the key of each sub-resource later loaded in the frame. We
        use a HysteresisActivity to detect when loads settle down in each frame
        (no loads happen for a while) and we then write the information to the
        disk. If a new main resource is loaded in a frame where we were already
        tracking a load, we save the data to disk before tracking the new load,
        instead of waiting for the HysteresisActivity to detect the end of the
        load.

        The feature is currently behind a compile-time flag that is enabled on
        Mac and iOS only. It is also behind a runtime flag (NSUserDefaults)
        that is disabled by default.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        Pass frameID in addition to the pageID. We need to globally identify
        frames (using <pageID, frameID> pair) to be able to track loads in
        each frame.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::initialize):
        Only initialize the SpeculativeLoader if the
        enableNetworkCacheSpeculativeRevalidation run-time flag is set.

        (WebKit::NetworkCache::Cache::retrieve):
        Register the load with the SpeculativeLoader.

        * NetworkProcess/cache/NetworkCacheKey.h:
        (WebKit::NetworkCache::Key::Key):
        (WebKit::NetworkCache::Key::isHashTableDeletedValue):
        (WebKit::NetworkCache::Key::range):
        (WTF::NetworkCacheKeyHash::hash):
        (WTF::NetworkCacheKeyHash::equal):
        (WTF::HashTraits<WebKit::NetworkCache::Key>::isEmptyValue):
        Add needed HashTraits for NetworkCache::Key so it can be used as key in
        HashMap / HashSet.

        * NetworkProcess/cache/NetworkCacheSpeculativeLoader.cpp: Added.
        * NetworkProcess/cache/NetworkCacheSpeculativeLoader.h: Added.
        Add new NetworkCacheSpeculativeLoader class that takes care of tracking
        loads in each frame to map subresources to main resources and then write
        this information to the network disk cache. In the future, this class we
        also take care of triggering speculative revalidations, thus the naming.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        Add new NetworkProcess parameter to control at runtime if speculative loading
        should be enabled or not. It is disabled by default.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files to XCode project.

        * config.h:
        Add ENABLE_NETWORK_CACHE_SPECULATIVE_REVALIDATION build flag for the new
        feature that is enable by default on COCOA.

2015-11-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed, remove empty #if block landed by mistake in r192038.

        * NetworkProcess/NetworkLoad.cpp:

2015-11-06  Philip Chimento  <philip.chimento@gmail.com>

        [GTK] Fails to link libwebkit2gtkinjectedbundle.so on OSX
        https://bugs.webkit.org/show_bug.cgi?id=144785

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Add missing WebKit2 library to list of
        libraries to link with. Required for OSX build.

2015-11-05  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        Add runtime and compile time flags for enabling Web Animations API and model.
        https://bugs.webkit.org/show_bug.cgi?id=150914

        Reviewed by Benjamin Poulain.

        Add ENABLE_WEB_ANIMATIONS compile time flag, runtime flag webAnimationsEnabled and Expose WK2 preference for runtime flag.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetWebAnimationsEnabled):
        (WKPreferencesGetWebAnimationsEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        (WebKit::InjectedBundle::setWebAnimationsEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-11-05  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Separate beforeunload confirm callback from confirm callback
        https://bugs.webkit.org/show_bug.cgi?id=150964

        Reviewed by Gyuyoung Kim.

        Browser may need to distinguish between beforeunload confirm panel and general confirm panel.
        For example, browser may want to modify the message or show different buttons from confirm panel
        such as "Stay Page | Leave Page".

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::requestJSBeforeUnloadConfirmPopup):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::runBeforeUnloadConfirmPanel):

2015-11-05  Commit Queue  <commit-queue@webkit.org>

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

        This change broke an existing layout test on Yosemite and
        Mavericks (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "Preview on apple.com/contact with all text selected shows a
        map"
        https://bugs.webkit.org/show_bug.cgi?id=150963
        http://trac.webkit.org/changeset/192089

2015-11-05  Tim Horton  <timothy_horton@apple.com>

        Preview on apple.com/contact with all text selected shows a map
        https://bugs.webkit.org/show_bug.cgi?id=150963
        <rdar://problem/23421750>

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForSelection):
        In this case, we don't know where we hit, so pass a null VisiblePosition.

2015-11-05  Geoffrey Garen  <ggaren@apple.com>

        _WKObservablePageState's _webProcessIsResponsive property isn't set to YES when an unresponsive page is reloaded
        https://bugs.webkit.org/show_bug.cgi?id=150953

        Reviewed by Anders Carlsson.

        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::processTerminated): Call stop() to
        indicate that we are responsive again. This gives the client a chance
        to remove the SPOD cursor, among other things.

        * UIProcess/ResponsivenessTimer.h:
        (WebKit::ResponsivenessTimer::processTerminated): Anders told me to do this!

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessExited): Be sure to reset
        the responsiveness timer too, or it will continue thinking we are
        unresponsive after a crash or a forced load or reload.

2015-11-05  Anders Carlsson  <andersca@apple.com>

        Move invocation argument encoding out to a separate function
        https://bugs.webkit.org/show_bug.cgi?id=150950

        Reviewed by Tim Horton.

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

2015-11-05  Chris Dumez  <cdumez@apple.com>

        [WK2] Clean up / Modernize NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=150922

        Reviewed by Andreas Kling.

        Clean up / Modernize NetworkResourceLoader.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::filesInBlob):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::SynchronousLoadData::SynchronousLoadData):
        (WebKit::sendReplyToSynchronousRequest):
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::willSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::bufferingTimerFired):
        (WebKit::NetworkResourceLoader::sendBufferMaybeAborting):
        (WebKit::NetworkResourceLoader::validateCacheEntry):
        (WebKit::NetworkResourceLoader::messageSenderConnection):
        (WebKit::NetworkResourceLoader::invalidateSandboxExtensions):
        (WebKit::NetworkResourceLoader::~NetworkResourceLoader): Deleted.
        (WebKit::NetworkResourceLoader::didReceiveBuffer): Deleted.
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry): Deleted.
        (WebKit::NetworkResourceLoader::consumeSandboxExtensions): Deleted.
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure): Deleted.
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/mac/NetworkDiskCacheMonitor.h:

2015-11-05  Chris Dumez  <cdumez@apple.com>

        Regression(r192038): Safari cannot load any pages
        https://bugs.webkit.org/show_bug.cgi?id=150937
        <rdar://problem/23413859>

        Reviewed by Alex Christensen.

        Make sure we use the current "defersLoading" state instead of the
        original one when constructing / initializing the NetworkLoad.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):

2015-11-05  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Add try_close API to handle beforeunload event
        https://bugs.webkit.org/show_bug.cgi?id=150705

        Reviewed by Gyuyoung Kim.

        This patch adds ewk_view_try_close to have a chance to call confirm callback
        for beforeunload event while destryoing webview.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_try_close):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (EWK2ViewTest::beforeUnloadCallback):
        (EWK2ViewTest::windowCloseCallback):
        (TEST_F): Added test case for ewk_view_try_close.

2015-11-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Epiphany with Debug mode compiled WebKitGtk+ 2.10.3 hits ASSERT_ARG on willEnterAcceleratedCompositingMode
        https://bugs.webkit.org/show_bug.cgi?id=150620

        Reviewed by Mario Sanchez Prada.

        WillEnterAcceleratedCompositingMode message is sent when the
        LayerTreeHost is created in the Web Process. This can happen while
        there's still a DidUpdateBackingStoreState pending, in which case
        we are receiving the new backingStoreStateID, but the current one
        hasn't been updated yet.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::willEnterAcceleratedCompositingMode):
        Fix the ASSERT to check the given ID is alt least the next one,
        and remove the early return since it's valid to not enter AC mode
        in the end after the WillEnter message.

2015-11-04  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r191499): 100% repro crash under _prepareForMoveToWindow:
        https://bugs.webkit.org/show_bug.cgi?id=150912
        <rdar://problem/23402116>

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _prepareForMoveToWindow:withCompletionHandler:]):

2015-11-04  Chris Dumez  <cdumez@apple.com>

        Regression(r192038): Crash in ~SandboxExtension()
        https://bugs.webkit.org/show_bug.cgi?id=150898

        Reviewed by Alex Christensen.

        We are seeing a couple of crashes under ~SandboxExtension() on the bots
        after ~SandboxExtension(). The reason is that the SandBoxExtension is
        still in use (useCount > 0) when destroyed. This happens due to a bug
        in setDefersLoading() that could cause the load to get started more
        than once and thus the SandboxExtension to be consumed more than once.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::setDefersLoading):
        (WebKit::NetworkResourceLoader::consumeSandboxExtensions):

2015-11-04  Chris Dumez  <cdumez@apple.com>

        [WK2] Extract networking code out of NetworkResourceLoader class to improve reusability
        https://bugs.webkit.org/show_bug.cgi?id=150898

        Reviewed by Alex Christensen.

        Extract networking code out of NetworkResourceLoader class to improve
        reusability (will be used for speculative revalidation) and simplify
        the NetworkResourceLoader.

        * CMakeLists.txt:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkLoad.cpp: Added.
        * NetworkProcess/NetworkLoad.h: Added.
        * NetworkProcess/NetworkLoadClient.h: Added.
        * NetworkProcess/NetworkLoadParameters.cpp: Added.
        * NetworkProcess/NetworkLoadParameters.h: Added.
        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/mac/NetworkLoadMac.mm: Added.
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::willCacheResponseAsync):
        * WebKit2.xcodeproj/project.pbxproj:

2015-11-04  Beth Dakin  <bdakin@apple.com>

        Link preview doesn't work on XHTML pages with Content-Type header as 
        `application/xhtml+xml`
        https://bugs.webkit.org/show_bug.cgi?id=150740
        -and corresponding-
        rdar://problem/23063585

        Reviewed by Darin Adler.

        My original fix for this bug was incorrect in the presence of non-HTML 
        elements that happen to have the same local name as HTML elements. Since it 
        seems silly to have all of this logic in the UI process to determine whether 
        to treat something as a link or an image, this patch fixes the bug by adding 
        isLink and isImage to InteractionInformationAtPosition in order to simplify 
        everything. The only remaining uses of clickableElementName just use it to 
        compare against isNull and isEmpty, so that can be a bool too.

        Add isLink and isImage, and turn clickableElementName into isClickableElement
        * Shared/InteractionInformationAtPosition.cpp:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/InteractionInformationAtPosition.h:

        Use the new isLink, isImage, and isClickableElement
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _actionForLongPress]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):

        Set everything correctly.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2015-11-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix crashing fast-clicking WK2 tests on iOS
        https://bugs.webkit.org/show_bug.cgi?id=150896
        <rdar://problem/23344491>

        Reviewed by Simon Fraser.

        In order for the modified fast-clicking tests to pass, we can't allow hit-testing to
        find the tap highlight view. See the Radar for more UIKit-specific descriptions.

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

2015-11-03  Anders Carlsson  <andersca@apple.com>

        PageLoadState::will/didChangeProcessIsResponsive should call observers
        https://bugs.webkit.org/show_bug.cgi?id=150870

        Reviewed by Dan Bernstein.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::willChangeProcessIsResponsive):
        (WebKit::PageLoadState::didChangeProcessIsResponsive):

2015-11-04  Ryan Haddad  <ryanhaddad@apple.com>

        Speculative build fix. Missed the checkin for the changelog with r192029.

        * UIProcess/API/Cocoa/WKWebView.mm:

2015-11-03  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to warm an initial web process
        https://bugs.webkit.org/show_bug.cgi?id=150886

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _warmInitialProcess]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

2015-11-03  Andy Estes  <aestes@apple.com>

        [Cocoa] Adopt WKWebViewAdditions
        https://bugs.webkit.org/show_bug.cgi?id=150885

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:

2015-11-03  Tim Horton  <timothy_horton@apple.com>

        Duplicate validateUserInterfaceItem in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=150873

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView changeFont:]):
        (-[WKWebView startSpeaking:]):
        (-[WKWebView validateUserInterfaceItem:]):
        (-[WKWebView goBack:]):

2015-11-03  Geoffrey Garen  <ggaren@apple.com>

        Provide a way to turn off const in WebKit2.

        Reviewed by Sam Weinig.

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

2015-11-03  Alex Christensen  <achristensen@webkit.org>

        Create a NetworkSession for each SessionID
        https://bugs.webkit.org/show_bug.cgi?id=150857

        Reviewed by Anders Carlsson.

        This patch renames SessionTracker::session to storageSession and makes a parallel
        structure for NetworkSessions.  NetworkSession and NetworkStorageSession should eventually
        become the same class in WebCore.  Because not everybody uses NetworkSessions yet,
        we keep them separate but created, destroyed, and managed together.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::abort):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
        (WebKit::NetworkDataTask::client):
        (WebKit::NetworkDataTask::clearClient):
        (WebKit::NetworkingDataTask::client): Deleted.
        (WebKit::NetworkingDataTask::clearClient): Deleted.
        (WebKit::NetworkSession::~NetworkSession): Deleted.
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::configurationForType):
        (WebKit::defaultNetworkSession):
        (WebKit::NetworkSession::defaultSession):
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::~NetworkSession):
        (WebKit::NetworkSession::createDataTaskWithRequest):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkDataTask::NetworkDataTask):
        (WebKit::NetworkDataTask::~NetworkDataTask):
        (WebKit::NetworkDataTask::cancel):
        (WebKit::NetworkDataTask::resume):
        (WebKit::NetworkDataTask::taskIdentifier):
        (WebKit::NetworkSession::create): Deleted.
        (WebKit::NetworkSession::singleton): Deleted.
        (WebKit::NetworkingDataTask::NetworkingDataTask): Deleted.
        (WebKit::NetworkingDataTask::~NetworkingDataTask): Deleted.
        (WebKit::NetworkingDataTask::suspend): Deleted.
        (WebKit::NetworkingDataTask::resume): Deleted.
        (WebKit::NetworkingDataTask::taskIdentifier): Deleted.
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::storageSession):
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * Shared/SessionTracker.cpp:
        (WebKit::staticStorageSessionMap):
        (WebKit::identifierBase):
        (WebKit::SessionTracker::storageSessionMap):
        (WebKit::SessionTracker::getIdentifierBase):
        (WebKit::SessionTracker::storageSession):
        (WebKit::staticSessionMap):
        (WebKit::SessionTracker::networkSession):
        (WebKit::SessionTracker::sessionID):
        (WebKit::SessionTracker::setSession):
        (WebKit::SessionTracker::destroySession):
        (WebKit::SessionTracker::sessionMap): Deleted.
        (WebKit::SessionTracker::session): Deleted.
        * Shared/SessionTracker.h:
        * 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):
        (WebKit::WebFrameNetworkingContext::storageSession):

2015-11-03  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] invisible webview should not paint the content
        https://bugs.webkit.org/show_bug.cgi?id=150662

        Reviewed by Darin Adler.

        Suspend or resume the painting instead of just initializing m_isPaintingSuspended 
        for invisible webview not to paint the content until visibility is changed.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::CoordinatedDrawingArea):

2015-11-03  Anders Carlsson  <andersca@apple.com>

        Simplify -[_WKRemoteObjectRegistry _invokeMethod:]
        https://bugs.webkit.org/show_bug.cgi?id=150844

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _invokeMethod:]):
        (-[_WKRemoteObjectRegistry _invokeMessageWithInterfaceIdentifier:encodedInvocation:]): Deleted.
        * Shared/API/Cocoa/_WKRemoteObjectRegistryInternal.h:

2015-11-02  Anders Carlsson  <andersca@apple.com>

        CTTE the responsiveness timer getter
        https://bugs.webkit.org/show_bug.cgi?id=150825

        Reviewed by Daniel Bates.

        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (-[WKObservablePageState _webProcessIsResponsive]):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _webProcessIsResponsive]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webProcessIsResponsive]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::tryClose):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        (WebKit::WebPageProxy::loadPlainTextString):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick):
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::dispatchViewStateChange):
        (WebKit::WebPageProxy::handleMouseEvent):
        (WebKit::WebPageProxy::sendWheelEvent):
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::handleGestureEvent):
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        (WebKit::WebPageProxy::handleTouchEvent):
        (WebKit::WebPageProxy::closePage):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
        (WebKit::WebPageProxy::runOpenPanel):
        (WebKit::WebPageProxy::showPopupMenu):
        (WebKit::WebPageProxy::internalShowContextMenu):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::stopResponsivenessTimer):
        (WebKit::WebPageProxy::runModal):
        (WebKit::WebPageProxy::updateBackingStoreDiscardableState):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::responsivenessTimer):

2015-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.11.1 release.

        * gtk/NEWS: Add release notes for 2.11.1.

2015-11-03  Alex Christensen  <achristensen@webkit.org>

        Use the same cookie storage as WebCore when using NETWORK_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=150833

        Reviewed by Antti Koivisto.

        This fixes 12 tests when using NETWORK_SESSION.

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

2015-11-03  Alex Christensen  <achristensen@webkit.org>

        Clean up NETWORK_SESSION code after r191848
        https://bugs.webkit.org/show_bug.cgi?id=150829

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveData):
        (WebKit::NetworkResourceLoader::didCompleteWithError):
        * NetworkProcess/NetworkSession.h:
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::createDataTaskWithRequest):
        (WebKit::NetworkSession::dataTaskForIdentifier):

2015-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r191924.

        * UIProcess/API/gtk/WebKitWebView.cpp:

2015-11-02  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build after r191922.

        * PlatformMac.cmake:

2015-11-02  Andy Estes  <aestes@apple.com>

        Try again to fix the iOS build.

        * Shared/mac/PDFKitImports.mm:

2015-11-02  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOS build

        * Shared/mac/PDFKitImports.h:

2015-11-02  Tim Horton  <timothy_horton@apple.com>

        Address a misssed review comment in r191922

        * WebProcess/Plugins/PDF/DeprecatedPDFPlugin.mm:
        (WebKit::PDFPlugin::nextMatchForString):

2015-11-02  Anders Carlsson  <andersca@apple.com>

        Add KVO-compliant _webProcessIsResponsive property to WKWebView and _WKObservablePageState
        https://bugs.webkit.org/show_bug.cgi?id=150818
        rdar://problem/22372131

        Reviewed by Tim Horton.

        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (-[WKObservablePageState _webProcessIsResponsive]):
        * UIProcess/API/Cocoa/PageLoadStateObserver.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _webProcessIsResponsive]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webProcessIsResponsive]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::willChangeWebProcessIsResponsive):
        (WebKit::NavigationState::didChangeWebProcessIsResponsive):
        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::willChangeProcessIsResponsive):
        (WebKit::PageLoadState::didChangeProcessIsResponsive):
        * UIProcess/PageLoadState.h:
        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::ResponsivenessTimer):
        (WebKit::ResponsivenessTimer::timerFired):
        (WebKit::ResponsivenessTimer::stop):
        * UIProcess/ResponsivenessTimer.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willChangeProcessIsResponsive):
        (WebKit::WebPageProxy::didChangeProcessIsResponsive):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::didBecomeUnresponsive):
        (WebKit::WebProcessProxy::didBecomeResponsive):
        (WebKit::WebProcessProxy::willChangeIsResponsive):
        (WebKit::WebProcessProxy::didChangeIsResponsive):
        * UIProcess/WebProcessProxy.h:

2015-11-02  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin should take advantage of threaded scrolling
        https://bugs.webkit.org/show_bug.cgi?id=150037

        Reviewed by Anders Carlsson.

        Duplicate PDFPlugin, creating PDFPlugin (the modern version), and
        DeprecatedPDFPlugin (containing the code that used to be in PDFPlugin
        prior to this patch).

        The new PDFPlugin differs from the old one in a few significant ways,
        and we need to keep both alive for the time being. Significant differences
        include:

        - PDFPlugin is no longer a ScrollableArea
        - PDFPlugin no longer hosts layers owned by PDFKit; instead, it draws
          into the page tiles, allowing WebCore's threaded scrolling to do its job
        - PDFPlugin now resizes itself to the size of the document
        - PDFPlugin doesn't handle zooming itself, it just delegates to the page
        - PDFLayerController has large and incompatible API changes
        - PDFPlugin now implements more of the HUD behavior, but it's still
          painted by PDFLayerController (into a view-relative PageOverlay)

        [ File list elided because it's long and useless. ]

2015-11-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Add tvOS and watchOS to SUPPORTED_PLATFORMS
        https://bugs.webkit.org/show_bug.cgi?id=150819

        Reviewed by Dan Bernstein.

        This tells Xcode to include these platforms in its Devices dropdown, making it possible to build in the IDE.

        * Configurations/Base.xcconfig:

2015-11-02  Anders Carlsson  <andersca@apple.com>

        Begin work on supporting reply blocks in _WKRemoteObjectRegistry
        https://bugs.webkit.org/show_bug.cgi?id=150739

        Reviewed by Tim Horton.

        * Platform/spi/Cocoa/BlockSPI.h:
        Add SPI header.

        * Shared/API/Cocoa/RemoteObjectInvocation.h:
        (WebKit::RemoteObjectInvocation::ReplyInfo::ReplyInfo):
        (WebKit::RemoteObjectInvocation::replyInfo):
        * Shared/API/Cocoa/RemoteObjectInvocation.mm:
        (WebKit::RemoteObjectInvocation::RemoteObjectInvocation):
        (WebKit::RemoteObjectInvocation::encode):
        (WebKit::RemoteObjectInvocation::decode):
        Add an optional ReplyInfo struct to RemoteObjectInvocation.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (generateReplyIdentifier):
        Helper function to generate a reply identifier.

        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]):
        Do some block parameter validation.

        * WebKit2.xcodeproj/project.pbxproj:

2015-11-02  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Another unreviewed sandbox update.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb: Change copyright.

2015-11-02  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Unreviewed sandbox update.

        Correcting copyright information.

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

2015-11-02  Tim Horton  <timothy_horton@apple.com>

        Get rid of WKWebView's inner WKView (WKView being inside WKWebView leads to weird API issues)
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView dealloc]):
        (-[WKWebView allowsLinkPreview]):
        (-[WKWebView setAllowsLinkPreview:]):
        (-[WKWebView acceptsFirstResponder]):
        (-[WKWebView becomeFirstResponder]):
        (-[WKWebView resignFirstResponder]):
        (-[WKWebView viewWillStartLiveResize]):
        (-[WKWebView viewDidEndLiveResize]):
        (-[WKWebView isFlipped]):
        (-[WKWebView intrinsicContentSize]):
        (-[WKWebView prepareContentInRect:]):
        (-[WKWebView setFrameSize:]):
        (-[WKWebView renewGState]):
        (-[WKWebView writeSelectionToPasteboard:types:]):
        (-[WKWebView centerSelectionInVisibleArea:]):
        (-[WKWebView validRequestorForSendType:returnType:]):
        (-[WKWebView readSelectionFromPasteboard:]):
        (-[WKWebView changeFont:]):
        (-[WKWebView validateUserInterfaceItem:]):
        (-[WKWebView startSpeaking:]):
        (-[WKWebView stopSpeaking:]):
        (-[WKWebView showGuessPanel:]):
        (-[WKWebView checkSpelling:]):
        (-[WKWebView changeSpelling:]):
        (-[WKWebView toggleContinuousSpellChecking:]):
        (-[WKWebView isGrammarCheckingEnabled]):
        (-[WKWebView setGrammarCheckingEnabled:]):
        (-[WKWebView toggleGrammarChecking:]):
        (-[WKWebView toggleAutomaticSpellingCorrection:]):
        (-[WKWebView orderFrontSubstitutionsPanel:]):
        (-[WKWebView toggleSmartInsertDelete:]):
        (-[WKWebView isAutomaticQuoteSubstitutionEnabled]):
        (-[WKWebView setAutomaticQuoteSubstitutionEnabled:]):
        (-[WKWebView toggleAutomaticQuoteSubstitution:]):
        (-[WKWebView isAutomaticDashSubstitutionEnabled]):
        (-[WKWebView setAutomaticDashSubstitutionEnabled:]):
        (-[WKWebView toggleAutomaticDashSubstitution:]):
        (-[WKWebView isAutomaticLinkDetectionEnabled]):
        (-[WKWebView setAutomaticLinkDetectionEnabled:]):
        (-[WKWebView toggleAutomaticLinkDetection:]):
        (-[WKWebView isAutomaticTextReplacementEnabled]):
        (-[WKWebView setAutomaticTextReplacementEnabled:]):
        (-[WKWebView toggleAutomaticTextReplacement:]):
        (-[WKWebView uppercaseWord:]):
        (-[WKWebView lowercaseWord:]):
        (-[WKWebView capitalizeWord:]):
        (-[WKWebView _wantsKeyDownForEvent:]):
        (-[WKWebView scrollWheel:]):
        (-[WKWebView swipeWithEvent:]):
        (-[WKWebView mouseMoved:]):
        (-[WKWebView mouseDown:]):
        (-[WKWebView mouseUp:]):
        (-[WKWebView mouseDragged:]):
        (-[WKWebView mouseEntered:]):
        (-[WKWebView mouseExited:]):
        (-[WKWebView otherMouseDown:]):
        (-[WKWebView otherMouseDragged:]):
        (-[WKWebView otherMouseUp:]):
        (-[WKWebView rightMouseDown:]):
        (-[WKWebView rightMouseDragged:]):
        (-[WKWebView rightMouseUp:]):
        (-[WKWebView pressureChangeWithEvent:]):
        (-[WKWebView acceptsFirstMouse:]):
        (-[WKWebView shouldDelayWindowOrderingForEvent:]):
        (-[WKWebView doCommandBySelector:]):
        (-[WKWebView insertText:]):
        (-[WKWebView insertText:replacementRange:]):
        (-[WKWebView inputContext]):
        (-[WKWebView performKeyEquivalent:]):
        (-[WKWebView keyUp:]):
        (-[WKWebView keyDown:]):
        (-[WKWebView flagsChanged:]):
        (-[WKWebView setMarkedText:selectedRange:replacementRange:]):
        (-[WKWebView unmarkText]):
        (-[WKWebView selectedRange]):
        (-[WKWebView hasMarkedText]):
        (-[WKWebView markedRange]):
        (-[WKWebView attributedSubstringForProposedRange:actualRange:]):
        (-[WKWebView characterIndexForPoint:]):
        (-[WKWebView firstRectForCharacterRange:actualRange:]):
        (-[WKWebView selectedRangeWithCompletionHandler:]):
        (-[WKWebView markedRangeWithCompletionHandler:]):
        (-[WKWebView hasMarkedTextWithCompletionHandler:]):
        (-[WKWebView attributedSubstringForProposedRange:completionHandler:]):
        (-[WKWebView firstRectForCharacterRange:completionHandler:]):
        (-[WKWebView characterIndexForPoint:completionHandler:]):
        (-[WKWebView validAttributesForMarkedText]):
        (-[WKWebView draggedImage:endedAt:operation:]):
        (-[WKWebView draggingEntered:]):
        (-[WKWebView draggingUpdated:]):
        (-[WKWebView draggingExited:]):
        (-[WKWebView prepareForDragOperation:]):
        (-[WKWebView performDragOperation:]):
        (-[WKWebView _hitTest:dragTypes:]):
        (-[WKWebView _windowResizeMouseLocationIsInVisibleScrollerThumb:]):
        (-[WKWebView viewWillMoveToWindow:]):
        (-[WKWebView viewDidMoveToWindow]):
        (-[WKWebView drawRect:]):
        (-[WKWebView isOpaque]):
        (-[WKWebView mouseDownCanMoveWindow]):
        (-[WKWebView viewDidHide]):
        (-[WKWebView viewDidUnhide]):
        (-[WKWebView viewDidChangeBackingProperties]):
        (-[WKWebView _activeSpaceDidChange:]):
        (-[WKWebView accessibilityFocusedUIElement]):
        (-[WKWebView accessibilityIsIgnored]):
        (-[WKWebView accessibilityHitTest:]):
        (-[WKWebView accessibilityAttributeValue:]):
        (-[WKWebView hitTest:]):
        (-[WKWebView conversationIdentifier]):
        (-[WKWebView quickLookWithEvent:]):
        (-[WKWebView addTrackingRect:owner:userData:assumeInside:]):
        (-[WKWebView _addTrackingRect:owner:userData:assumeInside:useTrackingNum:]):
        (-[WKWebView _addTrackingRects:owner:userDataList:assumeInsideList:trackingNums:count:]):
        (-[WKWebView removeTrackingRect:]):
        (-[WKWebView _removeTrackingRects:count:]):
        (-[WKWebView view:stringForToolTip:point:userData:]):
        (-[WKWebView pasteboardChangedOwner:]):
        (-[WKWebView pasteboard:provideDataForType:]):
        (-[WKWebView namesOfPromisedFilesDroppedAtDestination:]):
        (-[WKWebView wantsUpdateLayer]):
        (-[WKWebView updateLayer]):
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        (-[WKWebView allowsBackForwardNavigationGestures]):
        (-[WKWebView smartMagnifyWithEvent:]):
        (-[WKWebView setMagnification:centeredAtPoint:]):
        (-[WKWebView setMagnification:]):
        (-[WKWebView magnification]):
        (-[WKWebView setAllowsMagnification:]):
        (-[WKWebView allowsMagnification]):
        (-[WKWebView magnifyWithEvent:]):
        (-[WKWebView rotateWithEvent:]):
        (-[WKWebView _web_superInputContext]):
        (-[WKWebView _web_superQuickLookWithEvent:]):
        (-[WKWebView _web_superSwipeWithEvent:]):
        (-[WKWebView _web_superMagnifyWithEvent:]):
        (-[WKWebView _web_superSmartMagnifyWithEvent:]):
        (-[WKWebView _web_superRemoveTrackingRect:]):
        (-[WKWebView _web_superAccessibilityAttributeValue:]):
        (-[WKWebView _web_superDoCommandBySelector:]):
        (-[WKWebView _web_superPerformKeyEquivalent:]):
        (-[WKWebView _web_superKeyDown:]):
        (-[WKWebView _web_superHitTest:]):
        (-[WKWebView _web_immediateActionAnimationControllerForHitTestResultInternal:withType:userData:]):
        (-[WKWebView _web_prepareForImmediateActionAnimation]):
        (-[WKWebView _web_cancelImmediateActionAnimation]):
        (-[WKWebView _web_completeImmediateActionAnimation]):
        (-[WKWebView _web_didChangeContentSize:]):
        (-[WKWebView _web_dismissContentRelativeChildWindows]):
        (-[WKWebView _web_dismissContentRelativeChildWindowsWithAnimation:]):
        (-[WKWebView _web_gestureEventWasNotHandledByWebCore:]):
        (-[WKWebView _setEditable:]):
        (-[WKWebView _remoteObjectRegistry]):
        (-[WKWebView _layoutMode]):
        (-[WKWebView _setLayoutMode:]):
        (-[WKWebView _setViewScale:]):
        (-[WKWebView _drawsTransparentBackground]):
        (-[WKWebView _setDrawsTransparentBackground:]):
        (-[WKWebView _inspectorAttachmentView]):
        (-[WKWebView _setInspectorAttachmentView:]):
        (-[WKWebView _windowOcclusionDetectionEnabled]):
        (-[WKWebView _setWindowOcclusionDetectionEnabled:]):
        (-[WKWebView _setOverrideDeviceScaleFactor:]):
        (-[WKWebView _overrideDeviceScaleFactor]):
        (-[WKWebView _setTopContentInset:]):
        (-[WKWebView _topContentInset]):
        (-[WKWebView _pageExtendedBackgroundColor]):
        (-[WKWebView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):
        (-[WKWebView _setAutomaticallyAdjustsContentInsets:]):
        (-[WKWebView _automaticallyAdjustsContentInsets]):
        (-[WKWebView _setMinimumLayoutWidth:]):
        (-[WKWebView resizeSubviewsWithOldSize:]): Deleted.
        (-[WKWebView _ignoresNonWheelEvents]): Deleted.
        (-[WKWebView _setIgnoresNonWheelEvents:]): Deleted.
        (-[WKWebView _setIntrinsicContentSize:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _web_superInputContext]):
        (-[WKView _web_superQuickLookWithEvent:]):
        (-[WKView _web_superSwipeWithEvent:]):
        (-[WKView _web_superMagnifyWithEvent:]):
        (-[WKView _web_superSmartMagnifyWithEvent:]):
        (-[WKView _web_superRemoveTrackingRect:]):
        (-[WKView _web_superAccessibilityAttributeValue:]):
        (-[WKView _web_superDoCommandBySelector:]):
        (-[WKView _web_superPerformKeyEquivalent:]):
        (-[WKView _web_superKeyDown:]):
        (-[WKView _web_superHitTest:]):
        (-[WKView _web_immediateActionAnimationControllerForHitTestResultInternal:withType:userData:]):
        (-[WKView _web_prepareForImmediateActionAnimation]):
        (-[WKView _web_cancelImmediateActionAnimation]):
        (-[WKView _web_completeImmediateActionAnimation]):
        (-[WKView _web_didChangeContentSize:]):
        (-[WKView _web_dismissContentRelativeChildWindows]):
        (-[WKView _web_dismissContentRelativeChildWindowsWithAnimation:]):
        (-[WKView _web_gestureEventWasNotHandledByWebCore:]):
        (-[WKView _superInputContext]): Deleted.
        (-[WKView _superQuickLookWithEvent:]): Deleted.
        (-[WKView _superSwipeWithEvent:]): Deleted.
        (-[WKView _superMagnifyWithEvent:]): Deleted.
        (-[WKView _superSmartMagnifyWithEvent:]): Deleted.
        (-[WKView _superRemoveTrackingRect:]): Deleted.
        (-[WKView _superAccessibilityAttributeValue:]): Deleted.
        (-[WKView _superDoCommandBySelector:]): Deleted.
        (-[WKView _superPerformKeyEquivalent:]): Deleted.
        (-[WKView _superKeyDown:]): Deleted.
        (-[WKView _superHitTest:]): Deleted.
        (-[WKView _addFontPanelObserver]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::hitTest):
        (WebKit::WebViewImpl::updateSecureInputState):
        (WebKit::WebViewImpl::notifyInputContextAboutDiscardedComposition):
        (WebKit::WebViewImpl::executeSavedCommandBySelector):
        (WebKit::WebViewImpl::dismissContentRelativeChildWindowsWithAnimation):
        (WebKit::WebViewImpl::dismissContentRelativeChildWindowsWithAnimationFromViewOnly):
        (WebKit::WebViewImpl::quickLookWithEvent):
        (WebKit::WebViewImpl::prepareForImmediateActionAnimation):
        (WebKit::WebViewImpl::cancelImmediateActionAnimation):
        (WebKit::WebViewImpl::completeImmediateActionAnimation):
        (WebKit::WebViewImpl::didChangeContentSize):
        (WebKit::WebViewImpl::accessibilityAttributeValue):
        (WebKit::WebViewImpl::removeTrackingRect):
        (WebKit::WebViewImpl::swipeWithEvent):
        (WebKit::WebViewImpl::magnifyWithEvent):
        (WebKit::WebViewImpl::smartMagnifyWithEvent):
        (WebKit::WebViewImpl::gestureEventWasNotHandledByWebCore):
        (WebKit::WebViewImpl::doCommandBySelector):
        (WebKit::WebViewImpl::inputContext):
        (WebKit::WebViewImpl::performKeyEquivalent):
        (WebKit::WebViewImpl::keyDown):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage):
        (WebKit::PageClientImpl::intrinsicContentSizeDidChange): Deleted.
        (WebKit::PageClientImpl::immediateActionAnimationControllerForHitTestResult): Deleted.
        Plop.

2015-11-02  Anders Carlsson  <andersca@apple.com>

        Remove unused API client callback code
        https://bugs.webkit.org/show_bug.cgi?id=150813

        Reviewed by Tim Horton.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::interactionOccurredWhileProcessUnresponsive): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient): Deleted.
        * UIProcess/ResponsivenessTimer.cpp:
        (WebKit::ResponsivenessTimer::timerFired):
        * UIProcess/ResponsivenessTimer.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::interactionOccurredWhileProcessUnresponsive): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::interactionOccurredWhileUnresponsive): Deleted.
        * UIProcess/WebProcessProxy.h:

2015-10-31  Andy Estes  <aestes@apple.com>

        Replace iOS-only WebKitSystemInterface calls with SPI
        https://bugs.webkit.org/show_bug.cgi?id=150763

        Reviewed by Darin Adler.

        * Platform/ios/AccessibilityIOS.h: Added.
        * Platform/ios/AccessibilityIOS.mm: Added.
        (WebKit::newAccessibilityRemoteToken): Upstreamed the implementation of WKAXRemoteToken() from WebKitSystemInterface.
        * Shared/WebPreferencesDefinitions.h: Used Settings::defaultMinimumZoomFontSize() instead of WKGetMinimumZoomFontSize().
        * Shared/WebPreferencesStore.cpp:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldAllowPictureInPictureMediaPlayback): Used dyld_get_program_sdk_version() instead of iosExecutableWasLinkedOnOrAfterVersion().
        (-[WKWebView _takeViewSnapshot]): Used screenScaleFactor() instead of WKGetScreenScaleFactor().
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Used deviceClass() instead of WKGetDeviceClass().
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]): Used screenScaleFactor() instead of WKGetScaleFactorForScreen().
        (-[WKContentView _updateForScreen:]): Ditto.
        (storeAccessibilityRemoteConnectionInformation): Upstreamed the implementation of WKAXStoreRemoteConnectionInformation() from WebKitSystemInterface.
        (-[WKContentView _accessibilityRegisterUIProcessTokens]): Used newAccessibilityRemoteToken() and storeAccessibilityRemoteConnectionInformation() instead of WKAXRemoteToken() and WKAXStoreRemoteConnectionInformation().
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::screenSize): Used screenSize() instead of WKGetScreenSize().
        (WebKit::WebPageProxy::availableScreenSize): Used availableScreenSize() instead of WKGetAvailableScreenSize().
        (WebKit::WebPageProxy::textAutosizingWidth): Used screenSize() instead of WKGetScreenSize().
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformInitializeAccessibility): Used newAccessibilityRemoteToken() instead of WKAXRemoteToken().

2015-11-02  Commit Queue  <commit-queue@webkit.org>

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

        This change broke iOS builders (Requested by ryanhaddad on
        #webkit).

        Reverted changeset:

        "Replace iOS-only WebKitSystemInterface calls with SPI"
        https://bugs.webkit.org/show_bug.cgi?id=150763
        http://trac.webkit.org/changeset/191902

2015-10-31  Andy Estes  <aestes@apple.com>

        Replace iOS-only WebKitSystemInterface calls with SPI
        https://bugs.webkit.org/show_bug.cgi?id=150763

        Reviewed by Darin Adler.

        * Platform/ios/AccessibilityIOS.h: Added.
        * Platform/ios/AccessibilityIOS.mm: Added.
        (WebKit::newAccessibilityRemoteToken): Upstreamed the implementation of WKAXRemoteToken() from WebKitSystemInterface.
        * Shared/WebPreferencesDefinitions.h: Used Settings::defaultMinimumZoomFontSize() instead of WKGetMinimumZoomFontSize().
        * Shared/WebPreferencesStore.cpp:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldAllowPictureInPictureMediaPlayback): Used dyld_get_program_sdk_version() instead of iosExecutableWasLinkedOnOrAfterVersion().
        (-[WKWebView _takeViewSnapshot]): Used screenScaleFactor() instead of WKGetScreenScaleFactor().
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Used deviceClass() instead of WKGetDeviceClass().
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]): Used screenScaleFactor() instead of WKGetScaleFactorForScreen().
        (-[WKContentView _updateForScreen:]): Ditto.
        (storeAccessibilityRemoteConnectionInformation): Upstreamed the implementation of WKAXStoreRemoteConnectionInformation() from WebKitSystemInterface.
        (-[WKContentView _accessibilityRegisterUIProcessTokens]): Used newAccessibilityRemoteToken() and storeAccessibilityRemoteConnectionInformation() instead of WKAXRemoteToken() and WKAXStoreRemoteConnectionInformation().
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::screenSize): Used screenSize() instead of WKGetScreenSize().
        (WebKit::WebPageProxy::availableScreenSize): Used availableScreenSize() instead of WKGetAvailableScreenSize().
        (WebKit::WebPageProxy::textAutosizingWidth): Used screenSize() instead of WKGetScreenSize().
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformInitializeAccessibility): Used newAccessibilityRemoteToken() instead of WKAXRemoteToken().

2015-11-02  Yongjun Zhang  <yongjun_zhang@apple.com>

        Add objC delegate callback for webProcessDidBecomeResponsive and webProcessDidBecomeUnresponsive.
        https://bugs.webkit.org/show_bug.cgi?id=150778

        Add methods into WKNavigationDelegatePrivate to notify WebKit client when web process becomes unresponsive
        or responsive, which is reported by WebKit::ResponsivenessTimer.

        Reviewed by Darin Adler.

        * UIProcess/API/APINavigationClient.h: Add two new method processDidBecomeResponsive and processDidBecomeUnresponsive
            to NavigationClient; they are called when WebKit::ResponsivenessTimer update its client's state.
        (API::NavigationClient::processDidBecomeResponsive):
        (API::NavigationClient::processDidBecomeUnresponsive):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Add two new delegate method to WKNavigationDelegatePrivate:
            _webViewWebProcessDidBecomeResponsive: and _webViewWebProcessDidBecomeUnresponsive:
        * UIProcess/Cocoa/NavigationState.h: Add new overriding methods processDidBecomeResponsive and processDidBecomeUnresponsive.
            Also add a bool member for each method to indicate if the delegate has implement the related method.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate): Update the new bool members based on the delegate.
        (WebKit::NavigationState::NavigationClient::processDidBecomeResponsive): Send the delegate message to navigationDelegate
            if _webViewWebProcessDidBecomeResponsive: is implemented.
        (WebKit::NavigationState::NavigationClient::processDidBecomeUnresponsive): Ditto.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidBecomeUnresponsive): Call navigationClient's processDidBecomeUnresponsive if the page proxy
            has navigationClient.
        (WebKit::WebPageProxy::processDidBecomeResponsive):  Call navigationClient's processDidBecomeResponsive if the page proxy
            has navigationClient.

2015-11-02  Beth Dakin  <bdakin@apple.com>

        Tapping and holding a link should have a share option
        https://bugs.webkit.org/show_bug.cgi?id=150693

        Reviewed by Dan Bernstein.

        This is a follow-up to the original change. This change fixes non-ascii URLs. 
        They should maintain their non-ascii characters when they are shared.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionSheetAssistant:shareElementWithURL:rect:]):
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView actionSheetAssistant:shareElementWithURL:rect:]):

2015-11-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Rename JSDOMWrapper.impl to JSDOMWrapper.wrapped
        https://bugs.webkit.org/show_bug.cgi?id=150613

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::frameForContext): Renaming impl() to wrapped().
        (WebKit::WebFrame::counterValue): Ditto.

2015-11-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Remove support for GSocket main loop sources from GMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=150772

        Reviewed by Žan Doberšek.

        Add GSocketMonitor class to be used by Connection to monitor the
        availability of the socket file descriptor instead of using a
        GMainLoopSource.

        * Platform/IPC/Connection.h:
        * Platform/IPC/glib/GSocketMonitor.cpp: Added.
        (IPC::GSocketMonitor::~GSocketMonitor):
        (IPC::GSocketMonitor::socketSourceCallback):
        (IPC::GSocketMonitor::start):
        (IPC::GSocketMonitor::stop):
        * Platform/IPC/glib/GSocketMonitor.h: Added.
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::open):
        * PlatformGTK.cmake:

2015-11-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use RunLoop in WorkQueue implementation
        https://bugs.webkit.org/show_bug.cgi?id=150770

        Reviewed by Darin Adler.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::open): Get the main context from the WorkQueue Runloop.

2015-11-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Support Generator Syntax
        https://bugs.webkit.org/show_bug.cgi?id=150769

        Reviewed by Geoffrey Garen.

        Added ENABLE_ES6_GENERATORS flag.

        * Configurations/FeatureDefines.xcconfig:

2015-11-01  Brent Fulgham  <bfulgham@apple.com>

        Use convenience function in sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=150732
        <rdar://problem/23287894>

        Reviewed by Alexey Proskuryakov.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: Switch to
        the 'awd-log-directory' convenience function.

2015-11-01  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix inappropriate move semantics use in parseAndRemoveEnvironments function
        https://bugs.webkit.org/show_bug.cgi?id=150544

        Reviewed by Darin Adler.

        In parseAndRemoveEnvironments function, it declares its paramerter type as rvalue.
        But in ProcessLauncher::launchProcess(), the argument of
        parseAndRemoveEnvironments still be used after the call of the function.
        Currently the rvalue is not assigned to any other variable in parseAndRemoveEnvironments,
        so it doesn't lead to runtime error but use of move semantic
        is not appropriate semantically in this case.

        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::parseAndRemoveEnvironments):
        (WebKit::ProcessLauncher::launchProcess):

2015-11-01  Commit Queue  <commit-queue@webkit.org>

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

        The new test fails (Requested by ap on #webkit).

        Reverted changeset:

        "Begin work on supporting reply blocks in
        _WKRemoteObjectRegistry"
        https://bugs.webkit.org/show_bug.cgi?id=150739
        http://trac.webkit.org/changeset/191831

2015-11-01  Philip Chimento  <philip.chimento@gmail.com>

        [GTK] Fix combinations of PLATFORM(GTK) and OS(DARWIN)
        https://bugs.webkit.org/show_bug.cgi?id=144560

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        Change order of OS(DARWIN) and USE(UNIX_DOMAIN_SOCKETS) checks,
        so that we can use Unix domain sockets even on Darwin for the GTK
        platform.
        * Platform/IPC/Attachment.cpp: Add USE(UNIX_DOMAIN_SOCKETS) check
        to OS(DARWIN) check, in order to support GTK platform on OSX.
        * Platform/IPC/Attachment.h: Change order of OS(DARWIN) and
        USE(UNIX_DOMAIN_SOCKETS) checks throughout.
        (IPC::Attachment::size):
        (IPC::Attachment::releaseFileDescriptor):
        (IPC::Attachment::fileDescriptor):
        (IPC::Attachment::disposition):
        (IPC::Attachment::port): 
        * Platform/IPC/Connection.h: Ditto.
        (IPC::Connection::identifierIsNull):
        (IPC::Connection::Identifier::Identifier): 
        (IPC::Connection::xpcConnection): 
        * Platform/IPC/unix/ConnectionUnix.cpp: Only use SOCK_SEQPACKET
        if the platform is not GTK, because otherwise the PLATFORM(GTK)
        check below is never reached.
        * Platform/SharedMemory.h: Change order of OS(DARWIN) and
        USE(UNIX_DOMAIN_SOCKETS) checks.
        * PluginProcess/PluginProcess.cpp: Ditto.
        (WebKit::PluginProcess::createWebProcessConnection):
        * Shared/API/c/WKBase.h: Don't include WKBaseMac.h if building
        GTK.
        * UIProcess/API/C/WKNativeEvent.h: Don't use Apple API if
        building GTK.
        * UIProcess/Launcher/ProcessLauncher.cpp: Change to
        OS(DARWIN) && !PLATFORM(GTK), in the absence of a better platform
        macro such as USE(MACH).
        (WebKit::ProcessLauncher::didFinishLaunchingProcess):
        * UIProcess/Launcher/ProcessLauncher.h: Ditto.
        * UIProcess/Network/NetworkProcessProxy.cpp: Change order of
        OS(DARWIN) and PLATFORM(GTK) checks.
        (WebKit::NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch):
        (WebKit::NetworkProcessProxy::didCreateNetworkConnectionToWebProcess):
        * UIProcess/Plugins/PluginProcessProxy.cpp: Ditto.
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didCreateWebProcessConnection):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp: Ditto.
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        * WebProcess/WebPage/WebInspector.cpp: Ditto.
        (WebKit::WebInspector::createInspectorPage):
        * WebProcess/WebPage/WebInspectorUI.cpp: Ditto.
        (WebKit::WebInspectorUI::establishConnection):
        * WebProcess/WebProcess.cpp: Ditto.
        (WebKit::WebProcess::ensureNetworkProcessConnection):

2015-11-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use RunLoop::Timer in PluginInfoCache
        https://bugs.webkit.org/show_bug.cgi?id=150757

        Reviewed by Darin Adler.

        Use RunLoop::Timer instead of GMainLoopSource to save the cache
        contents in an idle. Also remove the mutex, since RunLoop::Timer
        is thread safe and saveToFile() is private and only called by the
        main thread loop. Also removed the code to save the file in the
        destructor since PluginInfoCache is a singleton and never
        destroyed. It's very unlikely that the program finished before the
        cache is saved, but even if that happens it would be harmless, the
        cache will be saved at some point the next time.

        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::PluginInfoCache):
        (WebKit::PluginInfoCache::updatePluginInfo):
        (WebKit::PluginInfoCache::~PluginInfoCache):
        (WebKit::PluginInfoCache::saveToFile):
        * UIProcess/Plugins/gtk/PluginInfoCache.h:

2015-11-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a RunLoop::Timer to schedule rendering frames in accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=150756

        Reviewed by Darin Adler.

        Use a RunLoop::Timer instead of a GMainLoopSource for the
        accelerated compositing render loop to improve the performance,
        since RunLoop::Timer uses a persistent source.
        All the logic to schedule rames has been moved to a helper
        internal class RenderFrameScheduler.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::RenderFrameScheduler::RenderFrameScheduler):
        (WebKit::LayerTreeHostGtk::RenderFrameScheduler::~RenderFrameScheduler):
        (WebKit::LayerTreeHostGtk::RenderFrameScheduler::start):
        (WebKit::LayerTreeHostGtk::RenderFrameScheduler::stop):
        (WebKit::shouldSkipNextFrameBecauseOfContinousImmediateFlushes):
        (WebKit::LayerTreeHostGtk::RenderFrameScheduler::nextFrame):
        (WebKit::LayerTreeHostGtk::RenderFrameScheduler::renderFrame):
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk):
        (WebKit::LayerTreeHostGtk::renderFrame):
        (WebKit::LayerTreeHostGtk::scheduleLayerFlush):
        (WebKit::LayerTreeHostGtk::cancelPendingLayerFlush):
        (WebKit::LayerTreeHostGtk::layerFlushTimerFired): Deleted.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2015-10-31  Andreas Kling  <akling@apple.com>

        Add a debug overlay with information about web process resource usage.
        <https://webkit.org/b/150599>

        Reviewed by Darin Adler.

        Add WK2 preferences SPI for showing/hiding the resource usage overlay.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetResourceUsageOverlayVisible):
        (WKPreferencesGetResourceUsageOverlayVisible):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _resourceUsageOverlayVisible]):
        (-[WKPreferences _setResourceUsageOverlayVisible:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-10-31  Alex Christensen  <achristensen@webkit.org>

        Share more code between NETWORK_SESSION and non-NETWORK_SESSION NetworkResourceLoaders
        https://bugs.webkit.org/show_bug.cgi?id=150742

        Reviewed by Darin Adler.

        r191457 added enough code to NetworkResourceLoader to load most resources successfully if there are no errors.
        It passed about 80% of LayoutTests/http and crashed sometimes.
        This passes about 95% of LayoutTests/http and does not crash on any of the LayoutTests/http.
        It should not change behavior of the non-NETWORK_SESSION code which is currently the default in trunk.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::sharedDidReceiveResponse):
        (WebKit::NetworkResourceLoader::sharedDidReceiveBuffer):
        (WebKit::NetworkResourceLoader::sharedDidFinishLoading):
        (WebKit::NetworkResourceLoader::sharedDidFail):
        (WebKit::NetworkResourceLoader::sharedWillSendRedirectedRequest):
        (WebKit::NetworkResourceLoader::willPerformHTTPRedirection):
        (WebKit::NetworkResourceLoader::didReceiveChallenge):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveData):
        (WebKit::NetworkResourceLoader::didCompleteWithError):
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFail):
        (WebKit::NetworkResourceLoader::willSendRequestAsync):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkSession.h:
        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):

2015-10-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Inner height behavior when the keyboard is shown should match on WKWebView and MobileSafari
        https://bugs.webkit.org/show_bug.cgi?id=150634
        <rdar://problem/23202254>

        Reviewed by Benjamin Poulain.

        Make WKWebView match behavior in Safari by not firing resize events and changing the inner height when showing
        or hiding the keyboard. Previously, the WKWebView would do both of the above because we use the scroll view's
        contentInset property when no unobscured insets are explicitly set for the WKWebView. To fix this, when updating
        the visible content rect of a WKWebView for computing the inner height, we readjust the computed bottom inset
        to not take the keyboard height into account. To know how much we need to readjust the inset by, we store the
        total amount by which the scroll view's bottom inset has been adjusted due to the keyboard.

        We perform this readjustment in _updateVisibleContentRects rather than in _computedContentInset since some users
        of _computedContentInset may still expect the bottom inset to account for the keyboard height. However, when
        updating visible content rects, we should not account for the keyboard height since we don't want the inner height
        to change when showing or hiding the keyboard.

        Lastly, while calling _adjustForAutomaticKeyboardInfo, we may end up calling _updateVisibleContentRects. This call
        is unnecessary since we call it again immediately after _adjustForAutomaticKeyboardInfo, and it also complicates
        the readjustment logic, so it makes sense to prevent the update from happening altogether while we are adjusting
        the scroll view's insets due to keyboard changes. Altogether, these changes mean that the computed inner height
        will no longer be adjusted for the keyboard height on WKWebViews, matching the behavior observed on mobile Safari.

        Test: LayoutTests/fast/events/ios/keyboard-should-not-trigger-resize.html

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):

2015-10-30  Anders Carlsson  <andersca@apple.com>

        Begin work on supporting reply blocks in _WKRemoteObjectRegistry
        https://bugs.webkit.org/show_bug.cgi?id=150739

        Reviewed by Tim Horton.

        * Platform/spi/Cocoa/BlockSPI.h:
        Add SPI header.

        * Shared/API/Cocoa/RemoteObjectInvocation.h:
        (WebKit::RemoteObjectInvocation::ReplyInfo::ReplyInfo):
        (WebKit::RemoteObjectInvocation::replyInfo):
        * Shared/API/Cocoa/RemoteObjectInvocation.mm:
        (WebKit::RemoteObjectInvocation::RemoteObjectInvocation):
        (WebKit::RemoteObjectInvocation::encode):
        (WebKit::RemoteObjectInvocation::decode):
        Add an optional ReplyInfo struct to RemoteObjectInvocation.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (generateReplyIdentifier):
        Helper function to generate a reply identifier.

        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]):
        Do some block parameter validation.

        * WebKit2.xcodeproj/project.pbxproj:

2015-10-30  Beth Dakin  <bdakin@apple.com>

        Link preview doesn't work on XHTML pages with Content-Type header as 
        ‘application/xhtml+xml’
        https://bugs.webkit.org/show_bug.cgi?id=150740
        -and corresponding-
        rdar://problem/23063585

        Reviewed by Tim Horton.

        For XHTML pages, the element names are lowercase. This patch uses 
        equalIgnoringCase to fix the bug.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _actionForLongPress]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):

2015-10-30  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processGroup:browsingContextGroup:relatedToView:]):
        (-[WKView prepareContentInRect:]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView pageRef]):
        (-[WKView _web_immediateActionAnimationControllerForHitTestResultInternal:withType:userData:]):
        (-[WKView dealloc]): Deleted.
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::page):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKWindowVisibilityObserver initWithView:impl:]):
        (-[WKWindowVisibilityObserver dealloc]):
        (-[WKWindowVisibilityObserver _activeSpaceDidChange:]):
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::~WebViewImpl):
        (WebKit::WebViewImpl::setDrawsBackground):
        (WebKit::WebViewImpl::drawsBackground):
        (WebKit::WebViewImpl::setDrawsTransparentBackground):
        (WebKit::WebViewImpl::drawsTransparentBackground):
        (WebKit::WebViewImpl::isOpaque):
        (WebKit::WebViewImpl::acceptsFirstMouse):
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::resignFirstResponder):
        (WebKit::WebViewImpl::viewWillStartLiveResize):
        (WebKit::WebViewImpl::viewDidEndLiveResize):
        (WebKit::WebViewImpl::updateWindowAndViewFrames):
        (WebKit::WebViewImpl::setFixedLayoutSize):
        (WebKit::WebViewImpl::fixedLayoutSize):
        (WebKit::WebViewImpl::isUsingUISideCompositing):
        (WebKit::WebViewImpl::setDrawingAreaSize):
        (WebKit::WebViewImpl::forceAsyncDrawingAreaSizeUpdate):
        (WebKit::WebViewImpl::waitForAsyncDrawingAreaSizeUpdate):
        (WebKit::WebViewImpl::updateLayer):
        (WebKit::WebViewImpl::drawRect):
        (WebKit::WebViewImpl::dispatchSetTopContentInset):
        (WebKit::WebViewImpl::prepareContentInRect):
        (WebKit::WebViewImpl::updateViewExposedRect):
        (WebKit::WebViewImpl::setMinimumSizeForAutoLayout):
        (WebKit::WebViewImpl::minimumSizeForAutoLayout):
        (WebKit::WebViewImpl::setShouldExpandToViewHeightForAutoLayout):
        (WebKit::WebViewImpl::shouldExpandToViewHeightForAutoLayout):
        (WebKit::WebViewImpl::setIntrinsicContentSize):
        (WebKit::WebViewImpl::setViewScale):
        (WebKit::WebViewImpl::viewScale):
        (WebKit::WebViewImpl::supportsArbitraryLayoutModes):
        (WebKit::WebViewImpl::setOverrideDeviceScaleFactor):
        (WebKit::WebViewImpl::windowDidOrderOffScreen):
        (WebKit::WebViewImpl::windowDidOrderOnScreen):
        (WebKit::WebViewImpl::windowDidBecomeKey):
        (WebKit::WebViewImpl::windowDidResignKey):
        (WebKit::WebViewImpl::windowDidMiniaturize):
        (WebKit::WebViewImpl::windowDidDeminiaturize):
        (WebKit::WebViewImpl::windowDidChangeBackingProperties):
        (WebKit::WebViewImpl::windowDidChangeScreen):
        (WebKit::WebViewImpl::windowDidChangeLayerHosting):
        (WebKit::WebViewImpl::windowDidChangeOcclusionState):
        (WebKit::WebViewImpl::shouldDelayWindowOrderingForEvent):
        (WebKit::WebViewImpl::windowResizeMouseLocationIsInVisibleScrollerThumb):
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        (WebKit::WebViewImpl::viewDidChangeBackingProperties):
        (WebKit::WebViewImpl::viewDidHide):
        (WebKit::WebViewImpl::viewDidUnhide):
        (WebKit::WebViewImpl::activeSpaceDidChange):
        (WebKit::WebViewImpl::postFakeMouseMovedEventForFlagsChangedEvent):
        (WebKit::WebViewImpl::setUnderlayColor):
        (WebKit::WebViewImpl::underlayColor):
        (WebKit::WebViewImpl::pageExtendedBackgroundColor):
        (WebKit::WebViewImpl::setOverlayScrollbarStyle):
        (WebKit::WebViewImpl::overlayScrollbarStyle):
        (WebKit::WebViewImpl::endDeferringViewInWindowChanges):
        (WebKit::WebViewImpl::endDeferringViewInWindowChangesSync):
        (WebKit::WebViewImpl::prepareForMoveToWindow):
        (WebKit::WebViewImpl::updateSecureInputState):
        (WebKit::WebViewImpl::setPluginComplexTextInputState):
        (WebKit::WebViewImpl::handlePluginComplexTextInputKeyDown):
        (WebKit::WebViewImpl::handleAcceptedAlternativeText):
        (WebKit::WebViewImpl::pressureChangeWithEvent):
        (WebKit::WebViewImpl::isEditable):
        (WebKit::WebViewImpl::executeEditCommandForSelector):
        (WebKit::WebViewImpl::writeSelectionToPasteboard):
        (WebKit::WebViewImpl::readSelectionFromPasteboard):
        (WebKit::WebViewImpl::validRequestorForSendAndReturnTypes):
        (WebKit::WebViewImpl::centerSelectionInVisibleArea):
        (WebKit::WebViewImpl::updateFontPanelIfNeeded):
        (WebKit::WebViewImpl::changeFontFromFontPanel):
        (WebKit::WebViewImpl::validateUserInterfaceItem):
        (WebKit::WebViewImpl::startSpeaking):
        (WebKit::WebViewImpl::showGuessPanel):
        (WebKit::WebViewImpl::checkSpelling):
        (WebKit::WebViewImpl::changeSpelling):
        (WebKit::WebViewImpl::toggleContinuousSpellChecking):
        (WebKit::WebViewImpl::setGrammarCheckingEnabled):
        (WebKit::WebViewImpl::toggleGrammarChecking):
        (WebKit::WebViewImpl::toggleAutomaticSpellingCorrection):
        (WebKit::WebViewImpl::toggleSmartInsertDelete):
        (WebKit::WebViewImpl::setAutomaticQuoteSubstitutionEnabled):
        (WebKit::WebViewImpl::toggleAutomaticQuoteSubstitution):
        (WebKit::WebViewImpl::setAutomaticDashSubstitutionEnabled):
        (WebKit::WebViewImpl::toggleAutomaticDashSubstitution):
        (WebKit::WebViewImpl::setAutomaticLinkDetectionEnabled):
        (WebKit::WebViewImpl::toggleAutomaticLinkDetection):
        (WebKit::WebViewImpl::setAutomaticTextReplacementEnabled):
        (WebKit::WebViewImpl::toggleAutomaticTextReplacement):
        (WebKit::WebViewImpl::uppercaseWord):
        (WebKit::WebViewImpl::lowercaseWord):
        (WebKit::WebViewImpl::capitalizeWord):
        (WebKit::WebViewImpl::preferencesDidChange):
        (WebKit::WebViewImpl::dismissContentRelativeChildWindowsFromViewOnly):
        (WebKit::WebViewImpl::quickLookWithEvent):
        (WebKit::WebViewImpl::immediateActionAnimationControllerForHitTestResult):
        (WebKit::WebViewImpl::didChangeContentSize):
        (WebKit::WebViewImpl::setIgnoresNonWheelEvents):
        (WebKit::WebViewImpl::updateRemoteAccessibilityRegistration):
        (WebKit::WebViewImpl::accessibilityRegisterUIProcessTokens):
        (WebKit::WebViewImpl::stringForToolTip):
        (WebKit::WebViewImpl::setInspectorAttachmentView):
        (WebKit::WebViewImpl::remoteObjectRegistry):
        (WebKit::WebViewImpl::browsingContextController):
        (WebKit::WebViewImpl::draggedImage):
        (WebKit::WebViewImpl::draggingEntered):
        (WebKit::WebViewImpl::draggingUpdated):
        (WebKit::WebViewImpl::draggingExited):
        (WebKit::WebViewImpl::performDragOperation):
        (WebKit::WebViewImpl::takeViewSnapshot):
        (WebKit::WebViewImpl::saveBackForwardSnapshotForCurrentItem):
        (WebKit::WebViewImpl::saveBackForwardSnapshotForItem):
        (WebKit::WebViewImpl::setAllowsBackForwardNavigationGestures):
        (WebKit::WebViewImpl::setMagnification):
        (WebKit::WebViewImpl::magnification):
        (WebKit::WebViewImpl::scrollWheel):
        (WebKit::WebViewImpl::swipeWithEvent):
        (WebKit::WebViewImpl::magnifyWithEvent):
        (WebKit::WebViewImpl::rotateWithEvent):
        (WebKit::WebViewImpl::doCommandBySelector):
        (WebKit::WebViewImpl::insertText):
        (WebKit::WebViewImpl::selectedRangeWithCompletionHandler):
        (WebKit::WebViewImpl::markedRangeWithCompletionHandler):
        (WebKit::WebViewImpl::hasMarkedTextWithCompletionHandler):
        (WebKit::WebViewImpl::attributedSubstringForProposedRange):
        (WebKit::WebViewImpl::firstRectForCharacterRange):
        (WebKit::WebViewImpl::characterIndexForPoint):
        (WebKit::WebViewImpl::inputContext):
        (WebKit::WebViewImpl::unmarkText):
        (WebKit::WebViewImpl::setMarkedText):
        (WebKit::WebViewImpl::performKeyEquivalent):
        (WebKit::WebViewImpl::keyUp):
        (WebKit::WebViewImpl::keyDown):
        (WebKit::WebViewImpl::flagsChanged):
        (WebKit::WebViewImpl::executeSavedKeypressCommands):
        (WebKit::WebViewImpl::selectedRange):
        (WebKit::WebViewImpl::hasMarkedText):
        (WebKit::WebViewImpl::markedRange):
        (WebKit::WebViewImpl::setContentPreparationRect): Deleted.
        (WebKit::WebViewImpl::immediateActionAnimationControllerForHitTestResultFromViewOnly): Deleted.
        (WebKit::WebViewImpl::destroyRemoteObjectRegistry): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::scrollPinningBehavior):
        (WebKit::WebPageProxy::overlayScrollbarStyle):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessPool.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::activeView):
        (WebKit::PageClientImpl::activeWindow):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::makeFirstResponder):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::colorSpace):
        (WebKit::PageClientImpl::processDidExit):
        (WebKit::PageClientImpl::pageClosed):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::preferencesDidChange):
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didChangeContentSize):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::registerInsertionUndoGrouping):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        (WebKit::PageClientImpl::setDragImage):
        (WebKit::PageClientImpl::setPromisedDataForImage):
        (WebKit::PageClientImpl::setPromisedDataForAttachment):
        (WebKit::PageClientImpl::updateSecureInputState):
        (WebKit::PageClientImpl::resetSecureInputState):
        (WebKit::PageClientImpl::notifyInputContextAboutDiscardedComposition):
        (WebKit::PageClientImpl::convertToDeviceSpace):
        (WebKit::PageClientImpl::convertToUserSpace):
        (WebKit::PageClientImpl::screenToRootView):
        (WebKit::PageClientImpl::rootViewToScreen):
        (WebKit::PageClientImpl::doneWithKeyEvent):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::PageClientImpl::createColorPicker):
        (WebKit::PageClientImpl::setTextIndicator):
        (WebKit::PageClientImpl::clearTextIndicator):
        (WebKit::PageClientImpl::setTextIndicatorAnimationProgress):
        (WebKit::PageClientImpl::accessibilityWebProcessTokenReceived):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode):
        (WebKit::PageClientImpl::setAcceleratedCompositingRootLayer):
        (WebKit::PageClientImpl::acceleratedCompositingRootLayer):
        (WebKit::PageClientImpl::takeViewSnapshot):
        (WebKit::PageClientImpl::selectionDidChange):
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore):
        (WebKit::PageClientImpl::gestureEventWasNotHandledByWebCore):
        (WebKit::PageClientImpl::pluginFocusOrWindowFocusChanged):
        (WebKit::PageClientImpl::setPluginComplexTextInputState):
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        (WebKit::PageClientImpl::dismissContentRelativeChildWindows):
        (WebKit::PageClientImpl::showCorrectionPanel):
        (WebKit::PageClientImpl::recordAutocorrectionResponse):
        (WebKit::PageClientImpl::recommendedScrollbarStyleDidChange):
        (WebKit::PageClientImpl::intrinsicContentSizeDidChange):
        (WebKit::PageClientImpl::executeSavedCommandBySelector):
        (WebKit::PageClientImpl::showDictationAlternativeUI):
        (WebKit::PageClientImpl::closeFullScreenManager):
        (WebKit::PageClientImpl::isFullScreen):
        (WebKit::PageClientImpl::enterFullScreen):
        (WebKit::PageClientImpl::exitFullScreen):
        (WebKit::PageClientImpl::beganEnterFullScreen):
        (WebKit::PageClientImpl::beganExitFullScreen):
        (WebKit::PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame):
        (WebKit::PageClientImpl::didFailLoadForMainFrame):
        (WebKit::PageClientImpl::didSameDocumentNavigationForMainFrame):
        (WebKit::PageClientImpl::removeNavigationGestureSnapshot):
        (WebKit::PageClientImpl::boundsOfLayerInLayerBackedWindowCoordinates):
        (WebKit::PageClientImpl::didPerformImmediateActionHitTest):
        (WebKit::PageClientImpl::immediateActionAnimationControllerForHitTestResult):
        (WebKit::PageClientImpl::showPlatformContextMenu):
        (WebKit::PageClientImpl::refView):
        (WebKit::PageClientImpl::derefView):
        (WebKit::PageClientImpl::startWindowDrag):
        (WebKit::PageClientImpl::platformWindow):
        (WebKit::PageClientImpl::inspectorAttachmentView):
        (WebKit::PageClientImpl::remoteObjectRegistry):
        * UIProcess/mac/WebColorPickerMac.h:
        * UIProcess/mac/WebColorPickerMac.mm:
        (WebKit::WebColorPickerMac::create):
        (WebKit::WebColorPickerMac::WebColorPickerMac):
        (-[WKColorPopoverMac initWithFrame:inView:]):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::WebContextMenuProxyMac):
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        (WebKit::WebPopupMenuProxyMac::create):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::WebPopupMenuProxyMac):
        Move ownership of WebPageProxy and PageClientImpl to WebViewImpl.

2015-10-30  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build after rr191810.

        * PlatformMac.cmake:
        Add RemoteObjectInvocation.mm.

2015-10-30  Anders Carlsson  <andersca@apple.com>

        Add a separate object that represents a remote object invocation
        https://bugs.webkit.org/show_bug.cgi?id=150639

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/RemoteObjectInvocation.h: Copied from Source/WebKit2/Shared/API/Cocoa/RemoteObjectRegistry.h.
        (WebKit::RemoteObjectInvocation::interfaceIdentifier):
        (WebKit::RemoteObjectInvocation::encodedInvocation):
        * Shared/API/Cocoa/RemoteObjectInvocation.mm: Copied from Source/WebKit2/Shared/API/Cocoa/RemoteObjectRegistry.mm.
        (WebKit::RemoteObjectInvocation::RemoteObjectInvocation):
        (WebKit::RemoteObjectInvocation::encode):
        (WebKit::RemoteObjectInvocation::decode):
        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * Shared/API/Cocoa/RemoteObjectRegistry.messages.in:
        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::sendInvocation):
        (WebKit::RemoteObjectRegistry::invokeMethod):
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]):
        (-[_WKRemoteObjectRegistry _invokeMethod:]):
        * Shared/API/Cocoa/_WKRemoteObjectRegistryInternal.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-10-30  Beth Dakin  <bdakin@apple.com>

        Another speculative build fix.

        * UIProcess/API/Cocoa/_WKElementAction.h:

2015-10-30  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:

2015-10-30  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseMoved:]):
        (-[WKView mouseDown:]):
        (-[WKView mouseUp:]):
        (-[WKView mouseDragged:]):
        (-[WKView mouseEntered:]):
        (-[WKView mouseExited:]):
        (-[WKView otherMouseDown:]):
        (-[WKView otherMouseDragged:]):
        (-[WKView otherMouseUp:]):
        (-[WKView rightMouseDown:]):
        (-[WKView rightMouseDragged:]):
        (-[WKView rightMouseUp:]):
        (-[WKView _updateViewExposedRect]): Deleted.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::mouseMoved):
        (WebKit::WebViewImpl::mouseDown):
        (WebKit::WebViewImpl::mouseUp):
        (WebKit::WebViewImpl::mouseDragged):
        Move mouse event handling.

2015-10-30  Beth Dakin  <bdakin@apple.com>

        Tapping and holding a link should have a share option
        https://bugs.webkit.org/show_bug.cgi?id=150693
        -and corresponding-
        rdar://problem/21319702

        Reviewed by Tim Horton.

        New _WKElementActionType called _WKElementActionTypeShare.
        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction _elementActionWithType:customTitle:assistant:]):

        _WKElementActionTypeShare is part of the default actions for links.
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):

        Handle the sharing part!
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionSheetAssistant:shareElementWithURL:rect:]):

        To support this in PDF, PDF need to create a _webSelectionAssistant.
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_initWithFrame:webView:]):
        (-[WKPDFView actionSheetAssistant:openElementAtLocation:]):
        (-[WKPDFView actionSheetAssistant:shareElementWithURL:rect:]):
        (-[WKPDFView actionSheetAssistant:shouldIncludeAppLinkActionsForElement:]):

2015-10-30  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _wantsKeyDownForEvent:]):
        (-[WKView acceptsFirstMouse:]):
        (-[WKView shouldDelayWindowOrderingForEvent:]):
        (-[WKView validAttributesForMarkedText]):
        (-[WKView _windowResizeMouseLocationIsInVisibleScrollerThumb:]):
        (-[WKView drawRect:]):
        (-[WKView isOpaque]):
        (-[WKView mouseDownCanMoveWindow]):
        (-[WKView viewDidHide]):
        (-[WKView viewDidUnhide]):
        (-[WKView _activeSpaceDidChange:]):
        (-[WKView hitTest:]):
        (-[WKView wantsUpdateLayer]):
        (-[WKView canChangeFrameLayout:]):
        (-[WKView printOperationWithPrintInfo:forFrame:]):
        (+[WKView hideWordDefinitionWindow]):
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::wantsUpdateLayer):
        (WebKit::WebViewImpl::mouseDownCanMoveWindow):
        (WebKit::WebViewImpl::wantsKeyDownForEvent):
        (WebKit::WebViewImpl::layerHostingView): Deleted.
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::isOpaque):
        (WebKit::WebViewImpl::acceptsFirstMouse):
        (WebKit::WebViewImpl::drawRect):
        (WebKit::WebViewImpl::canChangeFrameLayout):
        (WebKit::WebViewImpl::printOperationWithPrintInfo):
        (WebKit::WebViewImpl::shouldDelayWindowOrderingForEvent):
        (WebKit::WebViewImpl::windowResizeMouseLocationIsInVisibleScrollerThumb):
        (WebKit::WebViewImpl::viewDidHide):
        (WebKit::WebViewImpl::viewDidUnhide):
        (WebKit::WebViewImpl::activeSpaceDidChange):
        (WebKit::WebViewImpl::hitTest):
        (WebKit::WebViewImpl::hideWordDefinitionWindow):
        (WebKit::WebViewImpl::validAttributesForMarkedText):
        Printing and random bits.

2015-10-30  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r191691): Unexpected "Share" context menu when right clicking around inspector
        https://bugs.webkit.org/show_bug.cgi?id=150699
        rdar://problem/23324522

        Reviewed by Tim Horton.

        Don't create a share menu item if we have nothing to share.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::createShareMenuItem):

2015-10-30  Tim Horton  <timothy_horton@apple.com>

        Initialize some new WebViewImpl members

        * UIProcess/Cocoa/WebViewImpl.h:
        Oh well.

2015-10-30  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * UIProcess/API/mac/WKView.mm:

2015-10-30  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::collectKeyboardLayoutCommandsForEvent):

2015-10-30  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView doCommandBySelector:]):
        (-[WKView insertText:]):
        (-[WKView insertText:replacementRange:]):
        (-[WKView inputContext]):
        (-[WKView performKeyEquivalent:]):
        (-[WKView keyUp:]):
        (-[WKView keyDown:]):
        (-[WKView flagsChanged:]):
        (-[WKView setMarkedText:selectedRange:replacementRange:]):
        (-[WKView unmarkText]):
        (-[WKView selectedRange]):
        (-[WKView hasMarkedText]):
        (-[WKView markedRange]):
        (-[WKView attributedSubstringForProposedRange:actualRange:]):
        (-[WKView characterIndexForPoint:]):
        (-[WKView firstRectForCharacterRange:actualRange:]):
        (-[WKView selectedRangeWithCompletionHandler:]):
        (-[WKView markedRangeWithCompletionHandler:]):
        (-[WKView hasMarkedTextWithCompletionHandler:]):
        (-[WKView attributedSubstringForProposedRange:completionHandler:]):
        (-[WKView firstRectForCharacterRange:completionHandler:]):
        (-[WKView characterIndexForPoint:completionHandler:]):
        (-[WKView _superPerformKeyEquivalent:]):
        (-[WKView _superKeyDown:]):
        (extractUnderlines): Deleted.
        (-[WKView _collectKeyboardLayoutCommandsForEvent:to:]): Deleted.
        (-[WKView _interpretKeyEvent:completionHandler:]): Deleted.
        (-[WKView NO_RETURN_DUE_TO_ASSERT]): Deleted.
        (-[WKView _interpretKeyEvent:savingCommandsTo:]): Deleted.
        (-[WKView _executeSavedKeypressCommands]): Deleted.
        (-[WKView _doneWithKeyEvent:eventWasHandled:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::doneWithKeyEvent):
        (WebKit::extractUnderlines):
        (WebKit::WebViewImpl::collectKeyboardLayoutCommandsForEvent):
        (WebKit::WebViewImpl::interpretKeyEvent):
        (WebKit::WebViewImpl::doCommandBySelector):
        (WebKit::WebViewImpl::insertText):
        (WebKit::WebViewImpl::selectedRangeWithCompletionHandler):
        (WebKit::WebViewImpl::markedRangeWithCompletionHandler):
        (WebKit::WebViewImpl::hasMarkedTextWithCompletionHandler):
        (WebKit::WebViewImpl::attributedSubstringForProposedRange):
        (WebKit::WebViewImpl::firstRectForCharacterRange):
        (WebKit::WebViewImpl::characterIndexForPoint):
        (WebKit::WebViewImpl::inputContext):
        (WebKit::WebViewImpl::unmarkText):
        (WebKit::WebViewImpl::setMarkedText):
        (WebKit::WebViewImpl::selectedRange):
        (WebKit::WebViewImpl::hasMarkedText):
        (WebKit::WebViewImpl::markedRange):
        (WebKit::WebViewImpl::performKeyEquivalent):
        (WebKit::WebViewImpl::keyUp):
        (WebKit::WebViewImpl::keyDown):
        (WebKit::WebViewImpl::flagsChanged):
        (WebKit::WebViewImpl::executeSavedKeypressCommands):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::doneWithKeyEvent):
        Move NSTextInputClient implementation.

2015-10-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move the socket polling off the WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=150593

        Reviewed by Anders Carlsson.

        Create the socket poll source in Connection::open and attach it to
        the connection work queue context.

        * Platform/IPC/Connection.h:
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::open):

2015-10-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use RunLoop::Timer instead of GMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=150592

        Reviewed by Žan Doberšek.

        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::DownloadClient):
        (WebKit::DownloadClient::didReceiveData):
        (WebKit::DownloadClient::handleResponseLater):
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::DragGesture::begin):
        (WebKit::GestureController::DragGesture::update):
        (WebKit::GestureController::DragGesture::end):
        (WebKit::GestureController::DragGesture::longPressFired):
        (WebKit::GestureController::DragGesture::DragGesture):
        (WebKit::GestureController::ZoomGesture::scaleChanged):
        (WebKit::GestureController::ZoomGesture::ZoomGesture):
        * UIProcess/gtk/GestureController.h:

2015-10-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a persistent main loop source in RunLoop glib implementation
        https://bugs.webkit.org/show_bug.cgi?id=150590

        Reviewed by Žan Doberšek.

        Use RunLoop::dispatch() instead of
        GMainLoopSource::scheduleAndDeleteOnDestroy in a couple of simple
        cases.

        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::runTaskInQueue):
        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::dragLeave):

2015-10-29  Alex Christensen  <achristensen@webkit.org>

        Make WebCore a framework in Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=150702

        Reviewed by Geoffrey Garen.

        * PlatformMac.cmake:

2015-10-29  Alex Christensen  <achristensen@webkit.org>

        EFL build fix after r191749

        * CMakeLists.txt:
        Only Mac should include the Cocoa directory.

2015-10-29  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * Platform/spi/mac/AppKitSPI.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView validRequestorForSendType:returnType:]):
        (-[WKView readSelectionFromPasteboard:]):
        (-[WKView changeFont:]):
        (-[WKView startSpeaking:]):
        (-[WKView stopSpeaking:]):
        (-[WKView showGuessPanel:]):
        (-[WKView checkSpelling:]):
        (-[WKView changeSpelling:]):
        (-[WKView toggleContinuousSpellChecking:]):
        (-[WKView isGrammarCheckingEnabled]):
        (-[WKView setGrammarCheckingEnabled:]):
        (-[WKView toggleGrammarChecking:]):
        (-[WKView toggleAutomaticSpellingCorrection:]):
        (-[WKView orderFrontSubstitutionsPanel:]):
        (-[WKView toggleSmartInsertDelete:]):
        (-[WKView isAutomaticQuoteSubstitutionEnabled]):
        (-[WKView setAutomaticQuoteSubstitutionEnabled:]):
        (-[WKView toggleAutomaticQuoteSubstitution:]):
        (-[WKView isAutomaticDashSubstitutionEnabled]):
        (-[WKView setAutomaticDashSubstitutionEnabled:]):
        (-[WKView toggleAutomaticDashSubstitution:]):
        (-[WKView isAutomaticLinkDetectionEnabled]):
        (-[WKView setAutomaticLinkDetectionEnabled:]):
        (-[WKView toggleAutomaticLinkDetection:]):
        (-[WKView isAutomaticTextReplacementEnabled]):
        (-[WKView setAutomaticTextReplacementEnabled:]):
        (-[WKView toggleAutomaticTextReplacement:]):
        (-[WKView uppercaseWord:]):
        (-[WKView lowercaseWord:]):
        (-[WKView capitalizeWord:]):
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::readSelectionFromPasteboard):
        (WebKit::WebViewImpl::validRequestorForSendAndReturnTypes):
        (WebKit::WebViewImpl::changeFontFromFontPanel):
        (WebKit::WebViewImpl::startSpeaking):
        (WebKit::WebViewImpl::stopSpeaking):
        (WebKit::WebViewImpl::showGuessPanel):
        (WebKit::WebViewImpl::checkSpelling):
        (WebKit::WebViewImpl::changeSpelling):
        (WebKit::WebViewImpl::toggleContinuousSpellChecking):
        (WebKit::WebViewImpl::isGrammarCheckingEnabled):
        (WebKit::WebViewImpl::setGrammarCheckingEnabled):
        (WebKit::WebViewImpl::toggleGrammarChecking):
        (WebKit::WebViewImpl::toggleAutomaticSpellingCorrection):
        (WebKit::WebViewImpl::orderFrontSubstitutionsPanel):
        (WebKit::WebViewImpl::toggleSmartInsertDelete):
        (WebKit::WebViewImpl::isAutomaticQuoteSubstitutionEnabled):
        (WebKit::WebViewImpl::setAutomaticQuoteSubstitutionEnabled):
        (WebKit::WebViewImpl::toggleAutomaticQuoteSubstitution):
        (WebKit::WebViewImpl::isAutomaticDashSubstitutionEnabled):
        (WebKit::WebViewImpl::setAutomaticDashSubstitutionEnabled):
        (WebKit::WebViewImpl::toggleAutomaticDashSubstitution):
        (WebKit::WebViewImpl::isAutomaticLinkDetectionEnabled):
        (WebKit::WebViewImpl::setAutomaticLinkDetectionEnabled):
        (WebKit::WebViewImpl::toggleAutomaticLinkDetection):
        (WebKit::WebViewImpl::setAutomaticTextReplacementEnabled):
        (WebKit::WebViewImpl::toggleAutomaticTextReplacement):
        (WebKit::WebViewImpl::uppercaseWord):
        (WebKit::WebViewImpl::lowercaseWord):
        (WebKit::WebViewImpl::capitalizeWord):
        Move spellcheck and related bits.

2015-10-29  Eric Carlson  <eric.carlson@apple.com>

        Revert inadvertent changes
        https://bugs.webkit.org/show_bug.cgi?id=150694

        Reviewed by Tim Horton.

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

2015-10-29  Alex Christensen  <achristensen@webkit.org>

        CMake build fix.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        I mistakenly added some mac-specific files to the shared CMakeLists.txt.  This puts them in the right place.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewWillStartLiveResize):
        (WebKit::WebPageProxy::viewDidLeaveWindow):
        (WebKit::WebPageProxy::didEndColorPicker):
        Add preprocessor enable checks.

2015-10-29  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView browsingContextController]):
        (-[WKView validateUserInterfaceItem:]):
        (-[WKView saveBackForwardSnapshotForCurrentItem]):
        (-[WKView saveBackForwardSnapshotForItem:]):
        (-[WKView updateLayer]):
        (-[WKView minimumSizeForAutoLayout]):
        (-[WKView setMinimumSizeForAutoLayout:]):
        (-[WKView shouldExpandToViewHeightForAutoLayout]):
        (-[WKView setShouldExpandToViewHeightForAutoLayout:]):
        (-[WKView underlayColor]):
        (-[WKView setUnderlayColor:]):
        (-[WKView _setOverlayScrollbarStyle:]):
        (-[WKView _overlayScrollbarStyle]):
        (-[WKView _pageExtendedBackgroundColor]):
        (-[WKView forceAsyncDrawingAreaSizeUpdate:]):
        (-[WKView waitForAsyncDrawingAreaSizeUpdate]):
        (-[WKView isUsingUISideCompositing]):
        (createSelectorExceptionMap): Deleted.
        (commandNameForSelector): Deleted.
        (menuItem): Deleted.
        (toolbarItem): Deleted.
        (-[WKView _setUserInterfaceItemState:enabled:state:]): Deleted.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::createDrawingAreaProxy):
        (WebKit::WebViewImpl::isUsingUISideCompositing):
        (WebKit::WebViewImpl::forceAsyncDrawingAreaSizeUpdate):
        (WebKit::WebViewImpl::waitForAsyncDrawingAreaSizeUpdate):
        (WebKit::WebViewImpl::updateLayer):
        (WebKit::WebViewImpl::setMinimumSizeForAutoLayout):
        (WebKit::WebViewImpl::minimumSizeForAutoLayout):
        (WebKit::WebViewImpl::setShouldExpandToViewHeightForAutoLayout):
        (WebKit::WebViewImpl::shouldExpandToViewHeightForAutoLayout):
        (WebKit::WebViewImpl::setUnderlayColor):
        (WebKit::WebViewImpl::underlayColor):
        (WebKit::WebViewImpl::pageExtendedBackgroundColor):
        (WebKit::WebViewImpl::setOverlayScrollbarStyle):
        (WebKit::WebViewImpl::overlayScrollbarStyle):
        (WebKit::createSelectorExceptionMap):
        (WebKit::commandNameForSelector):
        (WebKit::WebViewImpl::executeSavedCommandBySelector):
        (WebKit::WebViewImpl::executeEditCommandForSelector):
        (WebKit::menuItem):
        (WebKit::toolbarItem):
        (WebKit::WebViewImpl::validateUserInterfaceItem):
        (WebKit::WebViewImpl::setUserInterfaceItemState):
        (WebKit::WebViewImpl::browsingContextController):
        (WebKit::WebViewImpl::saveBackForwardSnapshotForCurrentItem):
        (WebKit::WebViewImpl::saveBackForwardSnapshotForItem):
        (WebKit::WebViewImpl::executeEditCommand): Deleted.
        Move UI validation and a grab-bag of other things.

2015-10-29  Alex Christensen  <achristensen@webkit.org>

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

        Reviewed by Filip Pizlo.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2015-10-29  Commit Queue  <commit-queue@webkit.org>

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

        Caused a lot of timeouts in layout tests (Requested by KaL on
        #webkit).

        Reverted changeset:

        "[GTK] Use a persistent main loop source in RunLoop glib
        implementation"
        https://bugs.webkit.org/show_bug.cgi?id=150590
        http://trac.webkit.org/changeset/191728

2015-10-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use a persistent main loop source in RunLoop glib implementation
        https://bugs.webkit.org/show_bug.cgi?id=150590

        Reviewed by Žan Doberšek.

        Use RunLoop::dispatch() instead of
        GMainLoopSource::scheduleAndDeleteOnDestroy in a couple of simple
        cases.

        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::runTaskInQueue):
        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::dragLeave):

2015-10-28  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::startWindowDrag):
        (WebKit::PageClientImpl::platformWindow):

2015-10-28  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageGetObjectRegistry):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _remoteObjectRegistry]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView _inspectorAttachmentView]):
        (-[WKView _setInspectorAttachmentView:]):
        (-[WKView windowOcclusionDetectionEnabled]):
        (-[WKView setWindowOcclusionDetectionEnabled:]):
        (-[WKView _setTotalHeightOfBanners:]):
        (-[WKView _totalHeightOfBanners]):
        (-[WKView initWithFrame:processPool:configuration:webView:]): Deleted.
        (-[WKView _remoteObjectRegistry]): Deleted.
        (-[WKView _startWindowDrag]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::setWindowOcclusionDetectionEnabled):
        (WebKit::WebViewImpl::windowOcclusionDetectionEnabled):
        (WebKit::WebViewImpl::setTotalHeightOfBanners):
        (WebKit::WebViewImpl::totalHeightOfBanners):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::window):
        (WebKit::WebViewImpl::setInspectorAttachmentView):
        (WebKit::WebViewImpl::inspectorAttachmentView):
        (WebKit::WebViewImpl::remoteObjectRegistry):
        (WebKit::WebViewImpl::destroyRemoteObjectRegistry):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::createColorPicker):
        (WebKit::PageClientImpl::startWindowDrag):
        (WebKit::PageClientImpl::platformWindow):
        (WebKit::PageClientImpl::inspectorAttachmentView):
        (WebKit::PageClientImpl::remoteObjectRegistry):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformCanAttach):
        (WebKit::WebInspectorProxy::platformBringToFront):
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformStartWindowDrag):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::startWindowDrag):
        (WebKit::WebPageProxy::platformWindow):
        (WebKit::WebPageProxy::inspectorAttachmentView):
        (WebKit::WebPageProxy::remoteObjectRegistry):
        (WebKit::WebPageProxy::wkView): Deleted.
        Get rid of the wkView() getters on PageClientImpl and WebPageProxy, because
        those can't be a thing in the brave new world. Instead, plumb the four
        callers through PageClient to WebViewImpl.

        Also, move a few more things (banners, window occlusion).

2015-10-27  Anders Carlsson  <andersca@apple.com>

        Stub out more of the context menu SPI
        https://bugs.webkit.org/show_bug.cgi?id=150606

        Reviewed by Dan Bernstein.

        Add a delegate method that will allow the client to modify the menu. Also,
        add an empty _WKContextMenuElementInfo class and its _WKElementInfo superclass.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h: Added.
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.mm: Added.
        * UIProcess/API/Cocoa/_WKElementInfo.h: Added.
        * UIProcess/API/Cocoa/_WKElementInfo.mm: Added.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu):
        (WebKit::UIDelegate::UIClient::createNewPage):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * WebKit2.xcodeproj/project.pbxproj:

2015-10-28  Anders Carlsson  <andersca@apple.com>

        Stop using ContextMenuItem::shareMenuItem in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=150578

        Reviewed by Tim Horton.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::createShareMenuItem):
        (WebKit::WebContextMenuProxyMac::createContextMenuItem):
        (WebKit::WebContextMenuProxyMac::shareMenuItem): Deleted.

2015-10-28  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _superDoCommandBySelector:]):
        (-[WKView _createDrawingAreaProxy]): Deleted.
        (-[WKView _processDidExit]): Deleted.
        (-[WKView _pageClosed]): Deleted.
        (-[WKView _didRelaunchProcess]): Deleted.
        (-[WKView _convertToDeviceSpace:]): Deleted.
        (-[WKView _convertToUserSpace:]): Deleted.
        (-[WKView _executeSavedCommandBySelector:]): Deleted.
        (-[WKResponderChainSink initWithResponderChain:]): Deleted.
        (-[WKResponderChainSink detach]): Deleted.
        (-[WKResponderChainSink didReceiveUnhandledCommand]): Deleted.
        (-[WKResponderChainSink noResponderFor:]): Deleted.
        (-[WKResponderChainSink doCommandBySelector:]): Deleted.
        (-[WKResponderChainSink tryToPerform:with:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKResponderChainSink initWithResponderChain:]):
        (-[WKResponderChainSink detach]):
        (-[WKResponderChainSink didReceiveUnhandledCommand]):
        (-[WKResponderChainSink noResponderFor:]):
        (-[WKResponderChainSink doCommandBySelector:]):
        (-[WKResponderChainSink tryToPerform:with:]):
        (WebKit::WebViewImpl::createDrawingAreaProxy):
        (WebKit::WebViewImpl::processDidExit):
        (WebKit::WebViewImpl::pageClosed):
        (WebKit::WebViewImpl::didRelaunchProcess):
        (WebKit::WebViewImpl::executeSavedCommandBySelector):
        (WebKit::WebViewImpl::resetGestureController): Deleted.
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::processDidExit):
        (WebKit::PageClientImpl::pageClosed):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::convertToDeviceSpace):
        (WebKit::PageClientImpl::convertToUserSpace):
        (WebKit::PageClientImpl::executeSavedCommandBySelector):
        Move most of the rest of WKViewInternal.h's methods to WebViewImpl.

2015-10-28  Alex Christensen  <achristensen@webkit.org>

        Compile and link with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=150632

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:

2015-10-27  Anders Carlsson  <andersca@apple.com>

        Stub out more of the context menu SPI
        https://bugs.webkit.org/show_bug.cgi?id=150606

        Reviewed by Dan Bernstein.

        Add a delegate method that will allow the client to modify the menu. Also,
        add an empty _WKContextMenuElementInfo class and its _WKElementInfo superclass.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.h: Added.
        * UIProcess/API/Cocoa/_WKContextMenuElementInfo.mm: Added.
        * UIProcess/API/Cocoa/_WKElementInfo.h: Added.
        * UIProcess/API/Cocoa/_WKElementInfo.mm: Added.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu):
        (WebKit::UIDelegate::UIClient::createNewPage):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * WebKit2.xcodeproj/project.pbxproj:

2015-10-28  Chris Dumez  <cdumez@apple.com>

        Use RunLoopTimer in DataURLDecoder to avoid issues related to runloops
        https://bugs.webkit.org/show_bug.cgi?id=150609
        <rdar://problem/22702894>

        Reviewed by Antti Koivisto.

        Move addSchedulePair() call to Page::platformInitialize() so that
        RunLoopTimer can be used by any Page, even those that don't have
        a WebPage wrapper.

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

2015-10-27  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::dragImageForView):

2015-10-27  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/Cocoa/WebViewImpl.mm:

2015-10-27  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseDown:]):
        (-[WKView mouseUp:]):
        (-[WKView acceptsFirstMouse:]):
        (-[WKView shouldDelayWindowOrderingForEvent:]):
        (-[WKView pasteboardChangedOwner:]):
        (-[WKView pasteboard:provideDataForType:]):
        (-[WKView namesOfPromisedFilesDroppedAtDestination:]):
        (-[WKView _startWindowDrag]):
        (-[WKView _setMouseDownEvent:]): Deleted.
        (-[WKView _colorSpace]): Deleted.
        (-[WKView _dragImageForView:withImage:at:linkDrag:]): Deleted.
        (matchesExtensionOrEquivalent): Deleted.
        (-[WKView _setFileAndURLTypes:withExtension:withTitle:withURL:withVisibleURL:forPasteboard:]): Deleted.
        (-[WKView _setPromisedDataForImage:withFileName:withExtension:withTitle:withURL:withVisibleURL:withArchive:forPasteboard:]): Deleted.
        (-[WKView _setPromisedDataForAttachment:withExtension:withTitle:withURL:withVisibleURL:forPasteboard:]): Deleted.
        (fileExists): Deleted.
        (pathWithUniqueFilenameForPath): Deleted.
        (-[WKView spellCheckerDocumentTag]): Deleted.
        (-[WKView handleAcceptedAlternativeText:]): Deleted.
        (-[WKView initWithFrame:processPool:configuration:webView:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::handleAcceptedAlternativeText):
        (WebKit::WebViewImpl::spellCheckerDocumentTag):
        (WebKit::WebViewImpl::startWindowDrag):
        (WebKit::WebViewImpl::dragImageForView):
        (WebKit::matchesExtensionOrEquivalent):
        (WebKit::WebViewImpl::setFileAndURLTypes):
        (WebKit::WebViewImpl::setPromisedDataForImage):
        (WebKit::WebViewImpl::setPromisedDataForAttachment):
        (WebKit::WebViewImpl::pasteboardChangedOwner):
        (WebKit::WebViewImpl::provideDataForPasteboard):
        (WebKit::fileExists):
        (WebKit::pathWithUniqueFilenameForPath):
        (WebKit::WebViewImpl::namesOfPromisedFilesDroppedAtDestination):
        (WebKit::WebViewImpl::setLastMouseDownEvent):
        * UIProcess/mac/CorrectionPanel.h:
        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::show):
        (WebKit::CorrectionPanel::recordAutocorrectionResponse):
        (WebKit::CorrectionPanel::handleAcceptedReplacement):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::colorSpace):
        (WebKit::PageClientImpl::setDragImage):
        (WebKit::PageClientImpl::setPromisedDataForImage):
        (WebKit::PageClientImpl::setPromisedDataForAttachment):
        (WebKit::PageClientImpl::showCorrectionPanel):
        (WebKit::PageClientImpl::recordAutocorrectionResponse):
        (WebKit::PageClientImpl::showDictationAlternativeUI):
        Move some pasteboard and spellcheck code.

2015-10-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement viewport-width-based fast-click heuristic
        https://bugs.webkit.org/show_bug.cgi?id=150604
        <rdar://problem/23267308>

        Reviewed by Simon Fraser.

        Implement a new fast-click heuristic that applies to viewports with width = device-width. The basic rules are
        as follows: when a page has viewport width = device-width and is at initial zoom scale, we disable double-tapping
        in favor of fast-clicking. However, if the viewport scale is not the initial scale, we allow double tapping. For
        fast-clicking to remain useful after the user pinch-zooms, we change our double-tap to zoom out behavior to zoom
        to the initial scale rather than the minimum scale. For unscalable viewports, we default to fast-clicking behavior,
        and for all other viewports not at device-width, we double-tap to zoom and scroll as normal.

        This patch removes some logic previously used for our scroll- and zoom-based fast-clicking heuristic, and adds
        information about the viewport width and initial scale to RemoteLayerTreeTransactions. This information is then
        used by the UI process to determine whether double tapping should be disabled or enabled.

        The fast-click heuristic can be turned off through user default preferences, and a tap highlight for debugging
        fast-clicking can also be enabled through a user default preference. A red highlight indicates that a single-
        tap was slow, whereas a green highlight indicates a fast single-tap.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::initialScaleFactor):
        (WebKit::RemoteLayerTreeTransaction::setInitialScaleFactor):
        (WebKit::RemoteLayerTreeTransaction::viewportMetaTagWidth):
        (WebKit::RemoteLayerTreeTransaction::setViewportMetaTagWidth):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _processDidExit]):
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _zoomToInitialScaleWithOrigin:animated:]):
        (-[WKWebView _allowsDoubleTapGestures]):
        (-[WKWebView _setViewportMetaTagWidth:]): Deleted.
        (-[WKWebView _contentZoomScale]): Deleted.
        (-[WKWebView _viewportMetaTagWidth]): Deleted.
        (-[WKWebView _viewportIsUserScalable]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::disableDoubleTapGesturesDuringTapIfNecessary):
        (WebKit::PageClientImpl::didChangeViewportMetaTagWidth): Deleted.
        (WebKit::PageClientImpl::disableDoubleTapGesturesUntilTapIsFinishedIfNecessary): Deleted.
        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _zoomToInitialScaleWithOrigin:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _showTapHighlight]):
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]):
        (-[WKContentView _mayDisableDoubleTapGesturesDuringSingleTap]):
        (-[WKContentView _disableDoubleTapGesturesDuringTapIfNecessary:]):
        (-[WKContentView _finishInteraction]):
        (-[WKContentView _endPotentialTapAndEnableDoubleTapGesturesIfNecessary]):
        (-[WKContentView _tapHighlightColorForFastClick:]):
        (-[WKContentView _setDoubleTapGesturesEnabled:]):
        (-[WKContentView _fastClickZoomThreshold]): Deleted.
        (-[WKContentView _allowDoubleTapToZoomForCurrentZoomScale:andTargetZoomScale:]): Deleted.
        (-[WKContentView _disableDoubleTapGesturesUntilTapIsFinishedIfNecessary:allowsDoubleTapZoom:targetRect:isReplaced:minimumScale:maximumScale:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::disableDoubleTapGesturesDuringTapIfNecessary):
        (WebKit::WebPageProxy::viewportMetaTagWidthDidChange): Deleted.
        (WebKit::WebPageProxy::disableDoubleTapGesturesUntilTapIsFinishedIfNecessary): Deleted.
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::potentialTapAtPosition):
        (WebKit::WebPage::viewportPropertiesDidChange): Deleted.

2015-10-27  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _superAccessibilityAttributeValue:]):
        (-[WKView accessibilityFocusedUIElement]):
        (-[WKView accessibilityIsIgnored]):
        (-[WKView accessibilityHitTest:]):
        (-[WKView accessibilityAttributeValue:]):
        (-[WKView _processDidExit]):
        (-[WKView _pageClosed]):
        (-[WKView _updateRemoteAccessibilityRegistration:]): Deleted.
        (-[WKView enableAccessibilityIfNecessary]): Deleted.
        (-[WKView _toolTipChangedFrom:to:]): Deleted.
        (-[WKView _setAccessibilityWebProcessToken:]): Deleted.
        (-[WKView _hasFullScreenWindowController]): Deleted.
        (-[WKView _fullScreenWindowController]): Deleted.
        (-[WKView _closeFullScreenWindowController]): Deleted.
        (-[WKView _setSuppressVisibilityUpdates:]): Deleted.
        (-[WKView _suppressVisibilityUpdates]): Deleted.
        (-[WKView _primaryTrackingArea]): Deleted.
        (-[WKView _setPrimaryTrackingArea:]): Deleted.
        (-[WKView initWithFrame:processPool:configuration:webView:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::accessibilityIsIgnored):
        (WebKit::WebViewImpl::primaryTrackingArea):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::trackingAreaOptions):
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::setAccessibilityWebProcessToken):
        (WebKit::WebViewImpl::updateRemoteAccessibilityRegistration):
        (WebKit::WebViewImpl::accessibilityFocusedUIElement):
        (WebKit::WebViewImpl::accessibilityHitTest):
        (WebKit::WebViewImpl::enableAccessibilityIfNecessary):
        (WebKit::WebViewImpl::accessibilityAttributeValue):
        (WebKit::WebViewImpl::setPrimaryTrackingArea):
        (WebKit::WebViewImpl::toolTipChanged):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::accessibilityWebProcessTokenReceived):
        (WebKit::PageClientImpl::recommendedScrollbarStyleDidChange):
        (WebKit::PageClientImpl::closeFullScreenManager):
        (WebKit::PageClientImpl::isFullScreen):
        (WebKit::PageClientImpl::enterFullScreen):
        (WebKit::PageClientImpl::exitFullScreen):
        (WebKit::PageClientImpl::beganEnterFullScreen):
        (WebKit::PageClientImpl::beganExitFullScreen):
        Move accessibility code, and fold in some internal-only methods.

2015-10-27  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView scrollWheel:]):
        (-[WKView swipeWithEvent:]):
        (-[WKView _superSwipeWithEvent:]):
        (-[WKView _superMagnifyWithEvent:]):
        (-[WKView _superSmartMagnifyWithEvent:]):
        (-[WKView _processDidExit]):
        (-[WKView setAllowsBackForwardNavigationGestures:]):
        (-[WKView allowsBackForwardNavigationGestures]):
        (-[WKView setAllowsMagnification:]):
        (-[WKView allowsMagnification]):
        (-[WKView magnifyWithEvent:]):
        (-[WKView rotateWithEvent:]):
        (-[WKView _gestureEventWasNotHandledByWebCore:]):
        (-[WKView smartMagnifyWithEvent:]):
        (-[WKView setMagnification:centeredAtPoint:]):
        (-[WKView setMagnification:]):
        (-[WKView magnification]):
        (-[WKView _setCustomSwipeViews:]):
        (-[WKView _setCustomSwipeViewsTopContentInset:]):
        (-[WKView _tryToSwipeWithEvent:ignoringPinnedState:]):
        (-[WKView _setDidMoveSwipeSnapshotCallback:]):
        (-[WKView _ensureGestureController]): Deleted.
        (takeWindowSnapshot): Deleted.
        (-[WKView _takeViewSnapshot]): Deleted.
        (-[WKView _wheelEventWasNotHandledByWebCore:]): Deleted.
        (-[WKView _didFirstVisuallyNonEmptyLayoutForMainFrame]): Deleted.
        (-[WKView _didFinishLoadForMainFrame]): Deleted.
        (-[WKView _didFailLoadForMainFrame]): Deleted.
        (-[WKView _didSameDocumentNavigationForMainFrame:]): Deleted.
        (-[WKView _removeNavigationGestureSnapshot]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::gestureController):
        (WebKit::WebViewImpl::allowsBackForwardNavigationGestures):
        (WebKit::WebViewImpl::allowsMagnification):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::takeWindowSnapshot):
        (WebKit::WebViewImpl::takeViewSnapshot):
        (WebKit::WebViewImpl::ensureGestureController):
        (WebKit::WebViewImpl::resetGestureController):
        (WebKit::WebViewImpl::setAllowsBackForwardNavigationGestures):
        (WebKit::WebViewImpl::setAllowsMagnification):
        (WebKit::WebViewImpl::setMagnification):
        (WebKit::WebViewImpl::magnification):
        (WebKit::WebViewImpl::setCustomSwipeViews):
        (WebKit::WebViewImpl::setCustomSwipeViewsTopContentInset):
        (WebKit::WebViewImpl::tryToSwipeWithEvent):
        (WebKit::WebViewImpl::setDidMoveSwipeSnapshotCallback):
        (WebKit::WebViewImpl::scrollWheel):
        (WebKit::WebViewImpl::swipeWithEvent):
        (WebKit::WebViewImpl::magnifyWithEvent):
        (WebKit::WebViewImpl::smartMagnifyWithEvent):
        (WebKit::WebViewImpl::rotateWithEvent):
        (WebKit::WebViewImpl::gestureEventWasNotHandledByWebCore):
        (WebKit::WebViewImpl::gestureEventWasNotHandledByWebCoreFromViewOnly):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::takeViewSnapshot):
        (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore):
        (WebKit::PageClientImpl::didFirstVisuallyNonEmptyLayoutForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadForMainFrame):
        (WebKit::PageClientImpl::didFailLoadForMainFrame):
        (WebKit::PageClientImpl::didSameDocumentNavigationForMainFrame):
        (WebKit::PageClientImpl::removeNavigationGestureSnapshot):
        Move swipe, zoom, rotate, and snapshotting code.

2015-10-27  Zhuo Li  <zachli@apple.com>

        Add WebKit API to clear data type Search Field Recent Searches.
        https://bugs.webkit.org/show_bug.cgi?id=150019.

        Reviewed by Anders Carlsson.

        * Shared/WebsiteData/WebsiteDataTypes.h: Add data type Search Field Recent Searches.
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString): Ditto.
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes): Ditto.
        (WebKit::toWKWebsiteDataTypes): Ditto.
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h: Ditto.
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData): Handle the case when data type is Search
        Field Recent Searches.
        * UIProcess/WebsiteData/WebsiteDataStore.h: Add a private function for removing
        recent searches based on time.
        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
        (WebKit::WebsiteDataStoreCocoa::platformRemoveRecentSearches): Call the removing
        recent searches logic in WebCore.
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebsiteDataStore::platformRemoveRecentSearches): Not implemented.
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebsiteDataStore::platformRemoveRecentSearches): Not implemented.

2015-10-26  Brady Eidson  <beidson@apple.com>

        Make IDBKeyData from a struct to a class.
        https://bugs.webkit.org/show_bug.cgi?id=150576

        Reviewed by Alex Christensen.

        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in:
        * DatabaseProcess/IndexedDB/IDBSerialization.h:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::putRecordInBackingStore):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h:
        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp:
        (WebKit::buildIndexStatement):
        (WebKit::buildObjectStoreStatement):
        (WebKit::SQLiteIDBCursor::establishStatement):
        (WebKit::SQLiteIDBCursor::createSQLiteStatement):
        (WebKit::SQLiteIDBCursor::resetAndRebindStatement):
        (WebKit::SQLiteIDBCursor::iterate):
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        (WebKit::WebIDBServerConnection::didPutRecord):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in:

2015-10-26  Philip Chimento  <philip.chimento@gmail.com>

        [GTK] [Stable] InstallMissingMediaPluginsPermissionRequest not defined when building without GStreamer
        https://bugs.webkit.org/show_bug.cgi?id=148607

        Unreviewed, build fix.

        * UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h:
        Add a stub for the InstallMissingMediaPluginsPermissionRequest class
        for the case when video is disabled or not using GStreamer. It's OK
        that this class does nothing, because the associated C API contains
        an assert_not_reached if video is disabled. We just need to define
        the symbol so that the function signature will compile.

2015-10-26  Anders Carlsson  <andersca@apple.com>

        Pipe custom context menu handling through to the UIDelegate object
        https://bugs.webkit.org/show_bug.cgi?id=150572

        Reviewed by Tim Horton.

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::menuFromProposedMenu):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setUIDelegate:]):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::createContextMenuClient):
        (WebKit::UIDelegate::ContextMenuClient::ContextMenuClient):
        (WebKit::UIDelegate::ContextMenuClient::~ContextMenuClient):
        (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2015-10-26  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseDown:]):
        (-[WKView mouseDragged:]):
        (-[WKView draggedImage:endedAt:operation:]):
        (-[WKView draggingEntered:]):
        (-[WKView draggingUpdated:]):
        (-[WKView draggingExited:]):
        (-[WKView prepareForDragOperation:]):
        (-[WKView performDragOperation:]):
        (-[WKView _hitTest:dragTypes:]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView applicationFlags:]): Deleted.
        (maybeCreateSandboxExtensionFromPasteboard): Deleted.
        (createSandboxExtensionsForFileUpload): Deleted.
        (-[WKView _registerDraggedTypes]): Deleted.
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::ignoresMouseDraggedEvents):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setIgnoresMouseDraggedEvents):
        (WebKit::WebViewImpl::draggedImage):
        (WebKit::applicationFlagsForDrag):
        (WebKit::WebViewImpl::draggingEntered):
        (WebKit::WebViewImpl::draggingUpdated):
        (WebKit::WebViewImpl::draggingExited):
        (WebKit::WebViewImpl::prepareForDragOperation):
        (WebKit::maybeCreateSandboxExtensionFromPasteboard):
        (WebKit::createSandboxExtensionsForFileUpload):
        (WebKit::WebViewImpl::performDragOperation):
        (WebKit::WebViewImpl::hitTestForDragTypes):
        (WebKit::WebViewImpl::registerDraggedTypes):
        Move some drag-related things to WebViewImpl.

2015-10-26  Anders Carlsson  <andersca@apple.com>

        Pipe custom context menu handling through to the UIDelegate object
        https://bugs.webkit.org/show_bug.cgi?id=150572

        Reviewed by Tim Horton.

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::menuFromProposedMenu):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setUIDelegate:]):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::createContextMenuClient):
        (WebKit::UIDelegate::ContextMenuClient::ContextMenuClient):
        (WebKit::UIDelegate::ContextMenuClient::~ContextMenuClient):
        (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2015-10-26  Alex Christensen  <achristensen@webkit.org>

        Build fix when using NETWORK_SESSION after r191457.

        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
        (-[NetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        Use resourceResponse.

2015-10-26  Anders Carlsson  <andersca@apple.com>

        Remove more dead context menu code
        https://bugs.webkit.org/show_bug.cgi?id=150569

        Reviewed by Tim Horton.

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::contextMenuDismissed): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient): Deleted.

2015-10-26  Anders Carlsson  <andersca@apple.com>

        Remove dead context menu code
        https://bugs.webkit.org/show_bug.cgi?id=150567

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::getCustomMenuFromDefaultItems): Deleted.
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:

2015-10-26  Tim Horton  <timothy_horton@apple.com>

        Don't expose the whitelist/blacklist in _WKUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=150566

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/_WKUserStyleSheet.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
        (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:]):
        (toWTFStrings): Deleted.
        (-[_WKUserStyleSheet initWithSource:whitelistedURLPatterns:blacklistedURLPatterns:forMainFrameOnly:]): Deleted.
        (-[_WKUserStyleSheet whitelistedURLPatterns]): Deleted.
        (-[_WKUserStyleSheet blacklistedURLPatterns]): Deleted.

2015-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r191543.

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

2015-10-24  Tim Horton  <timothy_horton@apple.com>

        Add a way to add user style sheets to WKUserContentController
        https://bugs.webkit.org/show_bug.cgi?id=150531
        <rdar://problem/23191691>

        Reviewed by Darin Adler.

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Boilerplate for a new API::UserStyleSheet.

        * UIProcess/API/APIUserStyleSheet.cpp: Added.
        (API::generateIdentifier):
        (API::UserStyleSheet::generateUniqueURL):
        * UIProcess/API/APIUserStyleSheet.h: Added.
        Added API::UserStyleSheet, borrowing URL generation code from API::UserScript.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _addUserStyleSheet:]):
        (-[WKUserContentController _removeAllUserStyleSheets]):
        Forward add and remove-all to WebUserContentControllerProxy.

        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/API/Cocoa/_WKUserStyleSheet.h: Added.
        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm: Added.
        (toWTFStrings):
        (-[_WKUserStyleSheet initWithSource:whitelistedURLPatterns:blacklistedURLPatterns:forMainFrameOnly:]):
        (-[_WKUserStyleSheet source]):
        (-[_WKUserStyleSheet isForMainFrameOnly]):
        (-[_WKUserStyleSheet copyWithZone:]):
        (-[_WKUserStyleSheet _apiObject]):
        * UIProcess/API/Cocoa/_WKUserStyleSheetInternal.h: Added.
        (API::wrapper):
        * WebKit2.xcodeproj/project.pbxproj:
        Add the new modern API object (as SPI for now).

2015-10-24  Tim Horton  <timothy_horton@apple.com>

        Expose more information about the exception in WKErrorJavaScriptExceptionOccurred errors
        https://bugs.webkit.org/show_bug.cgi?id=150525

        Reviewed by Darin Adler.

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ExceptionDetails>::encode):
        (IPC::ArgumentCoder<ExceptionDetails>::decode):
        * Shared/WebCoreArgumentCoders.h:
        Learn how to en/decode ExceptionDetails.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::scriptValueCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):
        Plumb ExceptionDetails back through runJavaScriptInMainFrame, across the
        process boundary.

        * UIProcess/API/Cocoa/WKError.mm:
        (localizedDescriptionForErrorCode):
        * UIProcess/API/Cocoa/WKErrorInternal.h:
        * UIProcess/API/Cocoa/WKErrorPrivate.h:
        Expose localizedDescriptionForErrorCode so that WKWebView can do special
        things with its error.
        Add new private userInfo keys for exception info.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView evaluateJavaScript:completionHandler:]):
        Fill in the NSError userInfo with the exception info.

2015-10-24  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Fix a wrong enum variable use
        https://bugs.webkit.org/show_bug.cgi?id=150522

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::requestPopupMenu):
        Use kWKPopupItemTextDirectionLTR instead of EWK_TEXT_DIRECTION_LEFT_TO_RIGHT.

2015-10-24  Dan Bernstein  <mitz@apple.com>

        [Cocoa] _WKFormInputSession should provide access to the focused element info
        https://bugs.webkit.org/show_bug.cgi?id=150512

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKFormInputSession.h: Added focusedElementInfo property to the
          protocol.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession initWithContentView:focusedElementInfo:userObject:]): Added the
          focusedElementInfo argument, used to initialize a new ivar.
        (-[WKFormInputSession focusedElementInfo]): Added this getter for the new
          _WKFormInputSession property.
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
          Create the WKFocusedElementInfo unconditionally and pass it to the new WKFormInputSession
          initializer.

2015-10-24  Dan Bernstein  <mitz@apple.com>

        [iOS] Allow clients to specify a custom input view to be used for a form input session
        https://bugs.webkit.org/show_bug.cgi?id=150395

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKFormInputSession.h: Added customInputView property to the protocol.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession customInputView]): Added this getter.
        (-[WKFormInputSession setCustomInputView:]): Added this setter, which reloads the input
          views when the custom input view changes.
        (-[WKContentView inputView]): Changed to return the custom view from the input session if
          there is one.

2015-10-23  Alex Christensen  <achristensen@webkit.org>

        Fix CMake compile error and add correct null check
        https://bugs.webkit.org/show_bug.cgi?id=150520

        Reviewed by Simon Fraser.

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

2015-10-23  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=150517

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp: Removed.
        * WebProcess/Cookies/curl/WebCookieManagerCurl.cpp: Removed.

2015-10-23  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        * UIProcess/Cocoa/WebViewImpl.h:
        Whoops.

2015-10-23  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView hitTest:]):
        (-[WKView _processDidExit]):
        (-[WKView _setThumbnailView:]):
        (-[WKView _thumbnailView]):
        (-[WKFlippedView isFlipped]): Deleted.
        (-[WKView dealloc]): Deleted.
        (-[WKView _setAcceleratedCompositingModeRootLayer:]): Deleted.
        (-[WKView _acceleratedCompositingModeRootLayer]): Deleted.
        (-[WKView _updateThumbnailViewLayer]): Deleted.
        (-[WKView _reparentLayerTreeInThumbnailView]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::acceleratedCompositingRootLayer):
        (WebKit::WebViewImpl::layerHostingView):
        (WebKit::WebViewImpl::thumbnailView):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (-[WKFlippedView isFlipped]):
        (WebKit::WebViewImpl::~WebViewImpl):
        (WebKit::WebViewImpl::setAcceleratedCompositingRootLayer):
        (WebKit::WebViewImpl::setThumbnailView):
        (WebKit::WebViewImpl::reparentLayerTreeInThumbnailView):
        (WebKit::WebViewImpl::updateThumbnailViewLayer):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode):
        (WebKit::PageClientImpl::setAcceleratedCompositingRootLayer):
        (WebKit::PageClientImpl::acceleratedCompositingRootLayer):
        Move accelerated compositing and thumbnail view code.

2015-10-23  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _superRemoveTrackingRect:]):
        (-[WKView addTrackingRect:owner:userData:assumeInside:]):
        (-[WKView _addTrackingRect:owner:userData:assumeInside:useTrackingNum:]):
        (-[WKView _addTrackingRects:owner:userDataList:assumeInsideList:trackingNums:count:]):
        (-[WKView removeTrackingRect:]):
        (-[WKView _removeTrackingRects:count:]):
        (-[WKView view:stringForToolTip:point:userData:]):
        (-[WKView _toolTipChangedFrom:to:]):
        (-[WKView _setAcceleratedCompositingModeRootLayer:]): Deleted.
        (-[WKView _acceleratedCompositingModeRootLayer]): Deleted.
        (takeWindowSnapshot): Deleted.
        * UIProcess/Cocoa/WebViewImpl.h:
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::addTrackingRect):
        (WebKit::WebViewImpl::addTrackingRectWithTrackingNum):
        (WebKit::WebViewImpl::addTrackingRectsWithTrackingNums):
        (WebKit::WebViewImpl::removeTrackingRect):
        (WebKit::WebViewImpl::removeTrackingRects):
        (WebKit::WebViewImpl::sendToolTipMouseExited):
        (WebKit::WebViewImpl::sendToolTipMouseEntered):
        (WebKit::WebViewImpl::stringForToolTip):
        (WebKit::WebViewImpl::toolTipChanged):
        Move tooltip code.

2015-10-23  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _interpretKeyEvent:completionHandler:]):
        (-[WKView inputContext]):
        (-[WKView performKeyEquivalent:]):
        (-[WKView keyDown:]):
        (-[WKView _doneWithKeyEvent:eventWasHandled:]):
        (-[WKView _setPluginComplexTextInputState:]): Deleted.
        (-[WKView _disableComplexTextInputIfNecessary]): Deleted.
        (-[WKView _handlePluginComplexTextInputKeyDown:]): Deleted.
        (-[WKView _tryHandlePluginComplexTextInputKeyDown:]): Deleted.
        (-[WKView _tryPostProcessPluginComplexTextInputKeyDown:]): Deleted.
        (-[WKView _pluginFocusOrWindowFocusChanged:pluginComplexTextInputIdentifier:]): Deleted.
        (-[WKView _setPluginComplexTextInputState:pluginComplexTextInputIdentifier:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::pluginComplexTextInputState):
        (WebKit::WebViewImpl::pluginComplexTextInputIdentifier):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (WebKit::WebViewImpl::setPluginComplexTextInputState):
        (WebKit::WebViewImpl::setPluginComplexTextInputStateAndIdentifier):
        (WebKit::WebViewImpl::disableComplexTextInputIfNecessary):
        (WebKit::WebViewImpl::handlePluginComplexTextInputKeyDown):
        (WebKit::WebViewImpl::tryHandlePluginComplexTextInputKeyDown):
        (WebKit::WebViewImpl::pluginFocusOrWindowFocusChanged):
        (WebKit::WebViewImpl::tryPostProcessPluginComplexTextInputKeyDown):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::pluginFocusOrWindowFocusChanged):
        (WebKit::PageClientImpl::setPluginComplexTextInputState):
        Move a few more methods.

2015-10-23  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Fix UserMediaPermissionRequestProxy::invalidate
        https://bugs.webkit.org/show_bug.cgi?id=150503
        <rdar://problem/23235386>

        Reviewed by Dean Jackson.

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy): m_manager is a pointer.
        (WebKit::UserMediaPermissionRequestProxy::allow): Return early if m_manager is null, clear it after
          calling the manager.
        (WebKit::UserMediaPermissionRequestProxy::deny): Ditto.
        (WebKit::UserMediaPermissionRequestProxy::invalidate): Clear m_manager.
        * UIProcess/UserMediaPermissionRequestProxy.h: Change m_manager from a reference to a
          pointer so it can be cleared.

2015-10-23  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Minor web editor fixes
        https://bugs.webkit.org/show_bug.cgi?id=150501

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/KeyBindingTranslator.cpp: Remove
        "MoveParagraphForward/Backward" as these commands do not exist in
        WebKit (anymore?).
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::executePendingEditorCommands):
        Editor::Command can take a String, no need to convert to a C char.

2015-10-23  Timothy Horton  <timothy_horton@apple.com>

        Fix the build by unapplying review comments.

        * UIProcess/Cocoa/WebViewImpl.h:

2015-10-23  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView renewGState]):
        (-[WKView writeSelectionToPasteboard:types:]):
        (-[WKView centerSelectionInVisibleArea:]):
        (-[WKView scrollWheel:]):
        (-[WKView swipeWithEvent:]):
        (-[WKView mouseMoved:]):
        (-[WKView mouseDown:]):
        (-[WKView mouseUp:]):
        (-[WKView mouseDragged:]):
        (-[WKView pressureChangeWithEvent:]):
        (-[WKView acceptsFirstMouse:]):
        (-[WKView shouldDelayWindowOrderingForEvent:]):
        (-[WKView performKeyEquivalent:]):
        (-[WKView keyUp:]):
        (-[WKView keyDown:]):
        (-[WKView flagsChanged:]):
        (-[WKView _superQuickLookWithEvent:]):
        (-[WKView _addFontPanelObserver]):
        (-[WKView viewWillMoveToWindow:]):
        (-[WKView viewDidMoveToWindow]):
        (-[WKView viewDidChangeBackingProperties]):
        (-[WKView enableAccessibilityIfNecessary]):
        (-[WKView quickLookWithEvent:]):
        (-[WKView _colorSpace]):
        (-[WKView _didRelaunchProcess]):
        (-[WKView _setTextIndicator:]):
        (-[WKView _setTextIndicator:withLifetime:]):
        (-[WKView _clearTextIndicatorWithAnimation:]):
        (-[WKView _setTextIndicatorAnimationProgress:]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView _didPerformImmediateActionHitTest:contentPreventsDefault:userData:]):
        (-[WKView _internalImmediateActionAnimationControllerForHitTestResult:withType:userData:]):
        (-[WKView _internalPrepareForImmediateActionAnimation]):
        (-[WKView _internalCancelImmediateActionAnimation]):
        (-[WKView _internalCompleteImmediateActionAnimation]):
        (-[WKView _internalDismissContentRelativeChildWindowsWithAnimation:]):
        (-[WKView beginDeferringViewInWindowChanges]):
        (-[WKView endDeferringViewInWindowChanges]):
        (-[WKView endDeferringViewInWindowChangesSync]):
        (-[WKView _prepareForMoveToWindow:withCompletionHandler:]):
        (-[WKView isDeferringViewInWindowChanges]):
        (-[WKView allowsLinkPreview]):
        (-[WKView setAllowsLinkPreview:]):
        (-[WKView _setIgnoresAllEvents:]):
        (-[WKView _setIgnoresNonWheelMouseEvents:]):
        (-[WKView _setIgnoresNonWheelEvents:]):
        (-[WKView _ignoresNonWheelEvents]):
        (-[WKView _ignoresAllEvents]):
        (-[WKView _setOverrideDeviceScaleFactor:]):
        (-[WKView _overrideDeviceScaleFactor]):
        (-[WKView _setTopContentInset:]):
        (-[WKView _topContentInset]):
        (-[WKView _dismissContentRelativeChildWindows]):
        (-[WKView _dismissContentRelativeChildWindowsWithAnimation:]):
        (-[WKView _setAutomaticallyAdjustsContentInsets:]):
        (-[WKView _automaticallyAdjustsContentInsets]):
        (-[WKWindowVisibilityObserver initWithView:]): Deleted.
        (-[WKWindowVisibilityObserver startObserving:]): Deleted.
        (-[WKWindowVisibilityObserver stopObserving:]): Deleted.
        (-[WKWindowVisibilityObserver _windowDidOrderOnScreen:]): Deleted.
        (-[WKWindowVisibilityObserver _windowDidOrderOffScreen:]): Deleted.
        (-[WKView dealloc]): Deleted.
        (-[WKView _updateWindowAndViewFrames]): Deleted.
        (-[WKView updateFontPanelIfNeeded]): Deleted.
        (-[WKView _selectionChanged]): Deleted.
        (-[WKView addWindowObserversForWindow:]): Deleted.
        (-[WKView removeWindowObservers]): Deleted.
        (-[WKView doWindowDidChangeScreen]): Deleted.
        (-[WKView _windowDidBecomeKey:]): Deleted.
        (-[WKView _windowDidChangeScreen:]): Deleted.
        (-[WKView _windowDidChangeLayerHosting:]): Deleted.
        (-[WKView _windowDidResignKey:]): Deleted.
        (-[WKView _windowDidMiniaturize:]): Deleted.
        (-[WKView _windowDidDeminiaturize:]): Deleted.
        (-[WKView _windowDidMove:]): Deleted.
        (-[WKView _windowDidResize:]): Deleted.
        (-[WKView _windowDidOrderOffScreen:]): Deleted.
        (-[WKView _windowDidOrderOnScreen:]): Deleted.
        (-[WKView _windowDidChangeBackingProperties:]): Deleted.
        (-[WKView _windowDidChangeOcclusionState:]): Deleted.
        (-[WKView _prepareForDictionaryLookup]): Deleted.
        (-[WKView _dictionaryLookupPopoverWillClose:]): Deleted.
        (-[WKView _accessibilityRegisterUIProcessTokens]): Deleted.
        (-[WKView _postFakeMouseMovedEventForFlagsChangedEvent:]): Deleted.
        (-[WKView _intrinsicDeviceScaleFactor]): Deleted.
        (-[WKView _preferencesDidChange]): Deleted.
        (-[WKView _targetWindowForMovePreparation]): Deleted.
        (-[WKView _updateContentInsetsIfAutomatic]): Deleted.
        (-[WKView observeValueForKeyPath:ofObject:change:context:]): Deleted.
        (-[WKView _dispatchSetTopContentInset]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h:
        (WebKit::WebViewImpl::automaticallyAdjustsContentInsets):
        (WebKit::WebViewImpl::topContentInset):
        (WebKit::WebViewImpl::overrideDeviceScaleFactor):
        (WebKit::WebViewImpl::isDeferringViewInWindowChanges):
        (WebKit::WebViewImpl::targetWindowForMovePreparation):
        (WebKit::WebViewImpl::lastPressureEvent):
        (WebKit::WebViewImpl::allowsLinkPreview):
        (WebKit::WebViewImpl::ignoresNonWheelEvents):
        (WebKit::WebViewImpl::ignoresAllEvents):
        (WebKit::WebViewImpl::createWeakPtr):
        * UIProcess/Cocoa/WebViewImpl.mm:
        (SOFT_LINK_CONSTANT_MAY_FAIL):
        (-[WKWindowVisibilityObserver initWithView:impl:]):
        (-[WKWindowVisibilityObserver dealloc]):
        (-[WKWindowVisibilityObserver startObserving:]):
        (-[WKWindowVisibilityObserver stopObserving:]):
        (-[WKWindowVisibilityObserver startObservingFontPanel]):
        (-[WKWindowVisibilityObserver startObservingLookupDismissal]):
        (-[WKWindowVisibilityObserver _windowDidOrderOnScreen:]):
        (-[WKWindowVisibilityObserver _windowDidOrderOffScreen:]):
        (-[WKWindowVisibilityObserver _windowDidBecomeKey:]):
        (-[WKWindowVisibilityObserver _windowDidResignKey:]):
        (-[WKWindowVisibilityObserver _windowDidMiniaturize:]):
        (-[WKWindowVisibilityObserver _windowDidDeminiaturize:]):
        (-[WKWindowVisibilityObserver _windowDidMove:]):
        (-[WKWindowVisibilityObserver _windowDidResize:]):
        (-[WKWindowVisibilityObserver _windowDidChangeBackingProperties:]):
        (-[WKWindowVisibilityObserver _windowDidChangeScreen:]):
        (-[WKWindowVisibilityObserver _windowDidChangeLayerHosting:]):
        (-[WKWindowVisibilityObserver _windowDidChangeOcclusionState:]):
        (-[WKWindowVisibilityObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WKWindowVisibilityObserver _dictionaryLookupPopoverWillClose:]):
        (-[WKEditCommandObjC initWithWebEditCommandProxy:]):
        (-[WKEditCommandObjC command]):
        (-[WKEditorUndoTargetObjC undoEditing:]):
        (-[WKEditorUndoTargetObjC redoEditing:]):
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::~WebViewImpl):
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::resignFirstResponder):
        (WebKit::WebViewImpl::renewGState):
        (WebKit::WebViewImpl::updateWindowAndViewFrames):
        (WebKit::WebViewImpl::setAutomaticallyAdjustsContentInsets):
        (WebKit::WebViewImpl::updateContentInsetsIfAutomatic):
        (WebKit::WebViewImpl::setTopContentInset):
        (WebKit::WebViewImpl::dispatchSetTopContentInset):
        (WebKit::WebViewImpl::setOverrideDeviceScaleFactor):
        (WebKit::WebViewImpl::intrinsicDeviceScaleFactor):
        (WebKit::WebViewImpl::windowDidOrderOffScreen):
        (WebKit::WebViewImpl::windowDidOrderOnScreen):
        (WebKit::WebViewImpl::windowDidBecomeKey):
        (WebKit::WebViewImpl::windowDidResignKey):
        (WebKit::WebViewImpl::windowDidMiniaturize):
        (WebKit::WebViewImpl::windowDidDeminiaturize):
        (WebKit::WebViewImpl::windowDidMove):
        (WebKit::WebViewImpl::windowDidResize):
        (WebKit::WebViewImpl::windowDidChangeBackingProperties):
        (WebKit::WebViewImpl::windowDidChangeScreen):
        (WebKit::WebViewImpl::windowDidChangeLayerHosting):
        (WebKit::WebViewImpl::windowDidChangeOcclusionState):
        (WebKit::WebViewImpl::viewWillMoveToWindow):
        (WebKit::WebViewImpl::viewDidMoveToWindow):
        (WebKit::WebViewImpl::viewDidChangeBackingProperties):
        (WebKit::WebViewImpl::postFakeMouseMovedEventForFlagsChangedEvent):
        (WebKit::WebViewImpl::colorSpace):
        (WebKit::WebViewImpl::beginDeferringViewInWindowChanges):
        (WebKit::WebViewImpl::endDeferringViewInWindowChanges):
        (WebKit::WebViewImpl::endDeferringViewInWindowChangesSync):
        (WebKit::WebViewImpl::prepareForMoveToWindow):
        (WebKit::WebViewImpl::pressureChangeWithEvent):
        (WebKit::WebViewImpl::isEditable):
        (WebKit::WebViewImpl::executeEditCommand):
        (WebKit::WebViewImpl::registerEditCommand):
        (WebKit::WebViewImpl::clearAllEditCommands):
        (WebKit::WebViewImpl::writeSelectionToPasteboard):
        (WebKit::WebViewImpl::centerSelectionInVisibleArea):
        (WebKit::WebViewImpl::selectionDidChange):
        (WebKit::WebViewImpl::startObservingFontPanel):
        (WebKit::WebViewImpl::updateFontPanelIfNeeded):
        (WebKit::WebViewImpl::preferencesDidChange):
        (WebKit::WebViewImpl::setTextIndicator):
        (WebKit::WebViewImpl::clearTextIndicatorWithAnimation):
        (WebKit::WebViewImpl::setTextIndicatorAnimationProgress):
        (WebKit::WebViewImpl::dismissContentRelativeChildWindows):
        (WebKit::WebViewImpl::quickLookWithEvent):
        (WebKit::WebViewImpl::prepareForDictionaryLookup):
        (WebKit::WebViewImpl::setAllowsLinkPreview):
        (WebKit::WebViewImpl::immediateActionAnimationControllerForHitTestResult):
        (WebKit::WebViewImpl::prepareForImmediateActionAnimation):
        (WebKit::WebViewImpl::cancelImmediateActionAnimation):
        (WebKit::WebViewImpl::completeImmediateActionAnimation):
        (WebKit::WebViewImpl::setIgnoresNonWheelEvents):
        (WebKit::WebViewImpl::setIgnoresAllEvents):
        (WebKit::WebViewImpl::accessibilityRegisterUIProcessTokens):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::activeWindow):
        (WebKit::PageClientImpl::preferencesDidChange):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::selectionDidChange):
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        (-[WKEditCommandObjC initWithWebEditCommandProxy:]): Deleted.
        (-[WKEditCommandObjC command]): Deleted.
        (-[WKEditorUndoTargetObjC undoEditing:]): Deleted.
        (-[WKEditorUndoTargetObjC redoEditing:]): Deleted.
        (WebKit::PageClientImpl::PageClientImpl): Deleted.
        Move more things to WebViewImpl.
        This also introduces an unfortunate pattern that is required for things which
        clients override on WKView, where we have a flow like this:
                - somebody (PageClient, etc.) calls WebViewImpl::x
                - WebViewImpl::x does nothing except call [WKView _x]
                - [WKView _x] calls WebViewImpl::xFromViewOnly, which does the real work
        As long as no clients call the -FromViewOnly variant, this will mean that
        all callers are bottlenecked through the overridable WKView method.
        How this works with WKWebView, I am not sure yet.

        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController initWithPage:view:viewImpl:recognizer:]):
        (-[WKImmediateActionController willDestroyView:]):
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WKImmediateActionController immediateActionRecognizerDidCancelAnimation:]):
        (-[WKImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):
        (-[WKImmediateActionController menuItem:viewAtScreenPoint:]):
        (-[WKImmediateActionController menuItem:previewItemAtPoint:]):
        (-[WKImmediateActionController menuItem:itemFrameForPoint:]):
        (-[WKImmediateActionController menuItem:maxSizeForPoint:]):
        (-[WKImmediateActionController _animationControllerForDataDetectedText]):
        (-[WKImmediateActionController _animationControllerForDataDetectedLink]):
        (-[WKImmediateActionController _animationControllerForText]):
        (-[WKImmediateActionController initWithPage:view:recognizer:]): Deleted.
        Keep a generic NSView, use the WebViewImpl for WK*View related things.

2015-10-22  Joonghun Park  <jh718.park@samsung.com>

        [GTK] Fix build break since r191471
        https://bugs.webkit.org/show_bug.cgi?id=150487

        Reviewed by Žan Doberšek.

        * UIProcess/API/gtk/WebKitContextMenuClient.cpp:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::populate):

2015-10-22  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Build break since r191472 and r191473
        https://bugs.webkit.org/show_bug.cgi?id=150485

        Unreviewed build fix.

        * CMakeLists.txt: Remove icu include path and move page include path.

2015-10-22  Sam Weinig  <sam@webkit.org>

        Navigations on the same host (but with different schemes and ports) should not trigger universal links
        <rdar://problem/22811325>
        https://bugs.webkit.org/show_bug.cgi?id=150481

        Reviewed by Dan Bernstein.

        Update the policy for following universal links to only take host into consideration.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::showPage):

2015-10-22  Anders Carlsson  <andersca@apple.com>

        Simplify menu creation
        https://bugs.webkit.org/show_bug.cgi?id=150476

        Reviewed by Tim Horton.

        Instead of creating vectors of NSMenuItem objects, just simply build the menu recursively.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::createContextMenuFromItems):
        (WebKit::WebContextMenuProxyMac::createContextMenuItem):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        (WebKit::populateNSMenu): Deleted.
        (WebKit::nsMenuItem): Deleted.
        (WebKit::nsMenuItemVector): Deleted.

2015-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        ERROR: Unhandled web process message 'StorageAreaMap:DispatchStorageEvent'
        https://bugs.webkit.org/show_bug.cgi?id=150315

        Reviewed by Andreas Kling.

        It was introduced in r184930, that keeps the session storage area
        maps alive in the UI process when they are destroyed by the web
        process. The problem is that we also keep the listeners, so that
        events are also dispatched to the listeners of destroyed areas,
        and the message handlers were removed in the web process.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createTransientLocalStorageMap): Add a
        listener for the new storage map ID when the map is reused.
        (WebKit::StorageManager::destroyStorageMap): Always remove
        listeners of destroyed maps.

2015-10-22  Tim Horton  <timothy_horton@apple.com>

        Add a SPI variant of loadData that accepts user data to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=150475

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _loadData:MIMEType:characterEncodingName:baseURL:userData:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2015-10-22  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=150466

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:

2015-10-22  Anders Carlsson  <andersca@apple.com>

        NativeContextMenuItem isn't needed anymore, remove it
        https://bugs.webkit.org/show_bug.cgi?id=150473

        Reviewed by Tim Horton.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Shared/NativeContextMenuItem.h: Removed.
        (WebKit::NativeContextMenuItem::~NativeContextMenuItem): Deleted.
        (WebKit::NativeContextMenuItem::nsMenuItem): Deleted.
        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::WebContextMenuItem): Deleted.
        * Shared/WebContextMenuItem.h:
        (WebKit::WebContextMenuItem::create): Deleted.
        (WebKit::WebContextMenuItem::nativeContextMenuItem): Deleted.
        * Shared/efl/NativeContextMenuItemEfl.cpp: Removed.
        (WebKit::NativeContextMenuItem::NativeContextMenuItem): Deleted.
        * Shared/gtk/NativeContextMenuItemGtk.cpp: Removed.
        (WebKit::NativeContextMenuItem::NativeContextMenuItem): Deleted.
        * Shared/mac/NativeContextMenuItem.mm: Removed.
        (WebKit::NativeContextMenuItem::NativeContextMenuItem): Deleted.
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::nsMenuItem): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2015-10-22  Anders Carlsson  <andersca@apple.com>

        CTTE WebContextMenuItemData
        https://bugs.webkit.org/show_bug.cgi?id=150471

        Reviewed by Tim Horton.

        * Shared/API/c/WKContextMenuItem.cpp:
        (WKContextMenuItemGetTag):
        (WKContextMenuItemGetType):
        (WKContextMenuItemCopyTitle):
        (WKContextMenuItemGetEnabled):
        (WKContextMenuItemGetChecked):
        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::create):
        * Shared/WebContextMenuItem.h:
        (WebKit::WebContextMenuItem::data):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSelectContextMenuItem):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::nsMenuItem):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageClickMenuItem):
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        (WebKit::InjectedBundlePageContextMenuClient::getCustomMenuFromDefaultItems):

2015-10-22  Anders Carlsson  <andersca@apple.com>

        Handle nil menu items.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::nsMenuItemVector):

2015-10-22  Anders Carlsson  <andersca@apple.com>

        Wait to convert the share menu item to a real share menu until after calling out to the client
        https://bugs.webkit.org/show_bug.cgi?id=150465

        Reviewed by Tim Horton.

        This will let us simplify more code in upcoming patches.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::nsMenuItem):
        (WebKit::nsMenuItemVector):
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2015-10-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Migrate WKSetPatternPhaseInUserSpace() and WKGetUserToBaseCTM() from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=150460

        Reviewed by Tim Horton.

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

2015-10-22  Alex Christensen  <achristensen@webkit.org>

        Initial NSURLSession WebResourceLoader implementation
        https://bugs.webkit.org/show_bug.cgi?id=150355

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::startNetworkLoad):
        (WebKit::NetworkResourceLoader::setDefersLoading):
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::didConvertHandleToDownload):
        (WebKit::NetworkResourceLoader::abort):
        (WebKit::NetworkResourceLoader::willPerformHTTPRedirection):
        (WebKit::NetworkResourceLoader::didReceiveChallenge):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveData):
        (WebKit::NetworkResourceLoader::didCompleteWithError):
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        (WebKit::NetworkResourceLoader::willSendRequestAsync):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        (WebKit::NetworkResourceLoader::didSendData):
        (WebKit::NetworkResourceLoader::receivedCancellation):
        (WebKit::NetworkResourceLoader::startBufferingTimerIfNeeded):
        (WebKit::NetworkResourceLoader::bufferingTimerFired):
        (WebKit::NetworkResourceLoader::validateCacheEntry):
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure):
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        (WebKit::NetworkResourceLoader::continueCanAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkResourceLoader::supportsDataArray):
        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::create):
        (WebKit::NetworkResourceLoader::currentRequest):
        (WebKit::NetworkResourceLoader::handle):
        * NetworkProcess/NetworkSession.h: Added.
        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
        (WebKit::NetworkingDataTask::client):
        (WebKit::NetworkingDataTask::clearClient):
        (WebKit::NetworkSession::~NetworkSession):
        * NetworkProcess/cocoa/NetworkSessionCocoa.mm: Added.
        (toNSURLSessionResponseDisposition):
        (toNSURLSessionAuthChallengeDisposition):
        (-[NetworkSessionDelegate initWithNetworkSession:]):
        (-[NetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]):
        (-[NetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]):
        (-[NetworkSessionDelegate URLSession:task:didCompleteWithError:]):
        (-[NetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
        (-[NetworkSessionDelegate URLSession:dataTask:didReceiveData:]):
        (WebKit::NetworkSession::create):
        (WebKit::NetworkSession::singleton):
        (WebKit::configurationForType):
        (WebKit::NetworkSession::NetworkSession):
        (WebKit::NetworkSession::createDataTaskWithRequest):
        (WebKit::NetworkSession::dataTaskForIdentifier):
        (WebKit::NetworkingDataTask::NetworkingDataTask):
        (WebKit::NetworkingDataTask::~NetworkingDataTask):
        (WebKit::NetworkingDataTask::suspend):
        (WebKit::NetworkingDataTask::resume):
        (WebKit::NetworkingDataTask::taskIdentifier):
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::willCacheResponseAsync):
        * WebKit2.xcodeproj/project.pbxproj:
        * config.h:

2015-10-22  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix for disabled redirected XComposite window support.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp: Add USE(REDIRECTED_XCOMPOSITE_WINDOW) guards.
        * UIProcess/DrawingAreaProxyImpl.h: Mark virtual methods as override to avoid compilation warnings.

2015-10-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement touch-action: manipulation; for iOS
        https://bugs.webkit.org/show_bug.cgi?id=149854
        <rdar://problem/23017145>

        Reviewed by Benjamin Poulain.

        Implements the manipulation value for the CSS property touch-action. Performs hit-testing upon receiving a potential
        tap to determine whether to disable double-tap gesture recognition over the duration of the tap. If so, sends a message
        from the web process to the UI process indicating that double-tapping should be disabled, allowing single taps to
        avoid the delay.

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

2015-10-22  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r181972): Scroll position changes to top of youtube page when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=150428

        Reviewed by Antti Koivisto.

        Call updateFocusAppearance with RevealMode::DoNotReveal to avoid revealing the focused element.

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

2015-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix a crash in GTk+ after r191402.

        Since r191402 WebContextMenuProxy is no longer refcounted, and
        std::unique_ptr is used instead. This means that when we show the
        context menu for the second time in a web view, a new
        WebContextMenuProxy is created and the previous one is
        destroyed. We were setting the active context menu of the WebView
        in the constructor of WebContextMenuProxy, and unsetting it in the
        destructor. Now the constructor of the new WebContextMenuProxy
        happens before the destructor of the current one that unsets the
        WebView active context menu. This patch simply makes the web view
        unset its active context menu when it's unmapped and a new one
        hasn't been set.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (activeContextMenuUnmapped):
        (webkitWebViewBaseSetActiveContextMenuProxy):
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):

2015-10-22  Hunseop Jeong  <hs85.jeong@samsung.com>

        [GTK] Try to fix the build after r191402.
        https://bugs.webkit.org/show_bug.cgi?id=150435

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::populate):
        (WebKit::WebContextMenuProxyGtk::show):
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
        (WebKit::WebContextMenuProxyGtk::menuPositionFunction):
        (WebKit::WebContextMenuProxyGtk::showContextMenu): Deleted.
        (WebKit::WebContextMenuProxyGtk::hideContextMenu): Deleted.
        (WebKit::WebContextMenuProxyGtk::cancelTracking): Deleted.
        * UIProcess/gtk/WebContextMenuProxyGtk.h:
        (WebKit::WebContextMenuProxyGtk::gtkMenu):
        (WebKit::WebContextMenuProxyGtk::create): Deleted.

2015-10-21  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

       Unreviewed EFL build fix. Remove customizeMenu implementation.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::customizeMenu): Deleted.

2015-10-21  Alex Christensen  <achristensen@webkit.org>

        Speculative EFL build fix.

        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        Remove another customizeMenu call.

2015-10-21  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][GTK][WK2] Fix build break since r191402, r191401
        https://bugs.webkit.org/show_bug.cgi?id=150432

        Unreviewed EFL and GTK build fix.

        * CMakeLists.txt:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::createContextMenuProxy):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/efl/WebContextMenuProxyEfl.cpp:
        (WebKit::WebContextMenuProxyEfl::show):
        * UIProcess/efl/WebContextMenuProxyEfl.h:
        (WebKit::WebContextMenuProxyEfl::create): Deleted.
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebViewEfl::createContextMenuProxy):
        * UIProcess/efl/WebViewEfl.h:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::customizeMenu):
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:

2015-10-21  Anders Carlsson  <andersca@apple.com>

        Get rid of WebContextMenuClient::customizeMenu, it's no longer used
        https://bugs.webkit.org/show_bug.cgi?id=150427

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::customizeMenu): Deleted.
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:

2015-10-21  Tim Horton  <timothy_horton@apple.com>

        API-ify the FindMatches client
        https://bugs.webkit.org/show_bug.cgi?id=150422

        Reviewed by Anders Carlsson.

        * UIProcess/API/APIFindMatchesClient.h: Renamed from Source/WebKit2/UIProcess/WebFindClient.h.
        (API::FindMatchesClient::~FindMatchesClient):
        (API::FindMatchesClient::didFindStringMatches):
        (API::FindMatchesClient::didGetImageForMatchResult):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFindMatchesClient):
        * UIProcess/WebFindClient.cpp: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setFindMatchesClient):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didGetImageForFindMatch):
        (WebKit::WebPageProxy::didFindStringMatches):
        (WebKit::WebPageProxy::initializeFindMatchesClient): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::findMatchesClient):
        * WebKit2.xcodeproj/project.pbxproj:

2015-10-21  Enrica Casucci  <enrica@apple.com>

        WebProcess crashes when accessibility bundle is not found.
        https://bugs.webkit.org/show_bug.cgi?id=150414

        Reviewed by Dan Bernstein.

        The uninitialized pointer to NSError causes the print function to crash.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::registerWithAccessibility):

2015-10-21  Anders Carlsson  <andersca@apple.com>

        Move services menu handling out into a separate function
        https://bugs.webkit.org/show_bug.cgi?id=150420

        Reviewed by Tim Horton.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showServicesMenu):
        (WebKit::WebContextMenuProxyMac::show):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        (WebKit::WebContextMenuProxyMac::populate): Deleted.

2015-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Single tapping clickable elements in unscalable pages should show a tap highlight
        https://bugs.webkit.org/show_bug.cgi?id=150382

        Reviewed by Simon Fraser.

        When the double tap gesture recognizer is disabled ahead of time (as in the case of unscalable pages) the tap is
        committed before the geometries come in. To fix this, we introduce a flag that allows the single tap to be
        committed before the tap highlight arrives. This allows the tap highlight to be immediately animated when receiving
        the tap highlight geometries only in the case where double tapping is disabled when recognizing the single tap.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]):
        (-[WKContentView _singleTapRecognized:]):
        (-[WKContentView _singleTapCommited:]):

2015-10-21  Anders Carlsson  <andersca@apple.com>

        Get rid of useBinaryEncoding from WKPageGetContentsAsMHTMLData
        https://bugs.webkit.org/show_bug.cgi?id=150417

        Reviewed by Tim Horton.

        The useBinaryEncoding parameter is always false, so just get rid of it.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetContentsAsMHTMLData):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_page_contents_get):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_save):
        (webkit_web_view_save_to_file):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getContentsAsMHTMLData):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getContentsAsMHTMLData):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-10-21  Anders Carlsson  <andersca@apple.com>

        WebContextMenuProxyMac::setupServicesMenu doesn't need to take a context parameter
        https://bugs.webkit.org/show_bug.cgi?id=150418

        Reviewed by Tim Horton.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        (WebKit::WebContextMenuProxyMac::populate):

2015-10-21  Anders Carlsson  <andersca@apple.com>

        WebContextMenuProxy doesn't have to be ref-counted
        https://bugs.webkit.org/show_bug.cgi?id=150415

        Reviewed by Tim Horton.

        Change WebContextMenuProxy to not inherit from RefCounted. Instead of using RefPtr, use std::unique_ptr.
        Get rid of cancelTracking and hideContextMenu and dismiss the menu whenever the menu proxy is destroyed.
        Also, rename showContextMenu to show.

        * UIProcess/PageClient.h:
        * UIProcess/WebContextMenuProxy.h:
        (WebKit::WebContextMenuProxy::cancelTracking): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createContextMenuProxy):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createContextMenuProxy):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        (WebKit::WebContextMenuProxyMac::create): Deleted.
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::~WebContextMenuProxyMac):
        (WebKit::WebContextMenuProxyMac::show):
        (WebKit::WebContextMenuProxyMac::showContextMenu): Deleted.
        (WebKit::WebContextMenuProxyMac::hideContextMenu): Deleted.
        (WebKit::WebContextMenuProxyMac::cancelTracking): Deleted.

2015-10-21  Anders Carlsson  <andersca@apple.com>

        Stop using a popup menu button cell(!) for context menus
        https://bugs.webkit.org/show_bug.cgi?id=150413

        Reviewed by Tim Horton.

        Just use a regular NSMenu. Also, have the service menu code path store the service menu
        in the same member variable.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        (WebKit::WebContextMenuProxyMac::clearServicesMenu):
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        (WebKit::WebContextMenuProxyMac::hideContextMenu):
        (WebKit::WebContextMenuProxyMac::cancelTracking):
        (WebKit::WebContextMenuProxyMac::~WebContextMenuProxyMac): Deleted.

2015-10-21  Chris Dumez  <cdumez@apple.com>

        Add assertions to NetworkCache::Entry constructor to make sure a key's type is "resource"
        https://bugs.webkit.org/show_bug.cgi?id=150369

        Reviewed by Antti Koivisto.

        Add assertions to NetworkCache::Entry constructor to make sure a key's
        type is "resource" now that the NetworkCache storage supports other
        types of entries.

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):

2015-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkProcess: DNS prefetch happens in the Web Process
        https://bugs.webkit.org/show_bug.cgi?id=147824

        Reviewed by Chris Dumez.

        DNS prefetch requests started in the WebProcess should be sent to
        the network process when it's enabled.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::prefetchDNS): Use NetworkProcess::prefetchDNS().
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in: Add
        PrefetchDNS message.
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prefetchDNS): Do the actual DNS prefetch.
        * NetworkProcess/NetworkProcess.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp:
        (webkitWebExtensionDidReceiveMessage): Use WebProcess::prefetchDNS().
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::prefetchDNS): Use WebProcess::prefetchDNS().
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary): Use
        FrameLoaderClient to do the DNS prefetch.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Initialize the DNS prefetched
        hosts cleanup hysteresis activity. Clear the cache of DNS
        prefetched when hysteresis activity stopped.
        (WebKit::WebProcess::prefetchDNS): Send the request to the network
        process if it's enabled, otherwise do the actual DNS prefetch.
        * WebProcess/WebProcess.h:

2015-10-20  Chris Dumez  <cdumez@apple.com>

        [WK2] Generalize NetworkCacheStorage API so it can store different types of metadata
        https://bugs.webkit.org/show_bug.cgi?id=150221
        <rdar://problem/23149771>

        Reviewed by Darin Adler and Antti Koivisto.

        Generalize NetworkCacheStorage API so it can store different types of
        metadata alongside the network resources. This is a pre-requirement to
        making our NetworkCache smarter by storing information about the
        resources.

        To keep the code simple, the entry type is now part of the entry key and
        we store records of a specific type in a 'type' subfolder. The cache
        structure looks like so:
        - WebKitCache/Version 5/[Partition]/[Type]/[Hash]
        - WebKitCache/Version 5/[Partition]/[Type]/[Hash]-blob (Optional)

        Existing cache entries now that the 'resource' type as these are network
        resources.

        * NetworkProcess/cache/NetworkCache.cpp:
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        * NetworkProcess/cache/NetworkCacheKey.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-10-20  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] ContextMenu doesn't work correctly on MiniBrowser after r191194.
        https://bugs.webkit.org/show_bug.cgi?id=150311

        Reviewed by Gyuyoung Kim.

        Restore the test_ewk2_context_menu API test to check the context menu whether it works correctly.

        * PlatformEfl.cmake:

2015-10-13  Conrad Shultz  <conrad_shultz@apple.com>

        _WKThumbnailView should support a snapshot-only mode
        https://bugs.webkit.org/show_bug.cgi?id=150106

        Reviewed by Tim Horton.

        Add a new property to _WKThumbnailView, exclusivelyUsesSnapshot, which causes _WKThumbnailView
        to bypass both layer tree reparenting and event suppression on the associated WKView.

        Add a new method, -requestSnapshot, which clients can use to force _WKThumbnailView to refresh
        on demand.

        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView requestSnapshot]):
        Extracted from -_requestSnapshotIfNeeded:.
        (-[_WKThumbnailView _viewWasUnparented]):
        (-[_WKThumbnailView _viewWasParented]):
        (-[_WKThumbnailView _requestSnapshotIfNeeded]):

2015-10-20  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        * UIProcess/ios/forms/WKFileUploadPanel.mm:

2015-10-20  Joseph Pecoraro  <pecoraro@apple.com>

        ASSERT when right clicking on SVG Image generating Share menu - can break Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=150374

        Reviewed by Brian Burg.

        When there is no absolute URL or downloadable media URL no system share
        menu is created, but we were still appending the null context menu to
        the list of context menu items.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::shareMenuItem):
        Bail early if the context menu is null.

        (WebKit::WebContextMenuProxyMac::showContextMenu):
        Only append the share context menu item if it is non-null.
        This matches ContextMenuController.cpp in WebCore.

2015-10-20  Commit Queue  <commit-queue@webkit.org>

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

        "May have caused a significant warm PLT regression" (Requested
        by cdumez_ on #webkit).

        Reverted changeset:

        "[WK2] Generalize NetworkCacheStorage API so it can store
        different types of metadata"
        https://bugs.webkit.org/show_bug.cgi?id=150221
        http://trac.webkit.org/changeset/191306

2015-10-20  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build by disabling MAC_GESTURE_EVENTS on 10.9 and 10.10

        * Configurations/FeatureDefines.xcconfig:

2015-10-20  Commit Queue  <commit-queue@webkit.org>

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

        Caused assertions on regression tests (Requested by ap on
        #webkit).

        Reverted changeset:

        "ERROR: Unhandled web process message
        'StorageAreaMap:DispatchStorageEvent'"
        https://bugs.webkit.org/show_bug.cgi?id=150315
        http://trac.webkit.org/changeset/191333

2015-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] ASSERTION FAILED: m_shouldWaitForSyncReplies in Connection::connectionDidClose()
        https://bugs.webkit.org/show_bug.cgi?id=150361

        Reviewed by Martin Robinson.

        It doesn't always happen because it depends on how sockets are
        closed, and the state of the threads. The problem is that we are
        not handling the case when the read fails because we closed the
        connection. In that case we log the error and call
        Connection::connectionDidClose(). But it was connectionDidClose()
        the one closing the socket. So, in this particular case it's not an
        error but a normal termination, and we shouldn't try to close the
        connection again. Something similar can happen while sending a
        message, and we get a broken pipe error, but in that case we are
        only printing the error, so it's harmless.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::readyReadHandler): Only print error and call
        connectionDidClose() if we are still connected when read fails.
        (IPC::Connection::sendOutgoingMessage): Only print error if we are
        still connected when send fails.

2015-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Graphics corruption when entering/leaving AC mode quickly
        https://bugs.webkit.org/show_bug.cgi?id=150323

        Reviewed by Mario Sanchez Prada.

        The UI process is notified when entering accelerated compositing
        mode after the layers have been flushed and rendered to avoid
        flickering. However, this is producing flickering in the GTK+
        port, because we use an offscreen redirected window that is
        resized to a minimium size to save memory when not in AC mode. The
        web process always uses the current size of the redirected window,
        so when entering AC mode, contents are rendered into the 1x1
        window, then the UI process is notified, the redirected window is
        resized to its actual size, and we force a resize to ask the web
        process to render again, now at the correct size. Rendering at 1x1
        and then resizing the window is what produces the flickering when
        entering AC mode, but it's also inefficient, since we need to
        render again after the redirected window is resized. So, this
        patch adds a WillEnterAcceleratedCompositing message that is sent
        to the UI process when the layer tree host is created but before
        the contents have been composited and rendered. This is
        implemented by the GTK+ port to prepare for entering AC mode, by
        resizing the redirected window. When we actually enter AC mode,
        the contents have already been rendered in the web process at the
        correct size, so we can just use the redirected window surface
        instead of the drawing area one, and paint in the web view without
        any flickering. We no longer need the forceResize either.
        When leaving accelerated compositing mode, we now clear the redirected
        window resources after a short delay. This ensures that we have
        already rendered the update sent in the ExitAcceleratedCompositingMode
        message, but also that entering/leaving AC mode quickly doesn't
        produce any redirected window resize.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::willEnterAcceleratedCompositingMode):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseClearRedirectedWindowSoon):
        (webkitWebViewBaseWillEnterAcceleratedCompositingMode):
        (webkitWebViewBaseEnterAcceleratedCompositingMode):
        (webkitWebViewBaseExitAcceleratedCompositingMode):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::willEnterAcceleratedCompositingMode):
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::willEnterAcceleratedCompositingMode):
        * UIProcess/DrawingAreaProxyImpl.h:
        (WebKit::DrawingAreaProxyImpl::forceResize): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willEnterAcceleratedCompositingMode):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::willEnterAcceleratedCompositingMode):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::willEnterAcceleratedCompositingMode):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):

2015-10-20  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Fix build for ENABLE_PLUGIN_PROCESS_GTK2=OFF
        https://bugs.webkit.org/show_bug.cgi?id=150086

        Reviewed by Darin Adler.

        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createBackend):

2015-10-20  Yoav Weiss  <yoav@yoav.ws>

        Rename the PICTURE_SIZES flag to CURRENTSRC
        https://bugs.webkit.org/show_bug.cgi?id=150275

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2015-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        ERROR: Unhandled web process message 'StorageAreaMap:DispatchStorageEvent'
        https://bugs.webkit.org/show_bug.cgi?id=150315

        Reviewed by Andreas Kling.

        It was introduced in r184930, that keeps the session storage area
        maps alive in the UI process when they are destroyed by the web
        process. The problem is that we also keep the listeners, so that
        events are also dispatched to the listeners of destroyed areas,
        and the message handlers were removed in the web process.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createTransientLocalStorageMap): Add a
        listener for the new storage map ID when the map is reused.
        (WebKit::StorageManager::destroyStorageMap): Always remove
        listeners of destroyed maps.

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        Remove unused support for long presses from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=150345

        Reviewed by Beth Dakin.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didBeginTrackingPotentialLongMousePress): Deleted.
        (API::UIClient::didRecognizeLongMousePress): Deleted.
        (API::UIClient::didCancelTrackingPotentialLongMousePress): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient): Deleted.
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetLongMousePressEnabled):
        (WKPreferencesSetLongMousePressEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didBeginTrackingPotentialLongMousePress): Deleted.
        (WebKit::WebPageProxy::didRecognizeLongMousePress): Deleted.
        (WebKit::WebPageProxy::didCancelTrackingPotentialLongMousePress): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        (API::InjectedBundle::PageUIClient::didBeginTrackingPotentialLongMousePress): Deleted.
        (API::InjectedBundle::PageUIClient::didRecognizeLongMousePress): Deleted.
        (API::InjectedBundle::PageUIClient::didCancelTrackingPotentialLongMousePress): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePageUIClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::didBeginTrackingPotentialLongMousePress): Deleted.
        (WebKit::InjectedBundlePageUIClient::didRecognizeLongMousePress): Deleted.
        (WebKit::InjectedBundlePageUIClient::didCancelTrackingPotentialLongMousePress): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didBeginTrackingPotentialLongMousePress): Deleted.
        (WebKit::WebChromeClient::didRecognizeLongMousePress): Deleted.
        (WebKit::WebChromeClient::didCancelTrackingPotentialLongMousePress): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Deleted.

2015-10-19  Chris Dumez  <cdumez@apple.com>

        Make sure development Safari does not delete the stable Safari cache storage.
        https://bugs.webkit.org/show_bug.cgi?id=150343

        Reviewed by Antti Koivisto.

        Make sure development Safari does not delete the stable Safari disk cache
        storage. Development Safari now uses Version 5, while the last stable
        Safari uses Version 4. Since the 2 versions can co-exist, it is best not
        to drop the old cache version (4) at this point.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::deleteOldVersions):

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h: Added.
        * UIProcess/Cocoa/WebViewImpl.mm: Added.
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::~WebViewImpl):
        (WebKit::WebViewImpl::setDrawsBackground):
        (WebKit::WebViewImpl::drawsBackground):
        (WebKit::WebViewImpl::setDrawsTransparentBackground):
        (WebKit::WebViewImpl::drawsTransparentBackground):
        (WebKit::WebViewImpl::acceptsFirstResponder):
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::resignFirstResponder):
        (WebKit::WebViewImpl::isFocused):
        (WebKit::WebViewImpl::viewWillStartLiveResize):
        (WebKit::WebViewImpl::viewDidEndLiveResize):
        (WebKit::WebViewImpl::setFrameSize):
        (WebKit::WebViewImpl::disableFrameSizeUpdates):
        (WebKit::WebViewImpl::enableFrameSizeUpdates):
        (WebKit::WebViewImpl::frameSizeUpdatesDisabled):
        (WebKit::WebViewImpl::setFrameAndScrollBy):
        (WebKit::WebViewImpl::setFixedLayoutSize):
        (WebKit::WebViewImpl::fixedLayoutSize):
        (WebKit::WebViewImpl::setDrawingAreaSize):
        (WebKit::WebViewImpl::setContentPreparationRect):
        (WebKit::WebViewImpl::updateViewExposedRect):
        (WebKit::WebViewImpl::setClipsToVisibleRect):
        (WebKit::WebViewImpl::setIntrinsicContentSize):
        (WebKit::WebViewImpl::intrinsicContentSize):
        (WebKit::WebViewImpl::setViewScale):
        (WebKit::WebViewImpl::viewScale):
        (WebKit::WebViewImpl::layoutMode):
        (WebKit::WebViewImpl::setLayoutMode):
        (WebKit::WebViewImpl::supportsArbitraryLayoutModes):
        (WebKit::WebViewImpl::updateSupportsArbitraryLayoutModes):
        (WebKit::WebViewImpl::updateSecureInputState):
        (WebKit::WebViewImpl::resetSecureInputState):
        (WebKit::WebViewImpl::notifyInputContextAboutDiscardedComposition):
        (WebKit::WebViewImpl::hasFullScreenWindowController):
        (WebKit::WebViewImpl::fullScreenWindowController):
        (WebKit::WebViewImpl::closeFullScreenWindowController):
        (WebKit::WebViewImpl::fullScreenPlaceholderView):
        (WebKit::WebViewImpl::createFullScreenWindow):
        Move the actual implementation of a number of WKView methods into a
        C++ class, WebViewImpl, which WKView calls directly into.
        Eventually, we will move all of the logic of WKView into WebViewImpl,
        and then duplicate the necessary forwarding in WKWebView and remove
        WKWebView's inner WKView.

        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::updateSecureInputState):
        (WebKit::PageClientImpl::resetSecureInputState):
        (WebKit::PageClientImpl::notifyInputContextAboutDiscardedComposition):
        (WebKit::PageClientImpl::beganEnterFullScreen):
        (WebKit::PageClientImpl::beganExitFullScreen):
        For now, forward PageClient requests that can be answered by WebViewImpl
        to WebViewImpl. Eventually, we'll probably fold PageClientImpl and WebViewImpl
        together into one class, and these things will collapse down.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:page:]):
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController exitFullScreen]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]):
        (-[WKFullScreenWindowController _manager]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController initWithWindow:webView:]): Deleted.
        (-[WKFullScreenWindowController _page]): Deleted.
        * UIProcess/mac/WKViewLayoutStrategy.h:
        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (+[WKViewLayoutStrategy layoutStrategyWithPage:view:viewImpl:mode:]):
        (-[WKViewLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewLayoutStrategy invalidate]):
        (-[WKViewLayoutStrategy didChangeFrameSize]):
        (-[WKViewViewSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewFixedSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy updateLayout]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy didChangeFrameSize]):
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (+[WKViewLayoutStrategy layoutStrategyWithPage:view:mode:]): Deleted.
        (-[WKViewLayoutStrategy initWithPage:view:mode:]): Deleted.
        (-[WKViewLayoutStrategy willDestroyView:]): Deleted.
        (-[WKViewViewSizeLayoutStrategy initWithPage:view:mode:]): Deleted.
        (-[WKViewFixedSizeLayoutStrategy initWithPage:view:mode:]): Deleted.
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy initWithPage:view:mode:]): Deleted.
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy initWithPage:view:mode:]): Deleted.
        Make WKViewLayoutStrategy and WKFullScreenWindowController operate in terms of generic
        NSViews instead of WKView, so that eventually they will be able to work for either
        WKView or WKWebView, and so that they can sit underneath WebViewImpl.

        * WebKit2.xcodeproj/project.pbxproj:

2015-10-19  Commit Queue  <commit-queue@webkit.org>

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

        broke lots of API tests, need time to figure out whats up
        (Requested by thorton on #webkit).

        Reverted changeset:

        "WKView being inside WKWebView leads to weird API issues"
        https://bugs.webkit.org/show_bug.cgi?id=150174
        http://trac.webkit.org/changeset/191307

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        Try again to fix the 32-bit build.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):

2015-10-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Extend fast-clicking behavior to trigger on elements that have negligible zoom
        https://bugs.webkit.org/show_bug.cgi?id=150248
        <rdar://problem/23140069>

        Reviewed by Simon Fraser.

        Currently, fast-clicking only triggers on pages that have unscalable viewports. To allow more websites to benefit from fast-clicking
        behavior, we generalize fast-clicking to also occur when tapping on elements for which double-tap-to-zoom would zoom the element in
        or out by an insignificant amount. We define an insignificant amount of zoom to mean that zooming would increase the viewport scale
        by less than a configurable threshold, or decrease the viewport scale by more than a configurable threshold. We accomplish this by
        temporarily disabling the double tap gesture recognizer for the duration of the tap. This patch refactors some logic used to compute
        zoomed viewports to make it possible to predict the change in viewport scale when double tapping to zoom. See the changes in
        SmartMagnificationController and ViewGestureGeometryCollector for more details.

        There are no new tests, since this patch does not change existing behavior. Instead, this patch adds the machinery needed for zoom-
        dependent fast-clicking: by setting the preferences WebKitFastClickingEnabled and WebKitFastClickZoomThreshold, we will be able to tweak
        the behavior dynamically.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _contentZoomScale]):
        (-[WKWebView _targetContentZoomScaleForRect:currentScale:fitEntireRect:minimumScale:maximumScale:]):
        (-[WKWebView _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        (-[WKWebView _viewportIsUserScalable]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::disableDoubleTapGesturesUntilTapIsFinishedIfNecessary):
        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::adjustSmartMagnificationTargetRectAndZoomScales):
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):
        (WebKit::SmartMagnificationController::magnify):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]):
        (-[WKContentView _fastClickZoomThreshold]):
        (-[WKContentView _allowDoubleTapToZoomForCurrentZoomScale:andTargetZoomScale:]):
        (-[WKContentView _disableDoubleTapGesturesUntilTapIsFinishedIfNecessary:allowsDoubleTapZoom:targetRect:isReplaced:minimumScale:maximumScale:]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _endPotentialTapAndEnableDoubleTapGesturesIfNecessary]):
        (-[WKContentView _singleTapRecognized:]):
        (cancelPotentialTapIfNecessary):
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView webSelectionRects]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::disableDoubleTapGesturesUntilTapIsFinishedIfNecessary):
        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::computeZoomInformationForNode):
        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::potentialTapAtPosition):

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/WebViewImpl.h: Added.
        * UIProcess/Cocoa/WebViewImpl.mm: Added.
        (WebKit::WebViewImpl::WebViewImpl):
        (WebKit::WebViewImpl::~WebViewImpl):
        (WebKit::WebViewImpl::setDrawsBackground):
        (WebKit::WebViewImpl::drawsBackground):
        (WebKit::WebViewImpl::setDrawsTransparentBackground):
        (WebKit::WebViewImpl::drawsTransparentBackground):
        (WebKit::WebViewImpl::acceptsFirstResponder):
        (WebKit::WebViewImpl::becomeFirstResponder):
        (WebKit::WebViewImpl::resignFirstResponder):
        (WebKit::WebViewImpl::isFocused):
        (WebKit::WebViewImpl::viewWillStartLiveResize):
        (WebKit::WebViewImpl::viewDidEndLiveResize):
        (WebKit::WebViewImpl::setFrameSize):
        (WebKit::WebViewImpl::disableFrameSizeUpdates):
        (WebKit::WebViewImpl::enableFrameSizeUpdates):
        (WebKit::WebViewImpl::frameSizeUpdatesDisabled):
        (WebKit::WebViewImpl::setFrameAndScrollBy):
        (WebKit::WebViewImpl::setFixedLayoutSize):
        (WebKit::WebViewImpl::fixedLayoutSize):
        (WebKit::WebViewImpl::setDrawingAreaSize):
        (WebKit::WebViewImpl::setContentPreparationRect):
        (WebKit::WebViewImpl::updateViewExposedRect):
        (WebKit::WebViewImpl::setClipsToVisibleRect):
        (WebKit::WebViewImpl::setIntrinsicContentSize):
        (WebKit::WebViewImpl::intrinsicContentSize):
        (WebKit::WebViewImpl::setViewScale):
        (WebKit::WebViewImpl::viewScale):
        (WebKit::WebViewImpl::layoutMode):
        (WebKit::WebViewImpl::setLayoutMode):
        (WebKit::WebViewImpl::supportsArbitraryLayoutModes):
        (WebKit::WebViewImpl::updateSupportsArbitraryLayoutModes):
        (WebKit::WebViewImpl::updateSecureInputState):
        (WebKit::WebViewImpl::resetSecureInputState):
        (WebKit::WebViewImpl::notifyInputContextAboutDiscardedComposition):
        (WebKit::WebViewImpl::hasFullScreenWindowController):
        (WebKit::WebViewImpl::fullScreenWindowController):
        (WebKit::WebViewImpl::closeFullScreenWindowController):
        (WebKit::WebViewImpl::fullScreenPlaceholderView):
        (WebKit::WebViewImpl::createFullScreenWindow):
        Move the actual implementation of a number of WKView methods into a
        C++ class, WebViewImpl, which WKView calls directly into.
        Eventually, we will move all of the logic of WKView into WebViewImpl,
        and then duplicate the necessary forwarding in WKWebView and remove
        WKWebView's inner WKView.

        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::updateSecureInputState):
        (WebKit::PageClientImpl::resetSecureInputState):
        (WebKit::PageClientImpl::notifyInputContextAboutDiscardedComposition):
        (WebKit::PageClientImpl::beganEnterFullScreen):
        (WebKit::PageClientImpl::beganExitFullScreen):
        For now, forward PageClient requests that can be answered by WebViewImpl
        to WebViewImpl. Eventually, we'll probably fold PageClientImpl and WebViewImpl
        together into one class, and these things will collapse down.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:page:]):
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController exitFullScreen]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]):
        (-[WKFullScreenWindowController _manager]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController initWithWindow:webView:]): Deleted.
        (-[WKFullScreenWindowController _page]): Deleted.
        * UIProcess/mac/WKViewLayoutStrategy.h:
        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (+[WKViewLayoutStrategy layoutStrategyWithPage:view:viewImpl:mode:]):
        (-[WKViewLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewLayoutStrategy invalidate]):
        (-[WKViewLayoutStrategy didChangeFrameSize]):
        (-[WKViewViewSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewFixedSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy updateLayout]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy didChangeFrameSize]):
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy initWithPage:view:viewImpl:mode:]):
        (+[WKViewLayoutStrategy layoutStrategyWithPage:view:mode:]): Deleted.
        (-[WKViewLayoutStrategy initWithPage:view:mode:]): Deleted.
        (-[WKViewLayoutStrategy willDestroyView:]): Deleted.
        (-[WKViewViewSizeLayoutStrategy initWithPage:view:mode:]): Deleted.
        (-[WKViewFixedSizeLayoutStrategy initWithPage:view:mode:]): Deleted.
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy initWithPage:view:mode:]): Deleted.
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy initWithPage:view:mode:]): Deleted.
        Make WKViewLayoutStrategy and WKFullScreenWindowController operate in terms of generic
        NSViews instead of WKView, so that eventually they will be able to work for either
        WKView or WKWebView, and so that they can sit underneath WebViewImpl.

        * WebKit2.xcodeproj/project.pbxproj:

2015-10-19  Chris Dumez  <cdumez@apple.com>

        [WK2] Generalize NetworkCacheStorage API so it can store different types of metadata
        https://bugs.webkit.org/show_bug.cgi?id=150221
        <rdar://problem/23149771>

        Reviewed by Darin Adler and Antti Koivisto.

        Generalize NetworkCacheStorage API so it can store different types of
        metadata alongside the network resources. This is a pre-requirement to
        making our NetworkCache smarter by storing information about the
        resources.

        To keep the code simple, the entry type is now part of the entry key and
        we store records of a specific type in a 'type' subfolder. The cache
        structure looks like so:
        - WebKitCache/Version 5/[Partition]/[Type]/[Hash]
        - WebKitCache/Version 5/[Partition]/[Type]/[Hash]-blob (Optional)

        Existing cache entries now that the 'resource' type as these are network
        resources.

        * NetworkProcess/cache/NetworkCache.cpp:
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        * NetworkProcess/cache/NetworkCacheKey.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOS build

        * Configurations/FeatureDefines.xcconfig:

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        Try to fix the 32-bit build.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):

2015-10-16  Anders Carlsson  <andersca@apple.com>

        Fix image service menus somewhat
        https://bugs.webkit.org/show_bug.cgi?id=150265

        Reviewed by Tim Horton.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        It's a service menu if we have a controlled image.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        Use an item provider.

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        Add magnify and rotate gesture event support for Mac
        https://bugs.webkit.org/show_bug.cgi?id=150179
        <rdar://problem/8036240>

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        New feature flag.

        * Shared/NativeWebGestureEvent.h: Added.
        (WebKit::NativeWebGestureEvent::nativeEvent):
        * Shared/WebEvent.h:
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformGestureEvent::WebKit2PlatformGestureEvent):
        (WebKit::platform):
        * Shared/WebEventConversion.h:
        * Shared/mac/NativeWebGestureEventMac.mm: Added.
        (WebKit::webEventTypeForNSEvent):
        (WebKit::pointForEvent):
        (WebKit::NativeWebGestureEvent::NativeWebGestureEvent):
        Add and plumb a new native event that wraps a NSEvent of type
        NSEventTypeMagnify or NSEventTypeRotate (gesture events).

        * Shared/mac/WebGestureEvent.cpp: Added.
        (WebKit::WebGestureEvent::encode):
        (WebKit::WebGestureEvent::decode):
        (WebKit::WebGestureEvent::isGestureEventType):
        * Shared/mac/WebGestureEvent.h: Added.
        (WebKit::WebGestureEvent::WebGestureEvent):
        (WebKit::WebGestureEvent::position):
        (WebKit::WebGestureEvent::gestureScale):
        (WebKit::WebGestureEvent::gestureRotation):
        Add IPC plumbing for WebGestureEvent, which becomes a WebCore::PlatformGestureEvent.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Remove unnecessary iPhone-only WKView code.
        Add _gestureEventWasNotHandledByWebCore, SPI which can be overridden
        to react when WebCore decides not to handle a gesture event.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView magnifyWithEvent:]):
        Route magnification gesture events to the page, unless we're already
        in an active view zoom gesture, in which case we'll bypass the page
        and send the event straight to ViewGestureController.

        (-[WKView rotateWithEvent:]):
        Route rotation gesture events to the page.

        (-[WKView _gestureEventWasNotHandledByWebCore:]):
        Let ViewGestureController know that WebCore didn't handle a gesture event.
        We always give WebCore the first crack at the event if we're not in a zoom,
        because it could preventDefault() on the Begin phase event, and that should
        prevent pinch-zoom from starting.

        * UIProcess/PageClient.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::gestureEventWasNotHandledByWebCore):
        Plumb gestureEventWasNotHandledByWebCore back from WebPageProxy to WKView.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleGestureEvent):
        (WebKit::WebPageProxy::didReceiveEvent):
        * UIProcess/WebPageProxy.h:
        Forward gesture events to EventDispatcher, and let WKView know when WebCore
        passes on handling them.
        
        * UIProcess/mac/ViewGestureController.h:
        (WebKit::ViewGestureController::hasActiveMagnificationGesture):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::gestureEventWasNotHandledByWebCore):
        (WebKit::ViewGestureController::handleMagnificationGestureEvent):
        Don't try to start a zoom with anything other than a Begin phase event.
        Try to start a zoom with any events that WebCore doesn't handle.
        Move dispatch of endMagnificationGesture into ViewGestureController;
        there is no reason for that to be in WKView anymore.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::gestureEvent):
        (WebKit::EventDispatcher::dispatchGestureEvent):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleGestureEvent):
        (WebKit::WebPage::gestureEvent):
        * WebProcess/WebPage/WebPage.h:
        Dispatch to the main thread and hand off the gesture event to WebCore,
        asynchronously informing the UI process of whether the event was handled or not.

2015-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ASSERTION FAILED: parent in WebInspectorProxy::platformDetach()
        https://bugs.webkit.org/show_bug.cgi?id=150319

        Reviewed by Žan Doberšek.

        This happens when the inspector is shown/closed very
        quickly. Since we start the inspector attached by default, when
        the web inspector is created m_isAttached is set to true, so that
        when opened, it's attached to the view. If the inspector is closed
        before it has been actually attached, the inspector view doesn't
        have a parent, even if the m_isAttached is true. So, we should
        handle this case instead of asserting. This is what happens in
        test http/tests/xmlhttprequest/access-control-repeated-failed-preflight-crash.html.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformDetach): Remove the view from
        its parent container if it was actually attached.

2015-10-19  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Implement WebContextMenuProxyEfl::showContextMenu after r191194
        https://bugs.webkit.org/show_bug.cgi?id=150310

        Reviewed by Gyuyoung Kim.

        showContextMenu() doesn't work correctly after r191194 in EFL port.
        This patch implements WebContextMenuProxyEfl::showContextMenu.

        * UIProcess/efl/WebContextMenuProxyEfl.cpp:
        (WebKit::WebContextMenuProxyEfl::WebContextMenuProxyEfl):
        (WebKit::WebContextMenuProxyEfl::showContextMenu):
        (WebKit::WebContextMenuProxyEfl::hideContextMenu):
        * UIProcess/efl/WebContextMenuProxyEfl.h:

2015-10-18  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] Simplify unused return warning in WKRetainPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=150173

        Reviewed by Darin Adler.

        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::__attribute__):
        (WebKit::adoptWK): Deleted.

2015-10-18  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the ENABLE(SECCOMP_FILTERS) build after r187030
        https://bugs.webkit.org/show_bug.cgi?id=150172

        Reviewed by Alexey Proskuryakov.

        * Shared/linux/SeccompFilters/Syscall.cpp:
        (WebKit::reportUnexpectedSyscall):

2015-10-18  Joonghun Park  <jh718.park@samsung.com>

        [GTK] Remove WebKitContextMenu related missing annotation warnings
        https://bugs.webkit.org/show_bug.cgi?id=150299

        Reviewed by Darin Adler.

        The warnings occur currently because when executing g-ir-scanner,
        it doesn't consider WebKitContextMenu related .cpp files,
        but only .h files.

        * PlatformGTK.cmake: Add WebKitContextMenu related cpp files.

2015-10-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop honoring the user default "WebKitKerningAndLigaturesEnabledByDefault"
        https://bugs.webkit.org/show_bug.cgi?id=150287

        Reviewed by Simon Fraser.

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

2015-10-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK] Implement WebContextMenuProxyGtk::showContextMenu after r191194
        https://bugs.webkit.org/show_bug.cgi?id=150276

        Reviewed by Carlos Garcia Campos.

        After r191194, showContextMenu signature becomes changed, and the implementation
        is moved from the generic file to the Mac port. It poses the compile error in GTK port.
        This patch implements WebContextMenuProxyGtk::showContextMenu. The logic is the same
        to the old one except for dropping SERVICE_CONTROLS support. This is because
        SERVICE_CONTROLS is not related to GTK.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::showContextMenu):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:

2015-10-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r191250 and r191253.
        https://bugs.webkit.org/show_bug.cgi?id=150296

        Broke all the tests on Windows (Requested by ap on #webkit).

        Reverted changesets:

        "Stop honoring the user default
        "WebKitKerningAndLigaturesEnabledByDefault""
        https://bugs.webkit.org/show_bug.cgi?id=150287
        http://trac.webkit.org/changeset/191250

        "Build fix after r191250"
        http://trac.webkit.org/changeset/191253

2015-10-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop honoring the user default "WebKitKerningAndLigaturesEnabledByDefault"
        https://bugs.webkit.org/show_bug.cgi?id=150287

        Reviewed by Simon Fraser.

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

2015-10-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Stop using WKAXRegisterRemoteApp
        https://bugs.webkit.org/show_bug.cgi?id=150283

        Reviewed by Alexey Proskuryakov.

        * Platform/spi/mac: Added.
        * Platform/spi/mac/AppKitSPI.h: Added. Includes declaration of
          +[NSAccessibilityRemoteUIElement setRemoteUIApp:].

        * WebKit2.xcodeproj/project.pbxproj: Added reference to new header. Also changed the path of
          the Platform/spi/Cocoa group to the corresponding path in the source tree.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::registerWithAccessibility): Added.
        (WebKit::WebProcess::platformInitializeProcess): Use new registerWithAccessibility instead
          of WKAXRegisterRemoteApp.

2015-10-16  Simon Fraser  <simon.fraser@apple.com>

        Enhance TextStream for logging, remove subclasses, log more things
        https://bugs.webkit.org/show_bug.cgi?id=150269

        Reviewed by Zalan Bujtas.

        Remove the various TextStream subclasses that only existed to support indenting,
        and output additional types. Add output for more WebCore and WebKit2 types, and
        just use TextStream everywhere.
        
        TextStream is enhance to support grouping (open paren and intent), with a 
        stack-based class to open/end a group.
        
        Remove some SVG-specific duplicate output functions.
        
        Outdent namespace contents of GraphicsTypes.h.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::dump):
        (WebKit::recursiveDumpNodes):
        (WebKit::RemoteScrollingCoordinatorTransaction::description):
        (WebKit::RemoteScrollingTreeTextStream::RemoteScrollingTreeTextStream): Deleted.
        (WebKit::RemoteScrollingTreeTextStream::increaseIndent): Deleted.
        (WebKit::RemoteScrollingTreeTextStream::decreaseIndent): Deleted.
        (WebKit::RemoteScrollingTreeTextStream::writeIndent): Deleted.
        (WebKit::dumpProperty): Deleted.
        (WebKit::RemoteScrollingTreeTextStream::operator<<): Deleted.
        (WebKit::RemoteScrollingTreeTextStream::dump): Deleted.
        (WebKit::RemoteScrollingTreeTextStream::recursiveDumpNodes): Deleted.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::operator<<):
        (WebKit::dumpChangedLayers):
        (WebKit::RemoteLayerTreeTransaction::description):
        (WebKit::RemoteLayerTreeTextStream::RemoteLayerTreeTextStream): Deleted.
        (WebKit::RemoteLayerTreeTextStream::increaseIndent): Deleted.
        (WebKit::RemoteLayerTreeTextStream::decreaseIndent): Deleted.
        (WebKit::dumpProperty): Deleted.
        (WebKit::RemoteLayerTreeTextStream::operator<<): Deleted.
        (WebKit::RemoteLayerTreeTextStream::writeIndent): Deleted.
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::operator<<):

2015-10-17  Hunseop Jeong  <hs85.jeong@samsung.com>

        URTBF after r191194 to fix EFL build.
        https://bugs.webkit.org/show_bug.cgi?id=150272

        Reviewed by Csaba Osztrogonác.

        * UIProcess/efl/WebContextMenuProxyEfl.cpp:
        (WebKit::WebContextMenuProxyEfl::showContextMenu):
        * UIProcess/efl/WebContextMenuProxyEfl.h:

2015-10-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a WKWebView input delegate SPI
        https://bugs.webkit.org/show_bug.cgi?id=149646

        Reviewed by Dan Bernstein.

        Renames the existing _WKFormDelegate to _WKInputDelegate and adds a new delegate SPI method
        -[_WKInputDelegate _webView:focusShouldStartInputSession:] that allows clients to allow or
        disallow showing up the keyboard. To make this decision, clients are given a
        _WKFocusedElementInfo, which contains information about the focused element prior to the
        keyboard showing up so the client will be able to override default assistance behavior.

        While the information contained in a _WKFocusedElementInfo currently seems like overkill for
        _webView:focusShouldStartInputSession, our intentions are to give WebKit clients control over more
        details of how node assistance works, such as being able to use a custom editor for certain
        types of nodes.

        * Shared/API/Cocoa/WebKitPrivate.h: Added new header _WKFocusedElementInfo.h.
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _inputDelegate]):
        (-[WKWebView _formDelegate]):
        (-[WKWebView _setInputDelegate:]):
        (-[WKWebView _setFormDelegate:]):
        (-[WKWebView initWithFrame:configuration:]): Deleted canAssistOnProgrammaticFocus flag.
        (-[WKWebView canAssistOnProgrammaticFocus]): Ditto.
        (-[WKWebView setCanAssistOnProgrammaticFocus:]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Deleted.
        (-[WKWebViewConfiguration _canAssistOnProgrammaticFocus]): Deleted canAssistOnProgrammaticFocus flag.
        (-[WKWebViewConfiguration _setCanAssistOnProgrammaticFocus:]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKFocusedElementInfo.h: Added.
        * UIProcess/API/Cocoa/_WKFormDelegate.h:
        * UIProcess/API/Cocoa/_WKInputDelegate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKFormDelegate.h.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFocusedElementInfo initWithAssistedNodeInformation:isInteracting:]):
        (-[WKFocusedElementInfo type]):
        (-[WKFocusedElementInfo value]):
        (-[WKFocusedElementInfo isUserInitiated]):
        (-[WKContentView accessoryAutoFill]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]): If the input delegate responds to
            shouldStartInputSession, consult it to see if we should bring up the keyboard; otherwise, use our default behavior.
        * WebKit2.xcodeproj/project.pbxproj:

2015-10-16  Simon Fraser  <simon.fraser@apple.com>

        Make TextStream the canonical way to log classes in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=150256

        Reviewed by Sam Weinig.

        We vacillated between PrintStream and TextStream as being the canonical way
        to stringify WebCore data structures. This patch solidifies TextStream
        as the solution, since it has convenient stream syntax, and is what we
        use for render tree dumps.

        Remove TextStream member functions that output non-simple structs
        (sizes, points and rects), replacing them with free operator<< functions
        in the .cpp file for the relevant class. Formatting is currently consistent
        with RenderTreeAsText output, to avoid breaking tests.

        Remove custom FloatRect outputting in SVG and RemoteLayerTreeTransaction.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingTreeTextStream::operator<<): Deleted.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<): Deleted.

2015-10-16  Anders Carlsson  <andersca@apple.com>

        Remove some dead menu code
        https://bugs.webkit.org/show_bug.cgi?id=150247

        Reviewed by Andreas Kling.

        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::WebContextMenuItemData):
        (WebKit::WebContextMenuItemData::encode): Deleted.
        * Shared/WebContextMenuItemData.h:
        (WebKit::WebContextMenuItemData::selectionHandler): Deleted.
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::nsMenuItem):

2015-10-16  Anders Carlsson  <andersca@apple.com>

        Move more code to WebContextMenuProxyMac
        https://bugs.webkit.org/show_bug.cgi?id=150240

        Reviewed by Tim Horton.

        * UIProcess/WebContextMenuProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::contextMenuClient):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::initializeShareMenuItem):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::platformInitializeShareMenuItem): Deleted.

2015-10-16  Tim Horton  <timothy_horton@apple.com>

        Hook up autolayout intrinsic sizing for WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=150219
        <rdar://problem/20016905>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView intrinsicContentSize]):
        (-[WKWebView _setIntrinsicContentSize:]):
        (-[WKWebView _minimumLayoutWidth]):
        (-[WKWebView _setMinimumLayoutWidth:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Add a simple SPI to specify the minimum width that a WKWebView will attempt
        to lay out to, similar to WKView except just a width, not a size, and
        with no option to force the height to the view size. Similar behavior can
        be achieved by clients by setting custom autolayout constraints on the view.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::intrinsicContentSizeDidChange):
        Forward intrinsic content size changes to the WKWebView, not its inner WKView,
        if we have one.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        Only set the autosizing fixed minimum height if we're using that behavior;
        otherwise, setting it to the view's height will end up accidentally
        turning on that behavior (which involves an extra layout per resize!).

2015-10-15  Anders Carlsson  <andersca@apple.com>

        Use the ShowContextMenu message for service menus as well
        https://bugs.webkit.org/show_bug.cgi?id=150206

        Reviewed by Tim Horton.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::type):
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::isServicesMenu):
        (WebKit::ContextMenuContextData::needsServicesMenu): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showSelectionServiceMenu): Deleted.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleSelectionServiceClick):

2015-10-16  Hunseop Jeong  <hs85.jeong@samsung.com>

        [GTK] Try to fix the build after r191137
        https://bugs.webkit.org/show_bug.cgi?id=150222

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithKeyEvent):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::populate):
        (WebKit::WebContextMenuProxyGtk::showContextMenu):
        (WebKit::WebContextMenuProxyGtk::hideContextMenu):
        (WebKit::WebContextMenuProxyGtk::WebContextMenuProxyGtk):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:
        (WebKit::WebContextMenuProxyGtk::create):
        (WebKit::WebContextMenuProxyGtk::gtkMenu):
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::WebPopupMenuProxyGtk):
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:
        (WebKit::WebPopupMenuProxyGtk::create):
        (WebKit::WebPopupMenuProxyGtk::setCurrentlySelectedMenuItem):

2015-10-15  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

         EFL build fix since r191137

         Unreviewed EFL build fix.

        * UIProcess/CoordinatedGraphics/WebView.cpp: Removed.

2015-10-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate to CGContextSetBaseCTM() and CGContextResetClip() from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=150155

        Reviewed by Tim Horton.

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

2015-10-15  Dean Jackson  <dino@apple.com>

        Fix the iOS build. And hopefully not breaking the other builds
        at the same time.

        * UIProcess/PageClient.h:
        * UIProcess/WebContextMenuProxy.cpp:
        * UIProcess/WebContextMenuProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:

2015-10-15  Anders Carlsson  <andersca@apple.com>

        Use the context inside WebContextMenuProxyMac
        https://bugs.webkit.org/show_bug.cgi?id=150196

        Reviewed by Tim Horton.

        * UIProcess/WebContextMenuProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2015-10-15  Anders Carlsson  <andersca@apple.com>

        Use the context menu location that's stored in the context data
        https://bugs.webkit.org/show_bug.cgi?id=150194

        Reviewed by Tim Horton.

        * UIProcess/WebContextMenuProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2015-10-15  Anders Carlsson  <andersca@apple.com>

        Store the context menu data and user data in the WebContextMenuProxy object
        https://bugs.webkit.org/show_bug.cgi?id=150191

        Reviewed by Tim Horton.

        * UIProcess/PageClient.h:
        * UIProcess/WebContextMenuProxy.cpp:
        (WebKit::WebContextMenuProxy::WebContextMenuProxy):
        * UIProcess/WebContextMenuProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createContextMenuProxy):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createContextMenuProxy):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        (WebKit::WebContextMenuProxyMac::create):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::WebContextMenuProxyMac):

2015-10-15  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Stop using WKSetNSURLConnectionDefersCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=150189

        Reviewed by Anders Carlsson.

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

2015-10-15  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/API/APIFrameInfo.cpp:
        (API::FrameInfo::~FrameInfo):
        * UIProcess/API/APIFrameInfo.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:

2015-10-15  Anders Carlsson  <andersca@apple.com>

        CTTE menu proxies
        https://bugs.webkit.org/show_bug.cgi?id=150187

        Reviewed by Tim Horton.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPopupMenuProxy.h:
        (WebKit::WebPopupMenuProxy::WebPopupMenuProxy):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy): Deleted.
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        (WebKit::WebContextMenuProxyMac::create):
        (WebKit::WebContextMenuProxyMac::page):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::WebContextMenuProxyMac):
        (WebKit::WebContextMenuProxyMac::~WebContextMenuProxyMac):
        (WebKit::WebContextMenuProxyMac::contextMenuItemSelected):
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        (WebKit::WebPopupMenuProxyMac::create):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::WebPopupMenuProxyMac):

2015-10-15  Anders Carlsson  <andersca@apple.com>

        Add -[WKFrameInfo _handle]
        https://bugs.webkit.org/show_bug.cgi?id=150185
        rdar://problem/23132371

        Reviewed by Tim Horton.

        * UIProcess/API/APIFrameInfo.cpp:
        (API::FrameInfo::FrameInfo):
        * UIProcess/API/APIFrameInfo.h:
        * UIProcess/API/Cocoa/WKFrameInfo.mm:
        (-[WKFrameInfo _handle]):
        * UIProcess/API/Cocoa/WKFrameInfoInternal.h:
        * UIProcess/API/Cocoa/WKFrameInfoPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKFrameInfoInternal.h.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showPopupMenu):
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPopupMenuProxy.h:
        (WebKit::WebPopupMenuProxy::WebPopupMenuProxy):
        * WebKit2.xcodeproj/project.pbxproj:

2015-10-15  Anders Carlsson  <andersca@apple.com>

        The menu location and menu items should be part of ContextMenuContextData
        https://bugs.webkit.org/show_bug.cgi?id=150182

        Reviewed by Andreas Kling.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::menuLocation):
        (WebKit::ContextMenuContextData::menuItems):
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showSelectionServiceMenu):
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):

2015-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test WebKit2.RestoreSessionStateContainingFormData fails
        https://bugs.webkit.org/show_bug.cgi?id=84960

        Reviewed by Žan Doberšek.

        Add a cross-platform implementation to LegacySessionStateCodingNone
        using the new SessionState, so that non mac ports can make unit
        tests that use the legacy session state coding pass.

        * UIProcess/LegacySessionStateCodingNone.cpp:
        (WebKit::encodeLegacySessionState):
        (WebKit::decodeLegacySessionState):
        (WebKit::encodeLegacySessionHistoryEntryData): Deleted.
        (WebKit::decodeLegacySessionHistoryEntryData): Deleted.

2015-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix wrong #ifdef added in r190615.

        This disabled accelerated compositing unconditionally.

        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):

2015-10-14  Zhuo Li  <zachli@apple.com>

        Augment <input type=search>’s recent search history with the time each entry was added,
        in order to allow time-based clearing of search history.
        https://bugs.webkit.org/show_bug.cgi?id=148388.

        Reviewed by Darin Adler.

        Replace Vector<String> with Vector<RecentSearch>, where RecentSearch is a struct
        that consists search string and time, for recent searches in order to store additional time
        information.

        All these new RecentSearches are stored in a plist in which the structure looks like:
        Root {
            "items": {
                autosave name: {
                    "searches": [
                        { "searchString": searchString, "date": date },
                        ...
                    ]
                }
            }
        }

        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<RecentSearch>::encode): Encode the new struct RecentSearch
        (IPC::ArgumentCoder<RecentSearch>::decode): Decode the new struct RecentSearch
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::saveRecentSearches): Call saveRecentSearches in WebCore::SearchPopupMenuCocoa.
        (WebKit::WebPageProxy::loadRecentSearches): Call loadRecentSearches in WebCore::SearchPopupMenuCocoa.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::saveRecentSearches):
        (WebKit::WebSearchPopupMenu::loadRecentSearches):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h:

2015-10-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Web pages with unscalable viewports shouldn't have a single tap delay
        https://bugs.webkit.org/show_bug.cgi?id=149968
        <rdar://problem/23054453>

        Reviewed by Simon Fraser.

        When a viewport is unscalable (specified through the meta viewport tag) we
        do not add a delay to our single tap gesture recognizer. We do this by
        disabling or reinitializing the WKContentView's double tap gesture recognizer
        when the viewport becomes unscalable or scalable, respectively. A viewport is
        deemed unscalable when it has user-scalable = no, or when the minimum scale is
        greater than or equal to the maximum scale.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _createAndConfigureDoubleTapGestureRecognizer]): Pulled logic
                for initializing a double tap gesture recognizer out into a helper function.
        (-[WKContentView setupInteraction]):
        (-[WKContentView _setDoubleTapGesturesEnabled:]): Turns gesture recognition for double
                taps on or off.

2015-10-14  Anders Carlsson  <andersca@apple.com>

        Remove a message that isn't used by anyone
        https://bugs.webkit.org/show_bug.cgi?id=150136

        Reviewed by Andreas Kling.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didRemoveFrameFromHierarchy): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2): Deleted.

2015-10-14  Alex Christensen  <achristensen@webkit.org>

        Add SPI for reloading without content blockers
        https://bugs.webkit.org/show_bug.cgi?id=150058
        rdar://problem/22742222

        Reviewed by Sam Weinig.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageReload):
        (WKPageReloadWithoutContentBlockers):
        (WKPageReloadFromOrigin):
        (WKPageTryClose):
        (WKPageSetUserContentExtensionsEnabled):
        (WKPageSupportsTextEncoding):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController reload]):
        (-[WKBrowsingContextController reloadFromOrigin]):
        (-[WKBrowsingContextController applicationNameForUserAgent]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        (-[WKWebView _setUserContentExtensionsEnabled:]):
        (-[WKWebView _userContentExtensionsEnabled]):
        (-[WKWebView _webProcessIdentifier]):
        (-[WKWebView _killWebContentProcess]):
        (-[WKWebView _reloadWithoutContentBlockers]):
        (-[WKWebView _killWebContentProcessAndResetState]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_reload):
        (webkit_web_view_reload_bypass_cache):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didHandleContentFilterUnblockNavigation):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::stopLoading):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setShouldScaleViewToFitDocument):
        (WebKit::WebPageProxy::setUserContentExtensionsEnabled): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::userContentExtensionsEnabled): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::m_shouldDispatchFakeMouseMoveEvents):
        (WebKit::WebPage::setDefersLoading):
        (WebKit::WebPage::reload):
        (WebKit::WebPage::goForward):
        (WebKit::WebPage::createDocumentLoader):
        (WebKit::WebPage::setShouldScaleViewToFitDocument):
        (WebKit::WebPage::imageOrMediaDocumentSizeChanged):
        (WebKit::WebPage::setUserContentExtensionsEnabled): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-10-14  Simon Fraser  <simon.fraser@apple.com>

        Change GraphicsContext image-drawing functions to take references
        https://bugs.webkit.org/show_bug.cgi?id=150108

        Reviewed by Tim Horton and Sam Weinig.

        Change GraphicsContext::drawImage(), drawTiledImage(), drawImageBuffer(), clipToImageBuffer()
        and isCompatibleWithBuffer() to take references, and adjust calling code, adding
        null-checks where necessary.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeImage):
        (IPC::encodeOptionalImage):
        (IPC::ArgumentCoder<Cursor>::encode):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSelectionSnapshot):

2015-10-14  Anders Carlsson  <andersca@apple.com>

        Change the bundle app cache APIs to take a page
        https://bugs.webkit.org/show_bug.cgi?id=150123

        Reviewed by Sam Weinig.

        This is another step towards getting rid of ApplicationCacheStorage::singleton().
        Ideally the WKTR tests that use this should be converted to API tests.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleClearApplicationCache): Deleted.
        (WKBundleClearApplicationCacheForOrigin): Deleted.
        (WKBundleSetAppCacheMaximumSize): Deleted.
        (WKBundleGetAppCacheUsageForOrigin): Deleted.
        (WKBundleSetApplicationCacheOriginQuota): Deleted.
        (WKBundleResetApplicationCacheOriginQuota): Deleted.
        (WKBundleCopyOriginsWithApplicationCache): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageClearApplicationCache):
        (WKBundlePageClearApplicationCacheForOrigin):
        (WKBundlePageSetAppCacheMaximumSize):
        (WKBundlePageGetAppCacheUsageForOrigin):
        (WKBundlePageSetApplicationCacheOriginQuota):
        (WKBundlePageResetApplicationCacheOriginQuota):
        (WKBundlePageCopyOriginsWithApplicationCache):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearApplicationCache): Deleted.
        (WebKit::InjectedBundle::clearApplicationCacheForOrigin): Deleted.
        (WebKit::InjectedBundle::setAppCacheMaximumSize): Deleted.
        (WebKit::InjectedBundle::appCacheUsageForOrigin): Deleted.
        (WebKit::InjectedBundle::setApplicationCacheOriginQuota): Deleted.
        (WebKit::InjectedBundle::resetApplicationCacheOriginQuota): Deleted.
        (WebKit::InjectedBundle::originsWithApplicationCache): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:

2015-10-14  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix the problem in which environment variable included in webprocess-cmd-prefix can't be parsed
        https://bugs.webkit.org/show_bug.cgi?id=148616

        Reviewed by Gyuyoung Kim.

        This patch fixes the problem in which environment variable in web process-cmd-prefix can't be parsed.
        process-cmd-prefix option doesn't work in two cases.
        1. When executing run-layout-tests,
        2. When executing MiniBrowser with web process-cmd-prefix environment variable.

        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::parseAndRemoveEnvironments):
        (WebKit::ProcessLauncher::launchProcess):

2015-10-13  Yongjun Zhang  <yongjun_zhang@apple.com>

        Use the correct notification strings for view service applications state change.
        https://bugs.webkit.org/show_bug.cgi?id=150107

        Use the correct notification names "_UIViewServiceHostDidEnterBackgroundNotification" and
        "_UIViewServiceHostWillEnterForegroundNotification" to listen to view service application state changes.

        Reviewed by Gavin Barraclough.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):

2015-10-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Split TypesettingFeatures into kerning and ligatures bools
        https://bugs.webkit.org/show_bug.cgi?id=150074

        Reviewed by Simon Fraser.

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

2015-10-13  Dean Jackson  <dino@apple.com>

        Fix iOS-family builds.

        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageGetObjectRegistry):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _remoteObjectRegistry]):
        * UIProcess/API/mac/WKViewInternal.h:

2015-10-13  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageGetObjectRegistry):

2015-10-13  Anders Carlsson  <andersca@apple.com>

        Add and implement WKPageGetObjectRegistry
        https://bugs.webkit.org/show_bug.cgi?id=150102

        Reviewed by Tim Horton.

        Put the _WKObjectRegistry used by WKPageRef and WKBrowsingContextController on the WKView for now.
        If we decide to share more code between WKView and WKWebView, the object registry could live in an object that would be shared
        between WKView and WKWebView.

        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (WKPageGetObjectRegistry):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _remoteObjectRegistry]):
        (-[WKBrowsingContextController dealloc]): Deleted.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView _remoteObjectRegistry]):
        * UIProcess/API/mac/WKViewInternal.h:

2015-10-13  Chris Dumez  <cdumez@apple.com>

        Avoid useless copies in range-loops that are using 'auto'
        https://bugs.webkit.org/show_bug.cgi?id=150091

        Reviewed by Sam Weinig.

        Avoid useless copies in range-loops that are using 'auto'. Also use
        'auto*' instead of 'auto' when range values are pointers for clarity.

        * UIProcess/VisitedLinkStore.cpp:
        (WebKit::VisitedLinkStore::pendingVisitedLinksTimerFired):
        (WebKit::VisitedLinkStore::resizeTable):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::releaseRemainingIconsForPageURLs):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::plugins):

2015-10-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add debug settings for using giant tiles (4096x4096)
        https://bugs.webkit.org/show_bug.cgi?id=149977
        <rdar://problem/23017093>

        Reviewed by Tim Horton.

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

2015-10-13  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Avoid crash due to invalid screen bounds
        https://bugs.webkit.org/show_bug.cgi?id=150048
        <rdar://problem/22112664>

        Reviewed by Jer Noble.

        Check for an invalid bounds, and reset it to a known state before
        attempting to use it.

        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::setVideoLayerFrameFenced):

2015-10-13  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Fix build for ENABLE_TOUCH_EVENTS=OFF
        https://bugs.webkit.org/show_bug.cgi?id=150085

        Reviewed by Carlos Garcia Campos.

        * Shared/gtk/NativeWebTouchEventGtk.cpp:
        * Shared/gtk/WebEventFactory.cpp:
        * Shared/gtk/WebEventFactory.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkit_web_view_base_class_init):

2015-10-13  Chris Dumez  <cdumez@apple.com>

        Avoid useless copying of Key::HashType in loops in NetworkCache::Storage::synchronize()
        https://bugs.webkit.org/show_bug.cgi?id=150061

        Reviewed by Carlos Garcia Campos.

        Avoid useless copying of Key::HashType in loops in NetworkCache::Storage::synchronize().
        Key::HashType is currently a SHA1::Digest, which is a std::array<uint8_t, 20>.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::synchronize):

2015-10-12  Philip Chimento  <philip.chimento@gmail.com>

        [GTK] OSX linker doesn't understand --whole-archive
        https://bugs.webkit.org/show_bug.cgi?id=144557

        Reviewed by Martin Robinson.

        * PlatformGTK.cmake: Link with extra libraries on Darwin, since
        we don't have the --whole-archive linker option.

2015-10-09  Anders Carlsson  <andersca@apple.com>

        Don't allow plug-ins to override image types for <embed> elements
        https://bugs.webkit.org/show_bug.cgi?id=149979

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::objectContentType):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2015-10-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Bump Version/X in user agent
        https://bugs.webkit.org/show_bug.cgi?id=150013

        Reviewed by Csaba Osztrogonác.

        EFL port needs to ensure maximum compatibility with existing web sites.
        Thus version number needs to be bumped from 5.0 to 8.0 as GTK port.

        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::standardUserAgent):

2015-10-10  Dan Bernstein  <mitz@apple.com>

        [iOS] Remove unnecessary iOS version checks
        https://bugs.webkit.org/show_bug.cgi?id=150002

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::AccessibilityProcessSuspendedNotification):
        * Platform/spi/ios/SafariServicesSPI.h:
        * Platform/spi/ios/UIKitSPI.h:
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformTouchPoint::WebKit2PlatformTouchPoint):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::extractWebTouchPoint):
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/ios/WebPlatformTouchPointIOS.cpp:
        (WebKit::WebPlatformTouchPoint::encode):
        (WebKit::WebPlatformTouchPoint::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mayAutomaticallyShowVideoPictureInPicture]):
        (shouldAllowPictureInPictureMediaPlayback):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (-[WKSwipeTransitionController gestureRecognizerForInteractiveTransition:WithTarget:action:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _ensureFormAccessoryView]):
        (-[WKContentView webSelectionAssistant]):
        (-[WKContentView selectionInteractionAssistant]):
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::create):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (photoLibraryIcon):
        (cameraIcon):
        (fallbackIconForFile):
        (iconForImageFile):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2015-10-10  Dan Bernstein  <mitz@apple.com>

        [iOS] Remove project support for iOS 8
        https://bugs.webkit.org/show_bug.cgi?id=149993

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/BaseLegacyProcess.xcconfig:
        * Configurations/BaseXPCService.xcconfig:
        * Configurations/PluginProcessShim.xcconfig:
        * Configurations/SecItemShim.xcconfig:
        * Configurations/WebKit.xcconfig:
        * Configurations/WebKit2.xcconfig:
        * Configurations/WebProcessShim.xcconfig:

2015-10-09  Myles C. Maxfield  <mmaxfield@apple.com>

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

        Fixed in other repository.

        Reverted changesets:

        "Unreviewed, rolling out r190572, r190593, r190594, and r190639."
        https://bugs.webkit.org/show_bug.cgi?id=149897

2015-10-09  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Anders Carlsson.

        Remove unnecessary includes.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:

2015-10-09  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * CMakeLists.txt:
        * Shared/API/APIHitTestResult.cpp: Removed.
        * Shared/API/APIHitTestResult.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2015-10-09  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * UIProcess/API/APIHitTestResult.cpp: Copied from Shared/API/APIHitTestResult.cpp.
        * UIProcess/API/APIHitTestResult.h: Copied from Shared/API/APIHitTestResult.h.
        * UIProcess/mac/PageClientImpl.mm:

2015-10-09  Beth Dakin  <bdakin@apple.com>

        WKWebView needs SPI to customize immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=149939
        -and corresponding-
        rdar://problem/20016849

        Reviewed by Anders Carlsson.

        This patch breaks WebHitTestResult into two files. WebHiTestResultData 
        continues to live in the WebKit namespace and contains the old 
        WebHitTestResult::Data struct. The rest of WebHitTestResult is now 
        API::HitTestResult. The patch also adds _WKHitTestResult as Obj-C API to wrap 
        API::HitTestResult.

        Attempt to keep other ports happy with new files.
        * CMakeLists.txt:

        WebKit::WebHitTestResult no longer contains the Data struct and is now called 
        API::HitTestResult.
        * Shared/API/APIHitTestResult.cpp: Copied from Shared/WebHitTestResult.cpp.
        (API::HitTestResult::create):
        (WebKit::WebHitTestResult::create): Deleted.
        (WebKit::WebHitTestResult::Data::Data): Deleted.
        (WebKit::WebHitTestResult::Data::~Data): Deleted.
        (WebKit::WebHitTestResult::Data::encode): Deleted.
        (WebKit::WebHitTestResult::Data::decode): Deleted.
        (WebKit::WebHitTestResult::Data::platformEncode): Deleted.
        (WebKit::WebHitTestResult::Data::platformDecode): Deleted.
        (WebKit::WebHitTestResult::Data::elementBoundingBoxInWindowCoordinates): Deleted.
        * Shared/API/APIHitTestResult.h: Copied from Shared/WebHitTestResult.h.
        (API::HitTestResult::absoluteImageURL):
        (API::HitTestResult::absolutePDFURL):
        (API::HitTestResult::absoluteLinkURL):
        (API::HitTestResult::absoluteMediaURL):
        (API::HitTestResult::linkLabel):
        (API::HitTestResult::linkTitle):
        (API::HitTestResult::lookupText):
        (API::HitTestResult::isContentEditable):
        (API::HitTestResult::isDownloadableMedia):
        (API::HitTestResult::HitTestResult):
        (WebKit::WebHitTestResult::absoluteImageURL): Deleted.
        (WebKit::WebHitTestResult::absolutePDFURL): Deleted.
        (WebKit::WebHitTestResult::absoluteLinkURL): Deleted.
        (WebKit::WebHitTestResult::absoluteMediaURL): Deleted.
        (WebKit::WebHitTestResult::linkLabel): Deleted.
        (WebKit::WebHitTestResult::linkTitle): Deleted.
        (WebKit::WebHitTestResult::lookupText): Deleted.
        (WebKit::WebHitTestResult::isContentEditable): Deleted.
        (WebKit::WebHitTestResult::isDownloadableMedia): Deleted.
        (WebKit::WebHitTestResult::WebHitTestResult): Deleted.

        This is a new obj-c object that we can use for the modern immediate action 
        API.
        * Shared/API/Cocoa/_WKHitTestResult.h: Added.
        * Shared/API/Cocoa/_WKHitTestResult.mm: Added.
        (-[_WKHitTestResult dealloc]):
        (-[_WKHitTestResult absoluteImageURL]):
        (-[_WKHitTestResult absolutePDFURL]):
        (-[_WKHitTestResult absoluteLinkURL]):
        (-[_WKHitTestResult absoluteMediaURL]):
        (-[_WKHitTestResult linkLabel]):
        (-[_WKHitTestResult linkTitle]):
        (-[_WKHitTestResult lookupText]):
        (-[_WKHitTestResult isContentEditable]):
        (-[_WKHitTestResult elementBoundingBox]):
        (-[_WKHitTestResult copyWithZone:]):
        (-[_WKHitTestResult _apiObject]):

        _WKHitTestResult wraps API::HitTestResult.
        * Shared/API/Cocoa/_WKHitTestResultInternal.h: Added.
        (API::wrapper):
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):

        Since we want to use the same enum name for the new enum, use a #define instead of a typedef in the old C SPI. This should keep old clients working in the meantime.
        * Shared/API/c/WKImmediateActionTypes.h:

        WebHitTestResult::Data is now WebHitTestResultData.
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::webHitTestResultData):
        (WebKit::ContextMenuContextData::selectedText):

        Remove WebHitTestResult, and add WebHitTestResultData for the Data struct.
        * Shared/WebHitTestResult.cpp: Removed.
        * Shared/WebHitTestResult.h: Removed.
        * Shared/WebHitTestResultData.cpp: Added.
        (WebKit::WebHitTestResultData::WebHitTestResultData):
        (WebKit::WebHitTestResultData::~WebHitTestResultData):
        (WebKit::WebHitTestResultData::encode):
        (WebKit::WebHitTestResultData::decode):
        (WebKit::WebHitTestResultData::platformEncode):
        (WebKit::WebHitTestResultData::platformDecode):
        (WebKit::WebHitTestResultData::elementBoundingBoxInWindowCoordinates):
        * Shared/WebHitTestResultData.h: Added.
        * Shared/mac/WebHitTestResult.mm: Removed.
        * Shared/mac/WebHitTestResultData.mm: Copied from Shared/mac/WebHitTestResult.mm.
        (WebKit::WebHitTestResultData::platformEncode):
        (WebKit::WebHitTestResultData::platformDecode):
        (WebKit::WebHitTestResult::Data::platformEncode): Deleted.
        (WebKit::WebHitTestResult::Data::platformDecode): Deleted.

        WebHitTestResult::Data is now WebHitTestResultData.
        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::~ContextMenuClient):
        (API::ContextMenuClient::getContextMenuFromProposedMenu):
        (API::ContextMenuClient::customContextMenuItemSelected):
        (API::ContextMenuClient::contextMenuDismissed):
        (API::ContextMenuClient::showContextMenu):

        WebHitTestResult is now WebHitTestResult
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::runJavaScriptPrompt):
        (API::UIClient::setStatusText):
        (API::UIClient::mouseDidMoveOverElement):
        (API::UIClient::unavailablePluginButtonClicked):
        (API::UIClient::pinnedStateDidChange):
        (API::UIClient::didBeginTrackingPotentialLongMousePress):
        (API::UIClient::didRecognizeLongMousePress):
        (API::UIClient::didCancelTrackingPotentialLongMousePress):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKHitTestResult.cpp:
        (WKHitTestResultGetTypeID):
        (WKHitTestResultCopyAbsoluteImageURL):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient):
        (WKPageSetPageUIClient):

        New WKWebView SPI _immediateActionAnimationControllerForHitTestResult
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Attempts to keep other ports happy with the re-name.
        * UIProcess/API/efl/WebAccessibility.cpp:
        * UIProcess/API/gtk/WebKitContextMenuClient.cpp:
        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        (webkit_hit_test_result_class_init):
        (webkitHitTestResultCreate):
        (stringIsEqualToCString):
        (webkitHitTestResultCompare):
        * UIProcess/API/gtk/WebKitHitTestResultPrivate.h:
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewMakePermissionRequest):
        (webkitWebViewMouseTargetChanged):
        (contextMenuDismissed):
        (webkitWebViewPopulateContextMenu):
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:

        Re-name, and just use uint32_t for the old SPI.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didPerformImmediateActionHitTest:contentPreventsDefault:userData:]):
        (-[WKView _setDidMoveSwipeSnapshotCallback:]):
        (-[WKView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):
        * UIProcess/API/mac/WKViewInternal.h:

        PageClient will figure out whether to call into WKWebView or WKView for this 
        SPI.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::immediateActionAnimationControllerForHitTestResult):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::immediateActionAnimationControllerForHitTestResult):

        WebKit::WebHitTestResult::Data is now WebKit::WebHitTestResultData.
        * UIProcess/WebPageProxy.messages.in:

        WKImmediateActionController calls through to WebPageProxy which calls to 
        PageClient, which figures out which API to call. Also cache the type as a 
        uint32_t
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _updateImmediateActionItem]):

        WebHitTestResult::Data is now WebHitTestResultData.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::platformInitializeShareMenuItem):

        New files!
        * WebKit2.xcodeproj/project.pbxproj:

        Deal with the #define situation for the enum.
        * WebKit2Prefix.h:

        New names for things. WebHitTestResult::Data -> WebHitTestResultData
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::pointInLayoutSpaceForPointInWindowSpace):
        (WebKit::PDFPlugin::lookupTextAtLocation):
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mouseDidMoveOverElement):
        (WebKit::WebChromeClient::didBeginTrackingPotentialLongMousePress):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):

2015-10-09  Anders Carlsson  <andersca@apple.com>

        Remove two unused WKFrame functions
        https://bugs.webkit.org/show_bug.cgi?id=149958

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCopyChildFrames): Deleted.
        (WKFrameGetParentFrame): Deleted.
        * UIProcess/API/C/WKFrame.h:

2015-10-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Format string issues in NetworkCache.cpp
        https://bugs.webkit.org/show_bug.cgi?id=149867

        Reviewed by Csaba Osztrogonác.

        Cast enums to ints before printing them to placate GCC's -Wformat.

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

2015-10-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Format string issue in WebResourceLoadScheduler.cpp
        https://bugs.webkit.org/show_bug.cgi?id=149868

        Reviewed by Csaba Osztrogonác.

        Cast enums to ints before printing them to placate GCC's -Wformat.

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

2015-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Stop using a nested main loop for popup menus
        https://bugs.webkit.org/show_bug.cgi?id=149920

        Reviewed by Sergio Villar Senin.

        WebPageProxy used to expect the popup menus to run in a nested
        main loop and invalidated the menu right after showing it. But
        this is no longer the case, so there's no reason to keep using
        the nested main loop.

        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::~WebPopupMenuProxyGtk):
        (WebKit::WebPopupMenuProxyGtk::cancelTracking):
        (WebKit::WebPopupMenuProxyGtk::menuItemActivated):
        (WebKit::WebPopupMenuProxyGtk::WebPopupMenuProxyGtk): Deleted.
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu): Deleted.
        (WebKit::WebPopupMenuProxyGtk::shutdownRunLoop): Deleted.
        (WebKit::WebPopupMenuProxyGtk::menuUnmapped): Deleted.
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:
        (WebKit::WebPopupMenuProxyGtk::setActiveItem): Deleted.

2015-10-07  Anders Carlsson  <andersca@apple.com>

        Add API for getting a group identifier from a bundle page
        https://bugs.webkit.org/show_bug.cgi?id=149902

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyGroupIdentifier):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2015-10-07  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r190678 to fix GTK and EFL builds.

        * WebProcess/InjectedBundle/efl/InjectedBundleEfl.cpp:
        (WebKit::InjectedBundle::setBundleParameters):
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::setBundleParameters):

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

        Unreviewed, rolling out r190572, r190593, r190594, and
        r190639.
        https://bugs.webkit.org/show_bug.cgi?id=149897

        Breaks Mavericks build (Requested by litherum on #webkit).

        Reverted changesets:

        "Allow WKRetainPtrs to be used as keys in hashing data
        structures"
        https://bugs.webkit.org/show_bug.cgi?id=149762
        http://trac.webkit.org/changeset/190572

        "REGRESSION(189668?): http/tests/notifications/events.html
        flakily asserts or times out"
        https://bugs.webkit.org/show_bug.cgi?id=149218
        http://trac.webkit.org/changeset/190593

        "Prospective Mavericks build fix."
        http://trac.webkit.org/changeset/190594

        "Post-review cleanup after r190572."
        http://trac.webkit.org/changeset/190639

2015-10-07  Anders Carlsson  <andersca@apple.com>

        Provide a way to get a WKFrameInfoRef from a WKFrameRef
        https://bugs.webkit.org/show_bug.cgi?id=149896
        rdar://problem/23016081

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCreateFrameInfo):
        * UIProcess/API/C/WKFrame.h:

2015-10-07  Anders Carlsson  <andersca@apple.com>

        Add unreachable URL to _WKObservablePageState
        https://bugs.webkit.org/show_bug.cgi?id=149893
        <rdar://problem/23017235>
 
        Reviewed by Dan Bernstein.

        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
        (-[WKObservablePageState unreachableURL]):

2015-10-07  Anders Carlsson  <andersca@apple.com>

        Add -[WKProcessPool _setObjectsForBundleParametersWithDictionary:]
        https://bugs.webkit.org/show_bug.cgi?id=149887

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setObjectsForBundleParametersWithDictionary:]):
        Copy the dictionary, archive it, and set the values on the UI side bundle parameter data struct.

        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        Add new SPI.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm:
        (-[WKWebProcessBundleParameters setParameter:forKey:]):
        We can just call setValue:forKey: on the dictionary; it will do the right thing if value is nil.

        (-[WKWebProcessBundleParameters setParametersForKeyWithDictionary:]):
        Enumerate the dictionary and call setValue:forKey: on each key/value pair.

        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::setBundleParameter):
        If we fail to unarchive a parameter, don't set it to null.

        (WebKit::InjectedBundle::setBundleParameters):
        Unarchive the dictionary and update the bundle parameters.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setInjectedBundleParameters):
        Call the injected bundle.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Add new message.

2015-10-06  Anders Carlsson  <andersca@apple.com>

        Expose the bundle parameter object on WKBundleRef
        https://bugs.webkit.org/show_bug.cgi?id=149860

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm:
        (-[WKWebProcessBundleParameters description]):
        Add a description that includes the parameters.

        * WebProcess/InjectedBundle/API/c/mac/WKBundleMac.h:
        * WebProcess/InjectedBundle/API/c/mac/WKBundleMac.mm:
        (WKBundleGetParameters):
        Add getter.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize):
        Make sure to decode the bundle parameters before calling out to the bundle.

2015-10-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add autocleanups
        https://bugs.webkit.org/show_bug.cgi?id=149588

        Reviewed by Darin Adler.

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitAutocleanups.h: Added.
        * UIProcess/API/gtk/webkit2.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtensionAutocleanups.h: Added.
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:

2015-10-06  Anders Carlsson  <andersca@apple.com>

        Try to fix the 32-bit build.

        * UIProcess/API/C/mac/WKPagePrivateMac.mm:

2015-10-06  Anders Carlsson  <andersca@apple.com>

        WKPage needs to expose a KVO-compliant object, similar to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=149851
        rdar://problem/22382022

        Reviewed by Dan Bernstein.

        Move the PageLoadStateObserver object from WKBrowsingContextController out into a separate file and make it
        work with any Objective-C object. Use it in WKObservablePageState and add a WKPageCreateObservableState function.

        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/API/C/mac/WKPagePrivateMac.mm: Renamed from Source/WebKit2/UIProcess/API/C/mac/WKPagePrivateMac.cpp.
        (-[WKObservablePageState initWithPage:]):
        (-[WKObservablePageState dealloc]):
        (-[WKObservablePageState isLoading]):
        (-[WKObservablePageState title]):
        (-[WKObservablePageState URL]):
        (-[WKObservablePageState hasOnlySecureContent]):
        (-[WKObservablePageState estimatedProgress]):
        (WKPageCreateObservableState):
        (WKPageGetProcessIdentifier):
        (WKPageIsURLKnownHSTSHost):
        * UIProcess/API/Cocoa/PageLoadStateObserver.h: Added.
        (WebKit::PageLoadStateObserver::PageLoadStateObserver):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (PageLoadStateObserver::PageLoadStateObserver): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2015-10-06  Daniel Bates  <dbates@webkit.org>

        Enable XSLT when building WebKit for iOS using the public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=149827

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:

2015-10-06  Emanuele Aina  <emanuele.aina@collabora.com>

        Fix ENABLE_OPENGL=OFF builds
        https://bugs.webkit.org/show_bug.cgi?id=146511

        Reviewed by Darin Adler.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseDraw):
        (webkitWebViewBaseDidRelaunchWebProcess):
        Replace USE(TEXTURE_MAPPER_GL) with USE(TEXTURE_MAPPER) around
        webkitWebViewRenderAcceleratedCompositingResults()
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::DrawingArea):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        Replace USE(TEXTURE_MAPPER_GL) with USE(TEXTURE_MAPPER) around
        setNativeSurfaceHandleForCompositing().
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):
        Default to no AC if no GL support has been built.
        * WebProcess/WebPage/DrawingArea.messages.in:
        Replace USE(TEXTURE_MAPPER_GL) with USE(TEXTURE_MAPPER) around
        SetNativeSurfaceHandleForCompositing.
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        Replace USE(TEXTURE_MAPPER_GL) with USE(TEXTURE_MAPPER) around
        setNativeSurfaceHandleForCompositing().
        (WebKit::DrawingAreaImpl::setNativeSurfaceHandleForCompositing):
        Force setAcceleratedCompositingEnabled() only if a LayerTreeHost
        implementation is available, to avoid crashing when building without
        any GL support.

2015-10-06  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r190611.

        * CMakeLists.txt:

2015-10-06  Alex Christensen  <achristensen@webkit.org>

        Report error when main resource is blocked by content blocker
        https://bugs.webkit.org/show_bug.cgi?id=149719
        rdar://problem/21970595

        Reviewed by Brady Eidson.

        * Shared/API/c/WKErrorRef.h:
        * WebProcess/WebCoreSupport/WebErrors.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::blockedError):
        (WebKit::WebFrameLoaderClient::blockedByContentBlockerError):
        (WebKit::WebFrameLoaderClient::cannotShowURLError):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp:
        (WebKit::blockedError):
        (WebKit::blockedByContentBlockerError):
        (WebKit::cannotShowURLError):
        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:
        (WebKit::blockedError):
        (WebKit::blockedByContentBlockerError):
        (WebKit::cannotShowURLError):
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::blockedError):
        (WebKit::blockedByContentBlockerError):
        (WebKit::cannotShowURLError):
        Make a new error type for loads that were blocked by a content blocker.

2015-10-05  Jer Noble  <jer.noble@apple.com>

        [iOS] REGRESSION(r190434): Media continues to play when locking screen
        https://bugs.webkit.org/show_bug.cgi?id=149822

        Reviewed by Brent Fulgham.

        Pass through isSuspendedUnderLock when notifying the WebPage that the
        applicationWillEnterForeground, and pass that boolean in the userInfo of the
        WebUIApplicationWillEnterForegroundNotification.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationWillEnterForeground):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationWillEnterForeground):

2015-10-05  Anders Carlsson  <andersca@apple.com>

        Get rid of some dead code
        https://bugs.webkit.org/show_bug.cgi?id=149825

        Reviewed by Tim Horton.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didDraw): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didDraw): Deleted.
        * UIProcess/WebPageProxy.h:

2015-10-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Prospective Mavericks build fix.

        Unreviewed.

        * UIProcess/API/cpp/WKRetainPtr.h:

2015-10-05  Beth Dakin  <bdakin@apple.com>

        Compress snapshots on iOS
        https://bugs.webkit.org/show_bug.cgi?id=149814
        -and corresponding-
        rdar://problem/22976230

        Reviewed by Simon Fraser.

        Compress the snapshot.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):

        Since the snapshots are converted to YUV asynchronously, it is possible to 
        get here and have a snapshot that does not yet have an image, so we have to 
        relax this constraint.
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::recordSnapshot):

2015-10-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow WKRetainPtrs to be used as keys in hashing data structures
        https://bugs.webkit.org/show_bug.cgi?id=149762

        Reviewed by Anders Carlsson.

        Use RefPtr as a model.

        * UIProcess/API/cpp/WKRetainPtr.h:
        (WebKit::WKRetainPtr::WKRetainPtr):
        (WebKit::WKRetainPtr::isHashTableDeletedValue):
        (WebKit::WKRetainPtr::hashTableDeletedValue):
        (WTF::HashTraits<WKRetainPtr<P>>::emptyValue):
        (WTF::HashTraits<WKRetainPtr<P>>::peek):

2015-10-05  Enrica Casucci  <enrica@apple.com>

        Cannot select certain text on Wikipedia homepage even when zoomed in.
        https://bugs.webkit.org/show_bug.cgi?id=149758
        rdar://problem/22407947

        Reviewed by Dan Bernstein.

        Several functions that handle gestures for text selection are used for both
        editable and non editable content. When used on editable content, the point
        where the gesture occurs needs to be constrained within the boundaries of the
        editable element. In the WebProcess we decide whether to constrain the point or not only based
        on the presence of the assisted node.
        That unfortunately does not guarantee that the user is actually editing the element,
        but only that the element is focused. Since the knowledge about the interaction exists reliably
        in the UI process, this patch adds a parameter to each gesture handler that tries to clip
        the point, to indicate whether the user is actually interacting with the element so that
        in the WebProcess the assisted node information can be used to constrain the point.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::deviceOrientation):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _isInteractingWithAssistedNode]):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:]):
        (-[WKContentView selectPositionAtPoint:completionHandler:]):
        (-[WKContentView selectPositionAtBoundary:inDirection:fromPoint:completionHandler:]):
        (-[WKContentView selectTextWithGranularity:atPoint:completionHandler:]):
        (-[WKContentView updateSelectionWithExtentPoint:completionHandler:]):
        (-[WKContentView updateSelectionWithExtentPoint:withBoundary:completionHandler:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::selectTextWithGranularityAtPoint):
        (WebKit::WebPageProxy::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::selectPositionAtPoint):
        (WebKit::WebPageProxy::updateSelectionWithExtentPoint):
        (WebKit::WebPageProxy::updateSelectionWithExtentPointAndBoundary):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::visiblePositionInFocusedNodeForPoint):
        (WebKit::WebPage::selectPositionAtPoint):
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPage::rangeForGranularityAtPoint):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::WebPage::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPage::updateSelectionWithExtentPoint):

2015-10-05  Antti Koivisto  <antti@apple.com>

        Remove CancelResourceLoader message
        https://bugs.webkit.org/show_bug.cgi?id=149801

        Reviewed by Andreas Kling.

        It has no clients.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::messageSenderDestinationID):
        (WebKit::WebResourceLoader::detachFromCoreLoader):
        (WebKit::WebResourceLoader::cancelResourceLoader): Deleted.
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

2015-10-03  Ricky Mondello  <rmondello@apple.com>

        "Plug-in is blocked" message doesn't draw correctly
        https://bugs.webkit.org/show_bug.cgi?id=149741
        <rdar://problem/22920949>

        Patch by Conrad Shultz and Ricky Mondello.

        Reviewed by Anders Carlsson.

        If a WebKit client sets plug-in X to not be visible to the web, that doesn't mean we shouldn't consult
        that plug-in when determining what kind of object type an object is. Properly classifying a non-web-visible
        Netscape plug-in as such allows its bounds to properly measured, allowing it to be drawn properly.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::objectContentType): Use PluginData's supportsMimeType, rather than its
            supportsWebVisibleMimeType, when determining the ObjectContentType for a MIME type on a url.

2015-10-02  Enrica Casucci  <enrica@apple.com>

        Text selection is inaccurate in Wikipedia pages when starting navigation from wikipedia.org.
        https://bugs.webkit.org/show_bug.cgi?id=149756
        rdar://problem/22332409

        Reviewed by Tim Horton.

        When loading a new document into the same WebPage object, we need
        to clear the assisted node, since there is no guarantee that the
        node will be blurred. The bug is caused by the use of a stale
        assisted node to constrain the point where the gesture occurs.
        A fix for this problem was landed in http://trac.webkit.org/changeset/179885
        where the cleanup was added when FrameLoaderClient::detach2 was called.
        This method doesn't seem to be called any longer for the main frame,
        so the correct solution is to add the cleanup to didCommitLoad in WebPage.
        I've also added some checks to webSelectionsRects and selectedTextRange to avoid
        the use of postLayoutData when the selection is none.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView webSelectionRects]):
        (-[WKContentView selectedTextRange]):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2): Removed call to resetAssistedNodeForFrame.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad): Added call to resetAssistedNodeForFrame.

2015-10-02  Alex Christensen  <achristensen@webkit.org>

        Reloading without content blockers doesn't apply to resource loads after the main frame finishes
        https://bugs.webkit.org/show_bug.cgi?id=149430
        rdar://problem/22742222

        Reviewed by Geoffrey Garen.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createDocumentLoader):
        Copy the state of whether content extensions are disabled from the Page to the DocumentLoader
        when making a DocumentLoader.

2015-10-02  Antoine Quint  <graouts@apple.com>

        popstate is fired at the wrong time on load
        https://bugs.webkit.org/show_bug.cgi?id=94265

        Reviewed by Darin Adler.

        Ensure we have a valid page before trying to get to its drawingArea as this could lead
        to a crash as observed with fast/loader/stateobjects/pushstate-object-types.html.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::restoreViewState):

2015-10-01  Antti Koivisto  <antti@apple.com>

        Network cache: Subresource referer header wrong after cached redirect
        https://bugs.webkit.org/show_bug.cgi?id=149709
        rdar://problem/22917174

        Reviewed by Chris Dumez.

        If a main resource is loaded from a cache entry that involved redirects the document
        will end up setting the Referer-headers of the subresources to the request URL not the redirected URL

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):

            If a cache entry involved a redirect synthesize a minimal willSendRequest message so that WebCore side
            runs through the same code paths as when receiving a redirect from network.

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

        [GTK] Websites with invalid auth header keep loading forever
        https://bugs.webkit.org/show_bug.cgi?id=149710

        Reviewed by Martin Robinson.

        Do not show the remember credentials checkbutton in the auth
        dialog if the realm is empty.

        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (webkitAuthenticationDialogInitialize):

2015-09-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r188331: "NetworkProcess: DNS prefetch happens in the Web Process"
        <rdar://problem/22560715>

        Speculative roll out of r188331 as we had a ~2.5% PLT regression around
        the time it landed and it seems the most likely culprit. I'll reland if
        the perf bots do not recover after the roll out.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp:
        (webkitWebExtensionDidReceiveMessage):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary):
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:

2015-09-30  Timothy Horton  <timothy_horton@apple.com>

        Compute document marker rects at use time instead of paint time
        https://bugs.webkit.org/show_bug.cgi?id=149643

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didInvalidateDocumentMarkerRects):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Plumb the notification about invalidated document marker rects through to FindController.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        Make a document-relative PageOverlay, so that we get fast scrolling.

        (WebKit::FindController::rectsForTextMatchesInRect):
        Return find hole rects in main-FrameView content coordinates, to 
        match the document-relative page overlay.
        We'll only return rects that intersect the passed-in rect, which
        comes from the dirty rect passed to drawRect.

        (WebKit::FindController::drawRect):
        Inflate the dirty rect by the border width so that we hit all relevant
        markers in each tile. Otherwise, we would end up missing the border of a marker
        that touched the edge of a tile.

        (WebKit::FindController::didInvalidateDocumentMarkerRects):
        Repaint (for now, the entire overlay) when document marker rects change.

        * WebProcess/WebPage/FindController.h:

2015-09-30  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Build error with -DENABLE_SPELLCHECK=OFF
        https://bugs.webkit.org/show_bug.cgi?id=146904

        Reviewed by Carlos Garcia Campos.

        Add ifdef guards to allow building when SPELLCHECK is not enabled.

        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        (WebKit::TextChecker::requestCheckingOfString):
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::setSpellCheckingLanguages):
        (WebKit::TextChecker::loadedSpellCheckingLanguages):

2015-09-30  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Support HiDPI Properly in WebKitGtk+ with the TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=141782

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:

            Modified to create scaled size of window.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):
        (WebKit::LayerTreeHostGtk::deviceOrPageScaleFactorChanged):

            We should apply device scale factor to the root layer to apply
            the scale matrix before applying other transform matrices.

        (WebKit::LayerTreeHostGtk::deviceScaleFactor): Added.
        (WebKit::LayerTreeHostGtk::pageScaleFactor): Added.

2015-09-29  Daniel Bates  <dabates@apple.com>

        Make WebKit for iOS Simulator build with the public iOS 9 SDK
        https://bugs.webkit.org/show_bug.cgi?id=149652

        Reviewed by Simon Fraser.

        * Platform/spi/ios/SafariServicesSPI.h: Add definition for SFSafariViewController.
        * Platform/spi/ios/UIKitSPI.h: Add more SPI.
        * WebProcess/cocoa/WebProcessCocoa.mm: Include header pthreadSPI.h.

2015-09-29  Brady Eidson  <beidson@apple.com>

        Followup to "Move WebKit2 AsyncTask to WebCore CrossThreadTask."
        https://bugs.webkit.org/show_bug.cgi?id=149651

        Rubberstamped by Alex Christensen.

        * DatabaseProcess/DatabaseProcess.h: CrossThreadTask is in the WebCore namespace, not WebKit.
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h: Ditto.

2015-09-29  Brady Eidson  <beidson@apple.com>

        Move WebKit2 AsyncTask to WebCore CrossThreadTask.
        https://bugs.webkit.org/show_bug.cgi?id=149651

        Reviewed by Alex Christensen.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::ensureIndexedDatabaseRelativePathExists):
        (WebKit::DatabaseProcess::postDatabaseTask):
        (WebKit::DatabaseProcess::performNextDatabaseTask):
        (WebKit::DatabaseProcess::fetchWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::shutdown):
        (WebKit::UniqueIDBDatabase::shutdownBackingStore):
        (WebKit::UniqueIDBDatabase::getOrEstablishIDBDatabaseMetadata):
        (WebKit::UniqueIDBDatabase::openBackingStoreAndReadMetadata):
        (WebKit::UniqueIDBDatabase::openTransaction):
        (WebKit::UniqueIDBDatabase::beginTransaction):
        (WebKit::UniqueIDBDatabase::commitTransaction):
        (WebKit::UniqueIDBDatabase::resetTransaction):
        (WebKit::UniqueIDBDatabase::rollbackTransaction):
        (WebKit::UniqueIDBDatabase::postTransactionOperation):
        (WebKit::UniqueIDBDatabase::changeDatabaseVersion):
        (WebKit::UniqueIDBDatabase::createObjectStore):
        (WebKit::UniqueIDBDatabase::deleteObjectStore):
        (WebKit::UniqueIDBDatabase::clearObjectStore):
        (WebKit::UniqueIDBDatabase::createIndex):
        (WebKit::UniqueIDBDatabase::deleteIndex):
        (WebKit::UniqueIDBDatabase::putRecord):
        (WebKit::UniqueIDBDatabase::getRecord):
        (WebKit::UniqueIDBDatabase::openCursor):
        (WebKit::UniqueIDBDatabase::cursorAdvance):
        (WebKit::UniqueIDBDatabase::cursorIterate):
        (WebKit::UniqueIDBDatabase::count):
        (WebKit::UniqueIDBDatabase::deleteRange):
        (WebKit::UniqueIDBDatabase::openBackingStoreTransaction):
        (WebKit::UniqueIDBDatabase::beginBackingStoreTransaction):
        (WebKit::UniqueIDBDatabase::commitBackingStoreTransaction):
        (WebKit::UniqueIDBDatabase::resetBackingStoreTransaction):
        (WebKit::UniqueIDBDatabase::rollbackBackingStoreTransaction):
        (WebKit::UniqueIDBDatabase::changeDatabaseVersionInBackingStore):
        (WebKit::UniqueIDBDatabase::createObjectStoreInBackingStore):
        (WebKit::UniqueIDBDatabase::deleteObjectStoreInBackingStore):
        (WebKit::UniqueIDBDatabase::clearObjectStoreInBackingStore):
        (WebKit::UniqueIDBDatabase::createIndexInBackingStore):
        (WebKit::UniqueIDBDatabase::deleteIndexInBackingStore):
        (WebKit::UniqueIDBDatabase::putRecordInBackingStore):
        (WebKit::UniqueIDBDatabase::getRecordFromBackingStore):
        (WebKit::UniqueIDBDatabase::openCursorInBackingStore):
        (WebKit::UniqueIDBDatabase::advanceCursorInBackingStore):
        (WebKit::UniqueIDBDatabase::iterateCursorInBackingStore):
        (WebKit::UniqueIDBDatabase::countInBackingStore):
        (WebKit::UniqueIDBDatabase::deleteRangeInBackingStore):
        (WebKit::UniqueIDBDatabase::postMainThreadTask):
        (WebKit::UniqueIDBDatabase::performNextMainThreadTask):
        (WebKit::UniqueIDBDatabase::postDatabaseTask):
        (WebKit::UniqueIDBDatabase::performNextDatabaseTask):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-09-29  Chris Dumez  <cdumez@apple.com>

        Memory cache revalidations should refresh the network disk cache
        https://bugs.webkit.org/show_bug.cgi?id=149606

        Reviewed by Darin Adler.

        Previously, resource revalidations triggered by the memory cache would
        bypass the disk cache entirely because the requests are conditional. As
        a result, when the server responds with a 304, we were unable to update
        the headers (e.g. new expiration date) of the corresponding entry in
        the disk cache.

        This patch updates our disk cache implementation to not bypass the disk
        cache when the request is conditional. Instead, we look up the cached
        entry and force its revalidation from the network. If the server then
        returns a 304, we are now able to update the headers of this cached
        entry. In such case though, we let the 304 response through to WebCore
        unlike revalidations triggered by the disk cache.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeUseDecision):
        (WebKit::NetworkCache::makeRetrieveDecision):

2015-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        printing does not use minimum page zoom factor
        https://bugs.webkit.org/show_bug.cgi?id=108507

        Reviewed by Darin Adler.

        Add kWKSnapshotOptionsPrinting flag to indicate the snapshot
        should be generated in printing mode.

        * Shared/API/c/WKImage.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toSnapshotOptions):
        * Shared/ImageOptions.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::numberOfPages): Pass the frame as a
        reference instead of a pointer.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions): In case of printing,
        calculate the bitmap height based on the number of pages.
        (WebKit::WebPage::snapshotAtSize): In case of printing, use
        PrintContext::spoolAllPagesWithBoundaries() and return.

2015-09-28  Brent Fulgham  <bfulgham@apple.com>

        Expose 'geometryFlipped' state for debugging/logging purposes
        https://bugs.webkit.org/show_bug.cgi?id=149557

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::geometryFlipped): Added.
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2015-09-28  Brady Eidson  <beidson@apple.com>

        Add an IDB Server that can roundtrip a request back to the client.
        https://bugs.webkit.org/show_bug.cgi?id=149603

        Reviewed by Alex Christensen.

        * WebProcess/Databases/WebDatabaseProvider.h:

2015-09-28  Beth Dakin  <bdakin@apple.com>

        Heavy taps on links are sometimes interpreted as the preview gesture
        https://bugs.webkit.org/show_bug.cgi?id=149304
        -and corresponding-
        rdar://problem/22689258

        Rubber-stamped by Tim Horton.

        Rolling out this patch. We should try to fix this at the UIKit-level.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _interactionStoppedFromPreviewItemController:]):

2015-09-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Expose a WKWebView API for allowing programmatic focus to trigger node assistance
        https://bugs.webkit.org/show_bug.cgi?id=149567

        Reviewed by Darin Adler.

        Adds an API method to WKWebView that allows clients to override the default iOS behavior of not
        starting node assistance when programmatically focusing. Also fixes a bug caused by naively
        introducing the flag where the autofocus attribute could trigger node assistance before layout
        occurs, causing an ASSERT to fail in EditorState::postLayoutData.

        I fixed this issue by not assisting the node if the editor state is missing post layout data,
        instead deferring node assistance until layout has occurred.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Initializes the new node assistance flag to NO, which
            is the current default behavior.
        (-[WKWebView canAssistOnProgrammaticFocus]):
        (-[WKWebView setCanAssistOnProgrammaticFocus:]): New API method that allows clients to set node
            assistance behavior upon programmatic focus.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Added new node assistance flag to configuration.
        (-[WKWebViewConfiguration _canAssistOnProgrammaticFocus]):
        (-[WKWebViewConfiguration _setCanAssistOnProgrammaticFocus:]):
        * UIProcess/WebPageProxy.h: Added NodeAssistanceArguments struct.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]): Do not return
            early if the node assistance flag is set to allow programmatic focus.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree): After committing the layer tree, if we have deferred
            starting node assistance, immediately trigger node assistance.
        (WebKit::WebPageProxy::startAssistingNode): Defer starting node assistance if we have not yet repainted.
        (WebKit::WebPageProxy::stopAssistingNode): Also cancel any deferred node assistance.

2015-09-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r188639): [GTK] Several inspector tests started to time out in GTK+ bots after r188639
        https://bugs.webkit.org/show_bug.cgi?id=148569

        Reviewed by Darin Adler.

        * PlatformGTK.cmake: Add missing inspector files required for
        layout tests.

2015-09-25  Eric Carlson  <eric.carlson@apple.com>

        Clean up user media request internal API
        https://bugs.webkit.org/show_bug.cgi?id=149527

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKUserMediaPermissionRequest.cpp:
        (WKUserMediaPermissionRequestVideoDeviceUIDs): New, renamed from WKUserMediaPermissionRequestDeviceNamesVideo.
        (WKUserMediaPermissionRequestAudioDeviceUIDs): New, renamed from WKUserMediaPermissionRequestDeviceNamesAudio.
        (WKUserMediaPermissionRequestAllowBest): Deleted.
        (WKUserMediaPermissionRequestDeviceNamesVideo): Deleted.
        (WKUserMediaPermissionRequestDeviceNamesAudio): Deleted.
        (WKUserMediaPermissionRequestFirstVideoDeviceUID): Deleted.
        (WKUserMediaPermissionRequestFirstAudioDeviceUID): Deleted.
        * UIProcess/API/C/WKUserMediaPermissionRequest.h:

        * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp:
        (webkitUserMediaPermissionRequestAllow): Update for UserMediaRequest API change.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::createRequest): Get rid of the bool parameters.
          Switch audio/video parameter order to be consistent with everywhere else.
        (WebKit::UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision): Ditto.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy): Get rid of the bool parameters.
          Switch audio/video parameter order to be consistent with everywhere else.
        (WebKit::UserMediaPermissionRequestProxy::allow): Switch audio/video parameter order.
        (WebKit::UserMediaPermissionRequestProxy::getDeviceNameForUID): Deleted.
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::videoDeviceUIDs):
        (WebKit::UserMediaPermissionRequestProxy::audioDeviceUIDs):
        (WebKit::UserMediaPermissionRequestProxy::firstAudioDeviceUID):
        (WebKit::UserMediaPermissionRequestProxy::requiresAudio): Deleted.
        (WebKit::UserMediaPermissionRequestProxy::requiresVideo): Deleted.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): Get rid of the bool parameters.
          Switch audio/video parameter order to be consistent with everywhere else.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/WebPageProxy.messages.in: Ditto.

        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startRequest): Get rid of bool params, the device
          vectors have the same information.
        (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision): Switch audio/video
          parameter order to be consistent with everywhere else. deviceUIDVideo -> videoDeviceUID,
        deviceUIDAudio -> audioDeviceUID.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveUserMediaPermissionDecision): Switch audio/video parameter order.
        * WebProcess/WebPage/WebPage.h:

2015-09-25  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Add viewport tests and fix runUIScript() timing issues
        https://bugs.webkit.org/show_bug.cgi?id=149577

        Reviewed by Tim Horton.
        
        When calling testRunner.runUIScript() from a page load event, the script could run
        in the UI process before the current remote layer tree transaction had been handled
        there. This meant that runUIScript() could query state which was about to change.
        
        Fix by delaying the execution of the UI script until a layer tree transaction has
        been handled by the UI process, leveraging the existing DrawingAreaProxy::dispatchAfterEnsuringDrawing().
        
        This is done using a new C SPI function WKPageCallAfterNextPresentationUpdate(),
        which is mirrored in the Obj-C SPI as -_doAfterNextPresentationUpdate:.
        
        Move WKWebView SPI which is testing-related into a WKTesting category. It is expected
        that this will grow significantly.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCallAfterNextPresentationUpdate):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::callAfterNextPresentationUpdate):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing):

2015-09-25  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Media tests start to time out after a few days of bot uptime
        https://bugs.webkit.org/show_bug.cgi?id=149468

        Reviewed by Darin Adler.

        Make the fix work with WebKit2, and avoid touching user's media cache for WebKit1.

        When UI process is not sandboxed, inherit DIRHELPER_USER_DIR_SUFFIX from it.
        This means that during testing, WebContent uses a temporary directory of the form
        /private/var/folders/.../T/WebKitTestRunner-VKjmz0/com.apple.WebKit.WebContent.Development,
        instead of /private/var/folders/.../T/com.apple.WebKit.WebContent.Development+WebKitTestRunner.

        WebKit1 now also better respects a temporary directory of the form
        /private/var/folders/.../T/DumpRenderTree-VKjmz0, instead of the default, which
        makes CoreMedia put its cache inside it.

        As a result, almost everything is isolated per testing process, and deleted at the end.
        Same with cache directories. The only outliers that I know of are plug-in directories,
        which are per-process, but are not under the testing root, and thus aren't deleted.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::initializeSandbox):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::fromConnection):
        (WebKit::ChildProcessProxy::getLaunchOptions):
        (WebKit::ChildProcessProxy::connect):
        * Shared/ChildProcessProxy.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getExtraInitializationData):
        * Shared/SandboxInitializationParameters.h:
        (WebKit::SandboxInitializationParameters::sandboxProfile):
        (WebKit::SandboxInitializationParameters::setUserDirectorySuffix):
        (WebKit::SandboxInitializationParameters::userDirectorySuffix):
        (WebKit::SandboxInitializationParameters::setSystemDirectorySuffix): Deleted.
        (WebKit::SandboxInitializationParameters::systemDirectorySuffix): Deleted.
        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::getLaunchOptions):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getLaunchOptions):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):

2015-09-25  Beth Dakin  <bdakin@apple.com>

        Clicking on a data detected item inside a form control always pops up a map 
        on force touch trackpad
        https://bugs.webkit.org/show_bug.cgi?id=149559
        -and corresponding-
        rdar://problem/22826796

        Reviewed by Tim Horton.

        Look for Data Detected text for text nodes and HitTestResults that are over 
        text inside form controls.

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

2015-09-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] ASSERTION FAILED: !m_inUpdateBackingStoreState in DrawingAreaImpl::display() after DrawingAreaImpl::forceRepaint()
        https://bugs.webkit.org/show_bug.cgi?id=148956

        Reviewed by Žan Doberšek.

        This is because those tests call notifyDone in the onresize event
        handler. InjectedBundlePage::dump() always calls WKBundlePageForceRepaint()
        before dumping. When the view is resized DrawingAreaImpl::updateBackingStoreState()
        is called, so if the size has changed the FrameView::resize()
        method is called and all children are resized, so the onresize
        handlers happen at that point, before the
        m_inUpdateBackingStoreState is set to false again. For WTR we
        could probably just return early from froceReapaint() when
        m_inUpdateBackingStoreState is true, because in that case we know
        the layout is updated because of the resize and the actual display
        is not really needed. But the UI process can also request a force
        repaint, so we could wait until the backing store update is done
        and then force the repaint. For WTR it will happen after the
        dump, but it shouldn't be a problem.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::forceRepaint):
        (WebKit::DrawingAreaImpl::updateBackingStoreState):
        * WebProcess/WebPage/DrawingAreaImpl.h:

2015-09-24  Tim Horton  <timothy_horton@apple.com>

        Find hole drawn at subframe's 0x0 when a subframe find match is not rendered
        https://bugs.webkit.org/show_bug.cgi?id=149543

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::rectsForTextMatches):
        Don't add empty rects to the list. Later code will just inflate them
        and end up drawing a nonsensical find hole.

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

        Drop XPATH_NAMESPACE_NODE from Node::NodeType enum
        https://bugs.webkit.org/show_bug.cgi?id=149532

        Reviewed by Ryosuke Niwa.

        Drop XPATH_NAMESPACE_NODE from Node::NodeType enum as there is currently
        no way to construct such Node in WebKit. This avoid having to handle this
        Node type everywhere.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::WKDOMNodeClass): Deleted.

2015-09-24  Ryosuke Niwa  <rniwa@webkit.org>

        Ran sort-Xcode-project-file.

        * WebKit2.xcodeproj/project.pbxproj:

2015-09-23  Timothy Horton  <timothy_horton@apple.com>

        Link highlight rect is too rounded on blocks with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=149511

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (nsSizeForTapHighlightBorderRadius):
        (-[WKContentView _updateTapHighlight]):
        Scale the border radius from content to view coordinates, just like
        we do for the rects that WebKit returns us.

2015-09-22  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Add a file of pointer-lock to cmake ports
        https://bugs.webkit.org/show_bug.cgi?id=149453

        Reviewed by Csaba Osztrogonác.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::navigateToPDFLinkWithSimulatedClick): Fix a build break.

2015-09-22  Anders Carlsson  <andersca@apple.com>

        URL of page visited in private browsing still appears in Activity Monitor after page is closed
        https://bugs.webkit.org/show_bug.cgi?id=149475
        rdar://problem/22684521

        Reviewed by Dan Bernstein.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        Make sure to call updateActivePages after removing the page from the page map.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateActivePages):
        Don't include pages that have private browsing enabled.

2015-09-22  Tim Horton  <timothy_horton@apple.com>

        Make it more obvious when using an unaccelerated image buffer, and fix a few callers who do
        https://bugs.webkit.org/show_bug.cgi?id=149428

        Reviewed by Simon Fraser and Darin Adler.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp:
        (WebKit::ThreadSafeCoordinatedSurface::create):

2015-09-22  Andreas Kling  <akling@apple.com>

        [WK2][NetworkCache] New entry bodies remain in dirty memory after being written to disk.
        <https://webkit.org/b/149463>

        Reviewed by Antti Koivisto.

        Call msync(MS_ASYNC) on cache entry bodies after writing their data to a
        memory-mapped file. This turns the previously dirty memory into clean memory,
        reducing our effective footprint.

        I previously believed this would happen automatically when the kernel finds
        itself under memory pressure, around the same time as it starts dropping
        volatile pages. Turns out that's not the case. Even under considerable pressure,
        we never flush this memory to file. So let's take care of it ourselves.

        If this ends up generating more IO activity than we're comfortable with on some
        scenario, we can look at throttling.

        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::Data::mapToFile):

2015-09-22  Chris Dumez  <cdumez@apple.com>

        Drop support for legacy EntityReference DOM Node type
        https://bugs.webkit.org/show_bug.cgi?id=149348

        Reviewed by Darin Adler.

        Drop handling EntityReference Nodes.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::WKDOMNodeClass): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isAssistableElement):

2015-09-22  Commit Queue  <commit-queue@webkit.org>

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

        suspected cause of multiple regressions (Requested by kling on
        #webkit).

        Reverted changeset:

        "[JSC] Weak should only accept cell pointees."
        https://bugs.webkit.org/show_bug.cgi?id=148955
        http://trac.webkit.org/changeset/189616

2015-09-21  Timothy Horton  <timothy_horton@apple.com>

        Allow DataDetectors to pre-filter telephone number menu items
        https://bugs.webkit.org/show_bug.cgi?id=149444
        <rdar://problem/19286320>

        Reviewed by Sam Weinig.

        * Platform/mac/MenuUtilities.mm:
        (WebKit::menuItemForTelephoneNumber):
        (WebKit::menuForTelephoneNumber):
        Let DataDetectors know what kind of items we want, so that they can avoid
        some unnecessary work in cases where we were just going to throw away the items anyway.

2015-09-21  Gwang Yoon Hwang  <yoon@igalia.com>

        [Threaded Compositor] Modified to use reference of GraphicsContext instead of pointer
        https://bugs.webkit.org/show_bug.cgi?id=149399

        Reviewed by Darin Adler.

        This fixes build failure after r189144

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp:
        (WebKit::ThreadSafeCoordinatedSurface::paintToSurface):
        (WebKit::ThreadSafeCoordinatedSurface::beginPaint):
        (WebKit::ThreadSafeCoordinatedSurface::endPaint):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.h:

2015-09-21  Simon Fraser  <simon.fraser@apple.com>

        Add the ability for tests to run script in the UI process in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=149356

        Reviewed by Tim Horton.

        Expose a few private functions for testing.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2015-09-21  Tim Horton  <timothy_horton@apple.com>

        Layout milestones aren't synchronized with UI-side compositing transactions
        https://bugs.webkit.org/show_bug.cgi?id=149362

        Reviewed by Anders Carlsson.
        
        Because layout milestones are primarily used to synchronize things with
        the displayed layout/rendering of the page, they should fire at the same
        time as the contents of the view change.

        However, with UI-side compositing, the layer tree transaction will
        most likely come in *after* the layout milestones associated with its
        contents fire, breaking this synchronization.

        Instead, put the layout milestones inside the transaction and fire them
        immediately after it is committed in the UI process.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::setCallbackIDs):
        (WebKit::RemoteLayerTreeTransaction::newlyReachedLayoutMilestones):
        (WebKit::RemoteLayerTreeTransaction::setNewlyReachedLayoutMilestones):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::RemoteLayerTreeTransaction):
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        Add LayoutMilestones to the transaction.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didLayout):
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::renderingProgressDidChange):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        (WKPageSetPageNavigationClient):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::renderingProgressDidChange):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):
        Remove the UserData parameter from didLayout/renderingProgressDidChange,
        except for at the API level where we'll always pass null.
        Nobody uses UserData on didLayout, and we'll assert if any client sets it
        (and it won't get passed through to the UI process).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didLayoutForCustomContentProvider):
        Just call didLayout with the relevant milestones instead of reimplementing it.

        (WebKit::WebPageProxy::didLayout):
        * UIProcess/WebPageProxy.h:
        Make didLayout public.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        Let WebPage handle dispatching didLayout.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dispatchDidLayout):
        * WebProcess/WebPage/WebPage.h:
        Let the DrawingArea handle dispatching didLayout.
        If it doesn't want to handle it, we'll just do the normal thing
        and dispatch an async message.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        If we reach a new layout milestone, dispatch didLayout client/delegate callbacks.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::dispatchDidLayout):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::dispatchDidLayout):
        Queue up milestones as we reach them, and send them in the transaction.

2015-09-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Remove XHR_TIMEOUT compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=149260

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig:

2015-09-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] WebEditorClient::supportsGlobalSelection returns true under Wayland
        https://bugs.webkit.org/show_bug.cgi?id=149375

        Reviewed by Darin Adler.

        WebEditorClient::supportsGlobalSelection should return false when running under Wayland,
        since Wayland does not have any equivalent for PRIMARY or the concept of a global selection.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::supportsGlobalSelection):

2015-09-19  Dan Bernstein  <mitz@apple.com>

        Attempted build fix.

        * mac/postprocess-framework-headers.sh: Fixed an overzealous regular expression.

2015-09-18  Commit Queue  <commit-queue@webkit.org>

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

        Broke run-webkit-tests --pixel (Requested by ap on #webkit).

        Reverted changeset:

        "printing does not use minimum page zoom factor"
        https://bugs.webkit.org/show_bug.cgi?id=108507
        http://trac.webkit.org/changeset/189908

2015-09-18  Andy Estes  <aestes@apple.com>

        [iOS] did{Start,Finish}LoadForQuickLookDocumentInMainFrame is never called on WKNavigationDelegate
        https://bugs.webkit.org/show_bug.cgi?id=149360

        Reviewed by Tim Horton.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didStartLoadForQuickLookDocumentInMainFrame): Called on m_navigationDelegate if non-null.
        (WebKit::WebPageProxy::didFinishLoadForQuickLookDocumentInMainFrame): Ditto.

2015-09-18  Beth Dakin  <bdakin@apple.com>

        Snapshots broken on iOS
        https://bugs.webkit.org/show_bug.cgi?id=149354

        Reviewed by Tim Horton.

        We need to send the IOSurface to ViewSnapshot::create() for this to work.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):

2015-09-18  Chris Dumez  <cdumez@apple.com>

        Drop support for Entity Node type
        https://bugs.webkit.org/show_bug.cgi?id=149239

        Reviewed by Darin Adler.

        Stop handling the Entity node type.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:

2015-09-17  Brian Burg  <bburg@apple.com>

        ASSERT(!m_frontendRouter->hasLocalFrontend()) when running Web Inspector tests
        https://bugs.webkit.org/show_bug.cgi?id=149006
        <rdar://problem/22654257>
        <rdar://problem/22631369>

        Reviewed by Joseph Pecoraro.

        Stop using InspectorController to close the frontend page. Go through
        the FrontendClient instead. Reduce redundant code paths.

        This change seems to fix some recent crashes that were seen when
        closing Safari with Web Inspector open. These were caused by the frontend
        channel not being disconnected at the right time.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::inspectedPageDestroyed):
        (WebKit::WebInspectorClient::closeLocalFrontend): Deleted.
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::close):
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::establishConnection):

            Save a pointer to the frontend's InspectorController since we may
            need to use it while the page is being destructed and its getter
            is no longer accessible.

        (WebKit::WebInspectorUI::closeWindow):

            Explicitly remove the frontend client when closing the frontend.

        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::inspector):

            Allow clients to specify whether an inspector should be eagerly created.
            Without this, we may accidentally create an instance during teardown.

        * WebProcess/WebPage/WebPage.h:

2015-09-18  Emanuele Aina  <emanuele.aina@collabora.com>

        Fix build with --no-indexed-database after r189831
        https://bugs.webkit.org/show_bug.cgi?id=149342

        Reviewed by Csaba Osztrogonác.

        * WebProcess/Databases/WebDatabaseProvider.h:
        Add ENABLE(INDEXED_DATABASE) guard around supportsModernIDB().

2015-09-17  Beth Dakin  <bdakin@apple.com>

        Heavy taps on links are sometimes interpreted as the preview gesture
        https://bugs.webkit.org/show_bug.cgi?id=149304
        -and corresponding-
        rdar://problem/22689258

        Reviewed by Tim Horton.

        If the preview gesture starts and stop and less than 250 milliseconds have 
        passed, then call _attemptClickAtLocation to treat it as a normal tap.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _interactionStartedFromPreviewItemController:]):
        (-[WKContentView _interactionStoppedFromPreviewItemController:]):

2015-09-17  Tim Horton  <timothy_horton@apple.com>

        After restoring tabs, swipes back to fast loading pages hang for 3 seconds
        https://bugs.webkit.org/show_bug.cgi?id=148764
        <rdar://problem/22568860>

        Reviewed by Beth Dakin.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        Don't wait for the render tree size threshold if we don't have one.

2015-09-17  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (r189287): 2.5% PLT regression
        https://bugs.webkit.org/show_bug.cgi?id=149277
        <rdar://problem/22657219>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        Don't take an extra unused snapshot.

2015-09-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Crash in WebKit::BackingStore::createBackend running under Wayland
        https://bugs.webkit.org/show_bug.cgi?id=147453

        Reviewed by Carlos Garcia Campos.

        Except when running on X11, this function always crashes if called before the web view is
        realized, as gdk_window_create_similar_surface will return null in that case. Avoid this by
        simply realizing the widget before calling that.

        Thanks to Carlos Garnacho for some debugging help.

        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createBackend):

2015-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        printing does not use minimum page zoom factor
        https://bugs.webkit.org/show_bug.cgi?id=108507

        Reviewed by Darin Adler.

        Add kWKSnapshotOptionsPrinting flag to indicate the snapshot
        should be generated in printing mode.

        * Shared/API/c/WKImage.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toSnapshotOptions):
        * Shared/ImageOptions.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::numberOfPages): Pass the frame as a
        reference instead of a pointer.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions): In case of printing,
        calculate the bitmap height based on the number of pages.
        (WebKit::WebPage::snapshotAtSize): In case of printing, use
        PrintContext::spoolAllPagesWithBoundaries() and return.

2015-09-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix common typo "supress" => "suppress"
        https://bugs.webkit.org/show_bug.cgi?id=149199

        Reviewed by Gyuyoung Kim.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):

2015-09-16  Dan Bernstein  <mitz@apple.com>

        [iOS] Inline implementation of -[WKImagePreviewViewController previewActions]
        https://bugs.webkit.org/show_bug.cgi?id=149224

        Reviewed by Tim Horton.

        * Platform/spi/ios/UIKitSPI.h: Declare UIViewControllerPreviewAction and its factory method.
        * UIProcess/WKImagePreviewViewController.mm:
        (-[WKImagePreviewViewController previewActions]): Moved here.

2015-09-16  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Allow reading from SubmitDiagInfo.domains in Networking process
        https://bugs.webkit.org/show_bug.cgi?id=149176
        rdar://problem/22483680

        Reviewed by Darin Adler.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2015-09-16  Dan Bernstein  <mitz@apple.com>

        [iOS] Unifiy WebKit2PlatformTouchPoint definition
        https://bugs.webkit.org/show_bug.cgi?id=149221

        Reviewed by Darin Adler.

        * Shared/WebEventConversion.cpp:
        (WebKit::touchEventType):
        (WebKit::WebKit2PlatformTouchPoint::WebKit2PlatformTouchPoint):

2015-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web Process crash recovery no longer works
        https://bugs.webkit.org/show_bug.cgi?id=149064

        Reviewed by Žan Doberšek.

        After a web process crash the new DrawingArea is never resized, so
        nothing is rendered into the web view.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDidRelaunchWebProcess): Queue a widget resize to ensure
        the new DrawingAreaProxy is resized.

2015-09-15  Ryosuke Niwa  <rniwa@webkit.org>

        Add ShadowRoot interface and Element.prototype.attachShadow
        https://bugs.webkit.org/show_bug.cgi?id=149187

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

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

        Add empty IDBFactory implementation for Modern IDB.
        https://bugs.webkit.org/show_bug.cgi?id=149191

        Reviewed by Jer Noble.

        * WebProcess/Databases/WebDatabaseProvider.h:

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

        Move most IDB object encoding/decoding from WebKit2 to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=149152

        Reviewed by Alex Christensen.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<IDBDatabaseMetadata>::encode): Deleted.
        (IPC::ArgumentCoder<IDBDatabaseMetadata>::decode): Deleted.
        (IPC::ArgumentCoder<IDBIndexMetadata>::encode): Deleted.
        (IPC::ArgumentCoder<IDBIndexMetadata>::decode): Deleted.
        (IPC::ArgumentCoder<IDBKeyData>::encode): Deleted.
        (IPC::ArgumentCoder<IDBKeyData>::decode): Deleted.
        (IPC::ArgumentCoder<IDBKeyPath>::encode): Deleted.
        (IPC::ArgumentCoder<IDBKeyPath>::decode): Deleted.
        (IPC::ArgumentCoder<IDBKeyRangeData>::encode): Deleted.
        (IPC::ArgumentCoder<IDBKeyRangeData>::decode): Deleted.
        (IPC::ArgumentCoder<IDBObjectStoreMetadata>::encode): Deleted.
        (IPC::ArgumentCoder<IDBObjectStoreMetadata>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:

2015-09-14  Brady Eidson  <beidson@apple.com>

        Make the enum IDBKey::Type into a utility enum class.
        https://bugs.webkit.org/show_bug.cgi?id=149149

        Reviewed by Alex Christensen.

        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::putRecordInBackingStore):

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<IDBKeyData>::encode):
        (IPC::ArgumentCoder<IDBKeyData>::decode):

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

        WKWebView scroll deceleration rate is not being set properly
        https://bugs.webkit.org/show_bug.cgi?id=149145
        <rdar://problem/22064071>

        Reviewed by Simon Fraser.

        We are not currently setting the web view's deceleration rate to the correct preferred value because we
        are setting the decelerationRate property of the scrollView, which snaps input values to the closer of
        two predefined UIKit constants, UIScrollViewDecelerationRateFast and UIScrollViewDecelerationRateNormal.
        To fix this, we directly set the horizontal and vertical scroll deceleration factors to the preferred
        value.

        * UIProcess/API/Cocoa/WKWebView.mm: 
        (-[WKWebView scrollViewWillBeginDragging:]): Directly set the scroll view's deceleration factor without
                going through the decelerationRate property.

2015-09-14  Dan Bernstein  <mitz@apple.com>

        Consolidate touch event code dealing with force.

        Reviewed by Beth Dakin.

        * Shared/WebEvent.h:
        (WebKit::WebPlatformTouchPoint::state):
        (WebKit::WebPlatformTouchPoint::setForce):
        (WebKit::WebPlatformTouchPoint::force):
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::positionForCGPoint):
        (WebKit::NativeWebTouchEvent::extractWebTouchPoint):
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/ios/WebPlatformTouchPointIOS.cpp:
        (WebKit::WebPlatformTouchPoint::encode):
        (WebKit::WebPlatformTouchPoint::decode):

2015-09-14  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=149123

        Reviewed by Chris Dumez.

        * PlatformMac.cmake:
        Added some more sources.

2015-09-14  Dan Bernstein  <mitz@apple.com>

        [iOS] Stop importing WebKitAdditions/WKContentViewInteraction.mm
        https://bugs.webkit.org/show_bug.cgi?id=149127

        Reviewed by Beth Dakin.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):

2015-09-14  Brady Eidson  <beidson@apple.com>

        Rename current concrete IDB implementation to "Legacy".
        https://bugs.webkit.org/show_bug.cgi?id=149118

        Reviewed by Alex Christensen.

        * CMakeLists.txt:

2015-09-14  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Remove create() factory function in EvasGLContext and EvasGLSurface
        https://bugs.webkit.org/show_bug.cgi?id=149110

        Reviewed by Csaba Osztrogonác.

        It is not good implementation we support both create() factory function and public constructor.
        In EvasGLContext and EvasGLSurface cases, those have supported both. However create() factory is only
        used by EwkView. Thus let's remove the create() function, then EwkView creates EvasGLContext using
        std::make_unique<> directly.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::createGLSurface):

2015-09-13  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove all uses of PassRefPtr in crypto, storage, and history
        https://bugs.webkit.org/show_bug.cgi?id=149091

        Reviewed by Andreas Kling.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::storageArea):
        * WebProcess/Storage/StorageNamespaceImpl.h:

2015-09-13  Dan Bernstein  <mitz@apple.com>

        Define HAVE_LINK_PREVIEW in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=149099

        Reviewed by Sam Weinig.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/WKImagePreviewViewController.mm:
        * config.h:

2015-09-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Allow testing with the system language
        https://bugs.webkit.org/show_bug.cgi?id=148671

        Reviewed by Anders Carlsson and Alexey Proskuryakov.

        This patch adds two new SPI functions for setting and retrieving a vector of
        override languages to/from the WKContextConfiguration. The implementation of
        these functions holds state inside WebProcessPoolConfiguration. Then, when
        we launch a process, the WebProcessProxy will inject these override languages
        into the ProcessLauncher::LaunchOptions so that the ProcessLauncher can
        inject these languages into the XPC Bootstrap message. Then, in the Web
        Process's main(), the XPC Boostrap message is read, and the platform
        languages are set via NSUserDefaults setting a volatile domain.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        (main): Set the volatile domain with NSUserDefaults.
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h: Hold state for the override
        languages.
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCopyOverrideLanguages): SPI.
        (WKContextConfigurationSetOverrideLanguages): Ditto.
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService): Inject the languages into the XPC Bootstrap
        message.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions): Inject the override languages
        into the ProcessLauncher::LaunchOptions.

2015-09-12  Alexey Proskuryakov  <ap@apple.com>

        [iOS] Allow UDP networking
        https://bugs.webkit.org/show_bug.cgi?id=149081
        rdar://problem/22291743

        Reviewed by Sam Weinig.

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

2015-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract InspectorFrontendAPI dispatching from WebInspectorUI
        https://bugs.webkit.org/show_bug.cgi?id=149089

        Reviewed by Brian Burg.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.cpp: Added.
        (WebKit::WebInspectorFrontendAPIDispatcher::WebInspectorFrontendAPIDispatcher):
        (WebKit::WebInspectorFrontendAPIDispatcher::reset):
        (WebKit::WebInspectorFrontendAPIDispatcher::frontendLoaded):
        (WebKit::WebInspectorFrontendAPIDispatcher::dispatchCommand):
        (WebKit::WebInspectorFrontendAPIDispatcher::dispatchMessageAsync):
        (WebKit::WebInspectorFrontendAPIDispatcher::evaluateExpressionOnLoad):
        * WebProcess/WebPage/WebInspectorFrontendAPIDispatcher.h: Added.
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::WebInspectorUI):
        (WebKit::WebInspectorUI::establishConnection):
        (WebKit::WebInspectorUI::frontendLoaded):
        (WebKit::WebInspectorUI::setDockSide):
        (WebKit::WebInspectorUI::setDockingUnavailable):
        (WebKit::WebInspectorUI::showConsole):
        (WebKit::WebInspectorUI::showResources):
        (WebKit::WebInspectorUI::showMainResourceForFrame):
        (WebKit::WebInspectorUI::startPageProfiling):
        (WebKit::WebInspectorUI::stopPageProfiling):
        (WebKit::WebInspectorUI::didSave):
        (WebKit::WebInspectorUI::didAppend):
        (WebKit::WebInspectorUI::sendMessageToFrontend):
        (WebKit::WebInspectorUI::evaluateCommandOnLoad): Deleted.
        (WebKit::WebInspectorUI::evaluateExpressionOnLoad): Deleted.
        (WebKit::WebInspectorUI::evaluatePendingExpressions): Deleted.
        * WebProcess/WebPage/WebInspectorUI.h:
        (WebKit::WebInspectorUI::evaluateCommandOnLoad): Deleted.

2015-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move Already Generic Inspector Page Context Menu to Generic Setup
        https://bugs.webkit.org/show_bug.cgi?id=149088

        Reviewed by Brian Burg.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::getContextMenuFromProposedMenu):
        (WebKit::WebInspectorProxy::eagerlyCreateInspectorPage):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::getContextMenuFromProposedMenu): Deleted.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2015-09-12  Brian Burg  <bburg@apple.com>

        Web Inspector: disambiguate inspected/frontend controllers and pages in backend code
        https://bugs.webkit.org/show_bug.cgi?id=149071

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::inspectedPageDestroyed): Renamed.
        (WebKit::WebInspectorClient::openLocalFrontend): Renamed.
        (WebKit::WebInspectorClient::closeLocalFrontend): Renamed.
        (WebKit::WebInspectorClient::inspectorDestroyed): Deleted.
        (WebKit::WebInspectorClient::openInspectorFrontend): Deleted.
        (WebKit::WebInspectorClient::closeInspectorFrontend): Deleted.
        * WebProcess/WebCoreSupport/WebInspectorClient.h:

2015-09-11  Beth Dakin  <bdakin@apple.com>

        Another build fix.

        * UIProcess/mac/ViewSnapshotStore.h:
        (WebKit::ViewSnapshot::size):
        (WebKit::ViewSnapshot::imageSizeInBytes):

2015-09-11  Beth Dakin  <bdakin@apple.com>

        Still need view snapshotting code for non-IOSurface for the sim
        https://bugs.webkit.org/show_bug.cgi?id=149077

        Reviewed by Tim Horton.

        This fixes the simulator build.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _zoomToPoint:atScale:animated:]):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewSnapshotStore.h:
        (WebKit::ViewSnapshot::setDeviceScaleFactor):
        (WebKit::ViewSnapshot::deviceScaleFactor):
        (WebKit::ViewSnapshot::surface):
        (WebKit::ViewSnapshot::imageSizeInBytes):
        (WebKit::ViewSnapshot::size):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::singleton):
        (WebKit::ViewSnapshotStore::snapshottingContext):
        (WebKit::ViewSnapshotStore::didAddImageToSnapshot):
        (WebKit::ViewSnapshotStore::discardSnapshotImages):
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::~ViewSnapshot):
        (WebKit::ViewSnapshot::setSurface):
        (WebKit::ViewSnapshot::hasImage):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::asLayerContents):

2015-09-11  Beth Dakin  <bdakin@apple.com>

        Build fix

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):

2015-09-11  Beth Dakin  <bdakin@apple.com>

        Should use CARenderServerRenderLayerWithTransform for snapshots on iOS
        https://bugs.webkit.org/show_bug.cgi?id=149069
        -and corresponding-
        rdar://problem/19726953

        Reviewed by Tim Horton.

        This will let us own the backing IOSurface, which will let us share more code 
        with Mac.

        Use CARenderServerRenderLayerWithTransform
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        (-[WKWebView _zoomToPoint:atScale:animated:]):

        We can eliminate things needed for the slot-based API.
        * UIProcess/mac/ViewSnapshotStore.h:
        (WebKit::ViewSnapshot::setDeviceScaleFactor):
        (WebKit::ViewSnapshot::deviceScaleFactor):
        (WebKit::ViewSnapshot::surface):
        (WebKit::ViewSnapshot::imageSizeInBytes):
        (WebKit::ViewSnapshot::size):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::singleton):
        (WebKit::ViewSnapshotStore::didAddImageToSnapshot):
        (WebKit::ViewSnapshotStore::discardSnapshotImages):
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::~ViewSnapshot):
        (WebKit::ViewSnapshot::setSurface):
        (WebKit::ViewSnapshot::hasImage):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::asLayerContents):
        (WebKit::ViewSnapshotStore::snapshottingContext): Deleted.

2015-09-11  Andreas Kling  <akling@apple.com>

        [JSC] Weak should only accept cell pointees.
        <https://webkit.org/b/148955>

        Reviewed by Geoffrey Garen.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::finalize):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:

2015-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused files
        https://bugs.webkit.org/show_bug.cgi?id=149049

        Reviewed by Brian Burg.

        * WebProcess/WebPage/efl/WebInspectorEfl.cpp: Removed.
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp: Removed.

2015-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        WebInspectorUI should have a WebPage reference
        https://bugs.webkit.org/show_bug.cgi?id=149046

        Reviewed by Geoffrey Garen.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        * WebProcess/WebPage/WebInspectorUI.h:
        (WebKit::WebInspectorUI::page): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::inspectorUI):

2015-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: WebInspectorUI does not need to be an API::Object
        https://bugs.webkit.org/show_bug.cgi?id=149045

        Reviewed by Timothy Hatcher.

        * Shared/API/APIObject.h:
        * WebProcess/WebPage/WebInspectorUI.h:

2015-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused member in WebPage
        https://bugs.webkit.org/show_bug.cgi?id=149040

        Reviewed by Brian Burg.

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

2015-09-10  Daniel Bates  <dabates@apple.com>

        sendProcessWillSuspendImminently uses a wrong message flag
        https://bugs.webkit.org/show_bug.cgi?id=148995

        Reviewed by Alexey Proskuryakov.

        Remove use of flag IPC::InterruptWaitingIfSyncMessageArrives as it does not make
        sense when sending a sync message.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendProcessWillSuspendImminently):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendProcessWillSuspendImminently):

2015-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed build fix after r189572.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        Remove the const on the now static methods.

2015-09-10  Chris Dumez  <cdumez@apple.com>

        Node.appendChild(null) / replaceChild(null, null) / removeChild(null) / insertBefore(null, ref) should throw a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=148971
        <rdar://problem/22560883>
        <rdar://problem/22559225>

        Reviewed by Ryosuke Niwa.

        ContainerNode::appendChild() now takes a Ref<Node>&& parameter so we
        need to update the call sites.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        (WebKit::PDFPluginAnnotation::attach):
        (WebKit::PDFPluginAnnotation::~PDFPluginAnnotation):
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement):

2015-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make WebInspectorProxy inspectorURL path methods static
        https://bugs.webkit.org/show_bug.cgi?id=149021

        Reviewed by Brian Burg.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::didRelaunchInspectorPageProcess):
        (WebKit::isMainOrTestInspectorPage):
        (WebKit::decidePolicyForNavigationAction):
        (WebKit::WebInspectorProxy::eagerlyCreateInspectorPage):
        (WebKit::WebInspectorProxy::createInspectorPage):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):

2015-09-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove dead WebInspectorProxy related code
        https://bugs.webkit.org/show_bug.cgi?id=149019

        Reviewed by Timothy Hatcher.

        * UIProcess/API/C/mac/WKInspectorPrivateMac.h:
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter attachRight:]): Deleted.
        (-[WKWebInspectorProxyObjCAdapter attachBottom:]): Deleted.

2015-09-09  Anders Carlsson  <andersca@apple.com>

        Remove an unused NSString SPI constant
        https://bugs.webkit.org/show_bug.cgi?id=149009

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2015-09-09  Dan Bernstein  <mitz@apple.com>

        Updated availability annotations for iOS 9 and OS X El Capitan.

        Rubber-stamped by Anders Carlsson.

        * Shared/API/Cocoa/_WKRenderingProgressEvents.h:
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKErrorPrivate.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKSecurityOrigin.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.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/_WKDiagnosticLoggingDelegate.h:
        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKLayoutMode.h:
        * UIProcess/API/Cocoa/_WKOverlayScrollbarStyle.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:

2015-09-09  Alexey Proskuryakov  <ap@apple.com>

        fast/dom/rtl-scroll-to-leftmost-and-resize.html is a flaky timeout - IPC drops messages
        https://bugs.webkit.org/show_bug.cgi?id=148951

        Reviewed by Anders Carlsson.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForMessage): Don't modify m_waitingForMessage without holding
        a lock. This is not part of this fix, but seems necessary for correctness.
        (IPC::Connection::processIncomingMessage): Don't interrupt a wait that has already succeeded.

2015-09-08  Daniel Bates  <dabates@apple.com>

        [Mac] Expose Enable/Disable Accelerated Drawing in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=148980

        Reviewed by Alexey Proskuryakov.

        Expose SPI web preference to enable/disable- and query the state of- accelerated drawing
        so that we can toggle this setting in MiniBrowser on Mac.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _acceleratedDrawingEnabled]): Added.
        (-[WKPreferences _setAcceleratedDrawingEnabled:]): Added.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2015-09-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused file: WebInspectorFrontendClient.h
        https://bugs.webkit.org/show_bug.cgi?id=148979

        Reviewed by Brian Burg.

        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h: Removed.
        Unused now. WebInspectorUI subclasses InspectorFrontendClient itself.

2015-09-07  Andy Estes  <aestes@apple.com>

        [Mac] DebugRelease builds should link against libWebKitSystemInterfaceElCapitan.a on 10.11
        https://bugs.webkit.org/show_bug.cgi?id=148946
        <rdar://problem/22603981>

        Reviewed by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

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

        Leak in WebContextInjectedBundleClient::getInjectedBundleInitializationUserData
        https://bugs.webkit.org/show_bug.cgi?id=148769

        Fix suggested by Zan Dobersek.

        Reviewed by Darin Adler.

        * UIProcess/WebContextInjectedBundleClient.cpp:
        (WebKit::WebContextInjectedBundleClient::getInjectedBundleInitializationUserData):

2015-09-04  Brian Burg  <bburg@apple.com>

        Web Inspector: agents should send messages through FrontendRouter instead of FrontendChannel
        https://bugs.webkit.org/show_bug.cgi?id=148492

        Reviewed by Joseph Pecoraro.

        Stop using InspectorForwarding.h.

        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspectorUI.h:

2015-09-04  Brian Burg  <bburg@apple.com>

        Web Inspector: InspectorController should support multiple frontend channels
        https://bugs.webkit.org/show_bug.cgi?id=148538

        Reviewed by Joseph Pecoraro.

        Explicitly disconnect the frontend channel when closing the frontend.

        Rename createInspectorPage/closeFrontend to the symmetric and unambiguous
        {open,close}FrontendConnection in the WebInspector class.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::openInspectorFrontend):
        (WebKit::WebInspectorClient::closeInspectorFrontend):
        * WebProcess/WebCoreSupport/WebInspectorClient.h: Stop using a forwarded type.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openFrontendConnection):
        (WebKit::WebInspector::closeFrontendConnection):
        (WebKit::WebInspector::remoteFrontendConnected):
        (WebKit::WebInspector::remoteFrontendDisconnected):
        (WebKit::WebInspector::createInspectorPage): Deleted.
        (WebKit::WebInspector::closeFrontend): Deleted.
        * WebProcess/WebPage/WebInspector.h:

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

        [iOS] Disable backspace key navigation by default
        https://bugs.webkit.org/show_bug.cgi?id=148808

        Reviewed by Tim Horton.

        * Shared/WebPreferencesDefinitions.h: Defined DEFAULT_BACKSPACE_KEY_NAVIGATION_ENABLED as
          false on iOS, true elsewhere, and made it the default value of the
          backspaceKeyNavigationEnabled preference key.

2015-09-04  Beth Dakin  <bdakin@apple.com>

        Need to be able to test default behaviors on force click
        https://bugs.webkit.org/show_bug.cgi?id=148758

        Reviewed by Tim Horton.

        The hit test seems to return synchronously in WKTR, so we need to do the hit 
        test last before we clear state otherwise we will trample the hit test 
        result.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):

2015-09-03  Commit Queue  <commit-queue@webkit.org>

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

        Caused tons of crashes (Requested by cdumez on #webkit).

        Reverted changeset:

        "Web Inspector: InspectorController should support multiple
        frontend channels"
        https://bugs.webkit.org/show_bug.cgi?id=148538
        http://trac.webkit.org/changeset/189338

2015-09-03  Brian Burg  <bburg@apple.com>

        Web Inspector: InspectorController should support multiple frontend channels
        https://bugs.webkit.org/show_bug.cgi?id=148538

        Reviewed by Joseph Pecoraro.

        Explicitly disconnect the frontend channel when closing the frontend.

        Rename createInspectorPage/closeFrontend to the symmetric and unambiguous
        {open,close}FrontendConnection in the WebInspector class.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::openInspectorFrontend):
        (WebKit::WebInspectorClient::closeInspectorFrontend):
        * WebProcess/WebCoreSupport/WebInspectorClient.h: Stop using a forwarded type.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openFrontendConnection):
        (WebKit::WebInspector::closeFrontendConnection):
        (WebKit::WebInspector::remoteFrontendConnected):
        (WebKit::WebInspector::remoteFrontendDisconnected):
        (WebKit::WebInspector::createInspectorPage): Deleted.
        (WebKit::WebInspector::closeFrontend): Deleted.
        * WebProcess/WebPage/WebInspector.h:

2015-09-03  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Closing the Safari window when the Web Inspector is one of the other windows in split screen mode can cause the entire screen to go black
        https://bugs.webkit.org/show_bug.cgi?id=148777

        Reviewed by Brian Burg.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformDidClose):
        (WebKit::WebInspectorProxy::platformHide):
        (WebKit::WebInspectorProxy::platformAttach):
        Call close instead of orderOut: to make fullscreen and tile modes with Web Inspector work as expected.

2015-09-03  Brady Eidson  <beidson@apple.com>

        Move SecurityOriginData from WK2 to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=148739

        Reviewed by Tim Horton.

        This will be needed for upcoming IndexedDB work.

        * CMakeLists.txt:
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseProcess.messages.in:
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.cpp:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabaseIdentifier.h:
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        * Shared/WebCrossThreadCopier.cpp:
        * Shared/WebCrossThreadCopier.h:
        * Shared/WebsiteData/WebsiteData.cpp:
        * UIProcess/API/APINavigationClient.h:
        * UIProcess/API/APIUIClient.h:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        * UIProcess/Storage/StorageManager.cpp:
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/Storage/StorageManager.messages.in:
        * UIProcess/UserContent/WebScriptMessageHandler.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.messages.in:
        * UIProcess/WebCookieManagerProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.h:
        * WebProcess/Storage/StorageAreaMap.cpp:
        * WebProcess/UserContent/WebUserContentController.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2015-09-03  Tim Horton  <timothy_horton@apple.com>

        [Mac] Add support for testing swipes
        https://bugs.webkit.org/show_bug.cgi?id=148700

        Reviewed by Beth Dakin.

        * UIProcess/API/mac/WKView.mm:
        (takeWindowSnapshot):
        (-[WKView _takeViewSnapshot]):
        Fall back to the non-hardware snapshotting path if the hardware path fails,
        which usually happens if the view is fully off-screen (as in the case
        of WebKitTestRunner).

2015-09-02  Tim Horton  <timothy_horton@apple.com>

        Add a modern API way to know that the navigation gesture snapshot was removed, for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=148693

        Reviewed by Anders Carlsson.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didRemoveNavigationGestureSnapshot):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/API/C/WKPageNavigationClient.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::navigationGestureSnapshotWasRemoved):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::navigationGestureDidEnd):
        (WebKit::WebPageProxy::navigationGestureSnapshotWasRemoved):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didRemoveNavigationGestureSnapshot):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/CoordinatedGraphics/WebView.h:
        Add a callback for WKTR when the swipe snapshot is removed.

2015-09-02  Andreas Kling  <akling@apple.com>

        ScrollbarThemes should be returned by reference.
        <https://webkit.org/b/147551>

        Reviewed by Zalan Bujtas.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::paintControlForLayerInContext):

2015-09-02  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        REGRESSION(r188206): [EFL] Adjust scrollbar width to ewk_view_contents_size_get API test 
        https://bugs.webkit.org/show_bug.cgi?id=148701

        Reviewed by Csaba Osztrogonác.

        r188206 applied to use non-overlay scrollbar on EFL minibrowser. So we need to
        adjust scrollwidth to ewk_view_contents_size_get API test as well.

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

2015-09-02  Emanuele Aina  <emanuele.aina@collabora.com>

        Fix build with ENABLE(DATABASE_PROCESS) and !ENABLE(INDEXED_DATABASE)
        https://bugs.webkit.org/show_bug.cgi?id=146550

        Reviewed by Brady Eidson.

        Given that INDEXED_DATABASE at the moment is the only user of
        DATABASE_PROCESS, their guards got inevitably mixed up with various
        levels of consistency. Since the --no-indexed-database flag from
        build-webkit leaves DATABASE_PROCESS enabled, this resulted in build
        failures.

        * DatabaseProcess/DatabaseProcess.cpp:
        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        * Shared/Databases/DatabaseProcessCreationParameters.cpp:
        * Shared/Databases/DatabaseProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        Add missing ENABLE(INDEXED_DATABASE) guards and moved the
        misplaced ones.

        * DatabaseProcess/DatabaseProcess.h:
        Ditto, and also add a forward declaration for SecurityOriginData since
        with INDEXED_DATABASE off SecurityOriginData.h is no longer included
        by way of UniqueIDBDatabaseIdentifier.h.

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

        Web Inspector: opt the Inspector process out of page visibility-based process suppression when running tests
        https://bugs.webkit.org/show_bug.cgi?id=148686

        Reviewed by Timothy Hatcher.

        This may be the cause of debug test timeouts and high execution time variance
        that have been plaguing the bots. Process suppression shouldn't happen for
        inspector process during tests anyway, so it shouldn't hurt to flip this.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:

            The stated default here is incorrect, the default value is true.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _pageVisibilityBasedProcessSuppressionEnabled]): Added.
        (-[WKPreferences _setPageVisibilityBasedProcessSuppressionEnabled:]): Added.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2015-09-01  Alexey Proskuryakov  <ap@apple.com>

        Update sandbox after r179367
        https://bugs.webkit.org/show_bug.cgi?id=148683
        rdar://problem/21767401

        Reviewed by Darin Adler.

        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:

2015-08-26  Andy Estes  <aestes@apple.com>

        [Content Filtering] Determine navigation and content policy before continuing to filter a load
        https://bugs.webkit.org/show_bug.cgi?id=148506

        Reviewed by Brady Eidson.

        Deleted parts of r188486 and r188851.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::convertMainResourceLoadToDownload):

2015-08-31  Chris Dumez  <cdumez@apple.com>

        Range.detach() / NodeIterator.detach() should be no-ops as per the latest DOM specification
        https://bugs.webkit.org/show_bug.cgi?id=148454

        Reviewed by Ryosuke Niwa.

        Update Range API call sites to reflect changes.

        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange collapse:]):
        (-[WKDOMRange startContainer]):
        (-[WKDOMRange startOffset]):
        (-[WKDOMRange endContainer]):
        (-[WKDOMRange endOffset]):
        (-[WKDOMRange isCollapsed]):
        (-[WKDOMRange text]): Deleted.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::getImageForFindMatch):
        (WebKit::FindController::selectFindMatch):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::targetFrameForEditing):
        (WebKit::WebPage::firstRectForCharacterRangeAsync): Deleted.
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::targetFrameForEditing):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::rangeForBlockAtPoint):
        (WebKit::containsRange):
        (WebKit::unionDOMRanges):
        (WebKit::WebPage::contractedRangeFromHandle):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        (WebKit::WebPage::firstRectForCharacterRange): Deleted.

2015-08-31  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 find-in-page doesn't support multi-line results, is often blank
        https://bugs.webkit.org/show_bug.cgi?id=148599
        <rdar://problem/17914031>

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString):
        (WebKit::FindController::didFindString):
        * WebProcess/WebPage/FindController.h:
        Add didFindString() for FindControllerIOS.

        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindIndicatorOverlayClientIOS::drawRect):
        (WebKit::FindController::updateFindIndicator):
        (WebKit::setCompositionSelectionChangeEnabledInAllFrames):
        (WebKit::FindController::willFindString):
        (WebKit::FindController::didFindString):
        (WebKit::FindController::didFailToFindString):
        (WebKit::FindController::didHideFindIndicator):
        * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h:
        (WebKit::FindIndicatorOverlayClientIOS::FindIndicatorOverlayClientIOS):
        Adopt TextIndicator and shrink-wrapping.

        We'll re-create the indicator if the device/page scale factor change;
        this is the only case in which a TextIndicator sticks around when
        page scale changes -- we should come up with a better model!

2015-08-31  Antti Koivisto  <antti@apple.com>

        Network Cache: Stale content after back navigation
        https://bugs.webkit.org/show_bug.cgi?id=148634

        Reviewed by Chris Dumez.

        It is possible to get an older version of the previous page when navigating back. This can happen
        if the main resource load has not completed before navigating away from the page.

        Network cache entry is normally updated when the load completes. In case of cancellation we would leave
        any existing entry as-is. However we render incrementally and user might have seen some content from
        the partial load already. Navigating back to the cached page could show older version of the content.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::abort):

            If a network load is canceled by the client after receiving response but before the load has completed
            remove any existing cache entry for it.

2015-08-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate GraphicsContexts from pointers to references
        https://bugs.webkit.org/show_bug.cgi?id=148561

        Reviewed by Tim Horton.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::paint):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::paint):
        (WebKit::NetscapePlugin::snapshot):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginNone.cpp:
        (WebKit::NetscapePlugin::platformPaint):
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::platformPaint):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPaint):
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::updateControlTints):
        (WebKit::PDFPlugin::paintControlForLayerInContext):
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::updateControlTints):
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::convertCairoSurfaceToShareableBitmap):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRect):
        (WebKit::WebPage::snapshotAtSize):
        (WebKit::WebPage::snapshotNode):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindIndicatorOverlayClientIOS::drawRect):

2015-08-28  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Restructure WebMediaSessionManager for testing
        https://bugs.webkit.org/show_bug.cgi?id=148593

        Reviewed by Jer Noble.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::mediaSessionManager): Call WebMediaSessionManager::singleton, not
          WebMediaSessionManagerMac::singleton.

2015-08-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Add WebKit/WebKit2 settings to control automatic data loading
        https://bugs.webkit.org/show_bug.cgi?id=148579

        Reviewed by Anders Carlsson.

        Add a property to WKWebViewConfiguration to control whether clients are allowed
        to load media data automatically.  Pass this configuration on through to WebCore.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _mediaDataLoadsAutomatically]):
        (-[WKWebViewConfiguration _setMediaDataLoadsAutomatically:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-08-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Make the AllowsInlineMediaPlayback preference work in WebKit / WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=147512

        Reviewed by Anders Carlsson.

        Default the value of allowsInlineMediaPlayback to YES on iPad and NO on iPhone and iPod.
        Add a new configuration property, _inlineMediaPlaybackRequiresPlaysInlineAttribute, which
        defaults to NO on iPad and YES on iPhone and iPad.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetInlineMediaPlaybackRequiresPlaysInlineAttribute):
        (WKPreferencesGetInlineMediaPlaybackRequiresPlaysInlineAttribute):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * 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):

2015-08-28  Timothy Horton  <timothy_horton@apple.com>

        Add navigation gesture callbacks to WKPageNavigationClient
        https://bugs.webkit.org/show_bug.cgi?id=148568
        <rdar://problem/22371346>

        Reviewed by Anders Carlsson.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didBeginNavigationGesture):
        (API::NavigationClient::willEndNavigationGesture):
        (API::NavigationClient::didEndNavigationGesture):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/API/C/WKPageNavigationClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::navigationGestureDidBegin):
        (WebKit::WebPageProxy::navigationGestureWillEnd):
        (WebKit::WebPageProxy::navigationGestureDidEnd):

2015-08-28  Timothy Horton  <timothy_horton@apple.com>

        Get rid of the DynamicSizeWithMinimumViewSize layout mode
        https://bugs.webkit.org/show_bug.cgi?id=148554

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKLayoutMode.h:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _layoutMode]):
        (-[WKWebView _setLayoutMode:]):
        (-[WKWebView _setMinimumViewSize:]): Deleted.
        (-[WKWebView _minimumViewSize]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKLayoutMode.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setMinimumViewSize:]): Deleted.
        (-[WKView _minimumViewSize]): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scaleViewAndUpdateGeometryFenced): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (+[WKViewLayoutStrategy layoutStrategyWithPage:view:mode:]):
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy initWithPage:view:mode:]): Deleted.
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy _updateTransientScale:]): Deleted.
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy updateLayout]): Deleted.
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy didChangeMinimumViewSize]): Deleted.
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy willStartLiveResize]): Deleted.
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy didEndLiveResize]): Deleted.
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy didChangeFrameSize]): Deleted.
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy willChangeLayoutStrategy]): Deleted.
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::replyWithFenceAfterNextFlush): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaleViewAndUpdateGeometryFenced): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::replyWithFenceAfterNextFlush): Deleted.

2015-08-28  Timothy Horton  <timothy_horton@apple.com>

        [Mac] Right-clicking on GIFs spins the UI process for a while
        https://bugs.webkit.org/show_bug.cgi?id=148566
        <rdar://problem/22460854>

        Reviewed by Brady Eidson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        (WebKit::WebPageProxy::platformInitializeShareMenuItem):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::platformInitializeShareMenuItem):
        Move all of the code to make a Share menuitem into platformInitializeShareMenuItem.
        Make an NSImage directly from the image data if possible.

2015-08-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] LIBSECCOMP_INCLUDE_DIRS should be added to WebKit2_SYSTEM_INCLUDE_DIRECTORIES
        https://bugs.webkit.org/show_bug.cgi?id=148552

        Reviewed by Žan Doberšek.

        LIBSECCOMP_INCLUDE_DIRS should be added to WebKit2_SYSTEM_INCLUDE_DIRECTORIES, not
        WebKit2_INCLUDE_DIRECTORIES. (So that warnings from libseccomp headers are suppressed. Not
        that there are any right now.)

        * PlatformGTK.cmake:

2015-08-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Minor fixes in reportUnexpectedSyscall
        https://bugs.webkit.org/show_bug.cgi?id=148551

        Reviewed by Žan Doberšek.

        There is an off-by-one in the static assert.

        Also, an unsigned long long is passed in, but the parameter is an int. Then it's passed to
        writeUnsignedInt, which takes an unsigned int. Let's use unsigned int instead. (The value
        is a syscall number, so it's safe to truncate regardless -- it never be anywhere near as
        large as an int, unless the input is malicious, in which case truncating it is the right
        thing to do anyway -- so this is just a matter of style.)

        * Shared/linux/SeccompFilters/Syscall.cpp:
        (WebKit::reportUnexpectedSyscall):

2015-08-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Simplify the internal API to create a WebView
        https://bugs.webkit.org/show_bug.cgi?id=148570

        Reviewed by Žan Doberšek.

        Now that all the information required to create a WebView is in
        API::PageConfiguration, we can simplify the internal API to
        receive only the configuration instead of receiving a long list of
        parameters that we use to build a new API::PageConfiguration.

        * UIProcess/API/C/gtk/WKView.cpp:
        (WKViewCreate):
        * UIProcess/API/C/gtk/WKView.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextCreatePageForWebView):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreate):
        (webkitWebViewBaseCreateWebPage):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2015-08-27  Timothy Horton  <timothy_horton@apple.com>

        Video full-screen shouldn't use the DynamicSizeWithMinimumViewSize layout mode
        https://bugs.webkit.org/show_bug.cgi?id=148553

        Reviewed by Zalan Bujtas.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _supportsArbitraryLayoutModes]):
        (-[WKView _updateSupportsArbitraryLayoutModes]):
        (-[WKView _didCommitLoadForMainFrame]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::beganEnterFullScreen):
        (WebKit::PageClientImpl::beganExitFullScreen):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Deleted.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Deleted.
        It's not OK to just randomly change the layout mode, because the client
        can change it or its properties out from under us, and also because we
        weren't resetting it to whatever the client had specified.

        I recently implemented a better way to override layout modes, for PDF,
        so use that here. Also, we shouldn't use DynamicSizeWithMinimumViewSize,
        we should just use the "normal" mode (ViewSize), since we've already ensured
        a minimum size by setting contentMinSize.

2015-08-27  Alexey Proskuryakov  <ap@apple.com>

        pluginInfo.clientLoadPolicy is used uninitialized in WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=148550

        Reviewed by Tim Horton.

        This fixes flakiness on plugins/plugin-javascript-access.html.

        * Shared/WebCoreArgumentCoders.cpp: (IPC::ArgumentCoder<PluginInfo>::decode):

2015-08-27  Timothy Horton  <timothy_horton@apple.com>

        Factor out Lookup invocation
        https://bugs.webkit.org/show_bug.cgi?id=148509

        Reviewed by Anders Carlsson.

        * Shared/DictionaryPopupInfo.cpp: Removed.
        * Shared/DictionaryPopupInfo.h: Removed.
        Moved to WebCore.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DictionaryPopupInfo>::encode):
        (IPC::ArgumentCoder<DictionaryPopupInfo>::decode):
        Add encode/decoders for DictionaryPopupInfo now that it's in WebCore.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebHitTestResult.h:
        * Shared/mac/ArgumentCodersMac.h:
        * UIProcess/API/mac/WKView.mm:
        (+[WKView hideWordDefinitionWindow]):
        (-[WKView _dismissContentRelativeChildWindows]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _animationControllerForText]):
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::showDefinitionForAttributedString):
        (WebKit::PDFPlugin::lookupTextAtLocation):
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForSelection):
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        (WebKit::WebPage::dictionaryPopupInfoForSelectionInPDFPlugin):
        (WebKit::WebPage::lookupTextAtLocation):
        Adjust to new names and move stuff to WebCore.

2015-08-27  Brian Burg  <bburg@apple.com>

        Web Inspector: FrontendChannel should know its own connection type
        https://bugs.webkit.org/show_bug.cgi?id=148482

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebPage/WebInspector.h: add connectionType().

2015-08-27  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] REGRESSION: 50+ layout tests crash
        https://bugs.webkit.org/show_bug.cgi?id=148471

        Reviewed by Gyuyoung Kim.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::WebView):

2015-08-27  Zan Dobersek  <zdobersek@igalia.com>

        Fix WKMutableArray creations in WKUserMediaPermissionRequest
        https://bugs.webkit.org/show_bug.cgi?id=148489

        Reviewed by Carlos Garcia Campos.

        Call WKMutableArrayCreate() to create the WKMutableArray objects.
        WKMutableArrayRef type is a pointer, so calling 'WKMutableArrayRef()' 
        just sets a null value to the variable that is then returned and
        queried for size in WebKitTestRunner's TestController, resulting
        in a crash.

        * UIProcess/API/C/WKUserMediaPermissionRequest.cpp:
        (WKUserMediaPermissionRequestDeviceNamesVideo):
        (WKUserMediaPermissionRequestDeviceNamesAudio):

2015-08-26  Emanuele Aina  <emanuele.aina@collabora.com>

        [ThreadedCompositor] Use WTF::Condition together with WTF::Lock
        https://bugs.webkit.org/show_bug.cgi?id=148493

        Reviewed by Gyuyoung Kim.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        Replace ThreadCondition::signal() calls with Condition::notifyOne().
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        Replace ThreadCondition usage with Condition.

2015-08-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix crash due to animationDidEnd called on deallocated RemoteLayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=148442
        <rdar://problem/21609257>

        Reviewed by Tim Horton.

        A PlatformCAAnimationRemote's backpointer to a deallocated RemoteLayerTreeHost is not
        invalidated when its host removes its reference to it.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::layerWillBeRemoved): Invalidate a backpointer from the
            PlatformCAAnimationRemotes to the RemoteLayerTreeHost.

2015-08-26  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Safari navigates after a cancelled force click
        https://bugs.webkit.org/show_bug.cgi?id=148491
        -and corresponding-
        rdar://problem/22394323

        Reviewed by Tim Horton.

        Use the current stage to determine which type of cancel this is.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::immediateActionDidCancel):

2015-08-26  Eric Carlson  <eric.carlson@apple.com>

        Media Session: make MediaSessionMetadata a class
        https://bugs.webkit.org/show_bug.cgi?id=148486

        Reviewed by Jer Noble.

        * Shared/WebCoreArgumentCoders.h: struct MediaSessionMetadata -> class MediaSessionMetadata.
        * UIProcess/WebPageProxy.h: Ditto.

2015-08-26  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed.

        Fix the crashes in GTK+'s WebKitTestRunner by setting the process pool
        on the API::PageConfiguration object in webkitWebViewBaseCreate().

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

2015-08-25  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

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

2015-08-25  Beth Dakin  <bdakin@apple.com>

        Long press gesture recognizer should adjust delay based on other recognizers
        https://bugs.webkit.org/show_bug.cgi?id=148402
        -and corresponding-
        rdar://problem/22278723

        Reviewed by Tim Horton.

        Call _setAdjustsDelayBasedOnOtherRecognizers with a value of YES.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):

2015-08-24  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed, EFL and GTK build fix since r188895.

        * CMakeLists.txt: Rename Rename VisitedLinkProvider to VisitedLinkStore.

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

        Rename VisitedLinkProvider to VisitedLinkStore
        https://bugs.webkit.org/show_bug.cgi?id=148406

        Reviewed by Tim Horton.

        * DerivedSources.make:
        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::copy):
        (API::PageConfiguration::visitedLinkStore):
        (API::PageConfiguration::setVisitedLinkStore):
        (API::PageConfiguration::visitedLinkProvider): Deleted.
        (API::PageConfiguration::setVisitedLinkProvider): Deleted.
        * UIProcess/API/APIPageConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextAddVisitedLink):
        (WKContextClearVisitedLinks):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/_WKVisitedLinkStore.mm:
        (-[_WKVisitedLinkStore init]):
        (-[_WKVisitedLinkStore dealloc]):
        (-[_WKVisitedLinkStore addVisitedLinkWithURL:]):
        (-[_WKVisitedLinkStore removeAll]):
        (-[_WKVisitedLinkStore _apiObject]):
        * UIProcess/API/Cocoa/_WKVisitedLinkStoreInternal.h:
        (WebKit::wrapper):
        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::generateIdentifier): Deleted.
        (WebKit::VisitedLinkProvider::create): Deleted.
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider): Deleted.
        (WebKit::VisitedLinkProvider::VisitedLinkProvider): Deleted.
        (WebKit::VisitedLinkProvider::addProcess): Deleted.
        (WebKit::VisitedLinkProvider::removeProcess): Deleted.
        (WebKit::VisitedLinkProvider::addVisitedLinkHash): Deleted.
        (WebKit::VisitedLinkProvider::removeAll): Deleted.
        (WebKit::VisitedLinkProvider::webProcessWillOpenConnection): Deleted.
        (WebKit::VisitedLinkProvider::webProcessDidCloseConnection): Deleted.
        (WebKit::VisitedLinkProvider::addVisitedLinkHashFromPage): Deleted.
        (WebKit::nextPowerOf2): Deleted.
        (WebKit::tableSizeForKeyCount): Deleted.
        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired): Deleted.
        (WebKit::VisitedLinkProvider::resizeTable): Deleted.
        (WebKit::VisitedLinkProvider::sendTable): Deleted.
        * UIProcess/VisitedLinkStore.cpp: Renamed from Source/WebKit2/UIProcess/VisitedLinkProvider.cpp.
        (WebKit::generateIdentifier):
        (WebKit::VisitedLinkStore::create):
        (WebKit::VisitedLinkStore::~VisitedLinkStore):
        (WebKit::VisitedLinkStore::VisitedLinkStore):
        (WebKit::VisitedLinkStore::addProcess):
        (WebKit::VisitedLinkStore::removeProcess):
        (WebKit::VisitedLinkStore::addVisitedLinkHash):
        (WebKit::VisitedLinkStore::removeAll):
        (WebKit::VisitedLinkStore::webProcessWillOpenConnection):
        (WebKit::VisitedLinkStore::webProcessDidCloseConnection):
        (WebKit::VisitedLinkStore::addVisitedLinkHashFromPage):
        (WebKit::nextPowerOf2):
        (WebKit::tableSizeForKeyCount):
        (WebKit::VisitedLinkStore::pendingVisitedLinksTimerFired):
        (WebKit::VisitedLinkStore::resizeTable):
        (WebKit::VisitedLinkStore::sendTable):
        * UIProcess/VisitedLinkStore.h: Renamed from Source/WebKit2/UIProcess/VisitedLinkProvider.h.
        * UIProcess/VisitedLinkStore.messages.in: Renamed from Source/WebKit2/UIProcess/VisitedLinkProvider.messages.in.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::processDidFinishLaunching):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::addVisitedLinkStore):
        (WebKit::WebProcessProxy::didDestroyVisitedLinkStore):
        (WebKit::WebProcessProxy::addVisitedLinkProvider): Deleted.
        (WebKit::WebProcessProxy::didDestroyVisitedLinkProvider): Deleted.
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::addVisitedLink):

2015-08-24  Tim Horton  <timothy_horton@apple.com>

        (Finally...) get rid of WKViewIOS
        https://bugs.webkit.org/show_bug.cgi?id=148404

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKView.h:
        * UIProcess/API/ios/WKViewIOS.mm: Removed.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::PageClientImpl): Deleted.
        (WebKit::PageClientImpl::didRelaunchProcess): Deleted.
        (WebKit::PageClientImpl::refView): Deleted.
        (WebKit::PageClientImpl::derefView): Deleted.
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:processPool:configuration:wkView:]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:
        Get rid of WKViewIOS and references to it.

        * DatabaseProcess/ios/DatabaseProcessIOS.mm:
        (WebKit::DatabaseProcess::initializeSandbox):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::initializeSandbox):
        * Shared/Plugins/mac/PluginSandboxProfile.mm:
        (WebKit::pluginSandboxProfileDirectory):
        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::initializeSandbox):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox):
        Look for WKWebView instead of WKView if we have it.

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

        Rename _WKVisitedLinkProvider to _WKVisitedLinkStore for consistency
        https://bugs.webkit.org/show_bug.cgi?id=148398

        Reviewed by Tim Horton.

        We'd like to call the abstract classes providers and the concrete classes stores in WebKit. Begin by renaming
        _WKVisitedLinkProvider to _WKVisitedLinkStore, but keep the former around as a deprecated class.

        * Shared/API/Cocoa/WebKitPrivate.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _visitedLinkStore]):
        (-[WKWebViewConfiguration _setVisitedLinkStore:]):
        (-[WKWebViewConfiguration _visitedLinkProvider]):
        (-[WKWebViewConfiguration _setVisitedLinkProvider:]):
        (-[WKWebViewConfiguration _validate]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm:
        (-[_WKVisitedLinkProvider init]): Deleted.
        (-[_WKVisitedLinkProvider dealloc]): Deleted.
        (-[_WKVisitedLinkProvider addVisitedLinkWithURL:]): Deleted.
        (-[_WKVisitedLinkProvider removeAll]): Deleted.
        (-[_WKVisitedLinkProvider _apiObject]): Deleted.
        * UIProcess/API/Cocoa/_WKVisitedLinkStore.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKVisitedLinkProvider.h.
        * UIProcess/API/Cocoa/_WKVisitedLinkStore.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm.
        (-[_WKVisitedLinkStore init]):
        (-[_WKVisitedLinkStore dealloc]):
        (-[_WKVisitedLinkStore addVisitedLinkWithURL:]):
        (-[_WKVisitedLinkStore removeAll]):
        (-[_WKVisitedLinkStore _apiObject]):
        * UIProcess/API/Cocoa/_WKVisitedLinkStoreInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/_WKVisitedLinkProviderInternal.h.
        (WebKit::wrapper):
        * WebKit2.xcodeproj/project.pbxproj:

2015-08-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Use _NSScrollingPredominantAxisFilter for wheel event filtering on Mac
        https://bugs.webkit.org/show_bug.cgi?id=147320

        Reviewed by Simon Fraser.

        Refactored to use a predominant axis filter instead of a predominant axis tracker. This allows us to
        employ AppKit's _NSScrollingPredominantAxisFilter when possible, and use the wheel event delta tracker
        as a fallback. Here, we refactor EventDispatcher to use the new filters for mainframe scrolling.

        No new tests, since this change does not add new functionality.

        * WebProcess/WebPage/EventDispatcher.cpp: Include WheelEventDeltaFilterMac.h when necessary.
        (WebKit::EventDispatcher::EventDispatcher): Initialize a WheelEventDeltaFilterMac when possible. Otherwise,
            fall back to a BasicWheelEventDeltaFilter.
        (WebKit::EventDispatcher::wheelEvent): Use filtered deltas to initialize the platform wheel event instead
            of zeroing out non-predominant axes.
        * WebProcess/WebPage/EventDispatcher.h: Replace m_recentWheelEventDeltaTracker with m_recentWheelEventDeltaFilter.

2015-08-23  Andy Estes  <aestes@apple.com>

        [Content Filtering] REGRESSION (r182356): Provisional URL is incorrect in didReceiveServerRedirectForProvisionalLoadForFrame when Content Filtering is enabled
        https://bugs.webkit.org/show_bug.cgi?id=147872
        rdar://problem/22044000

        Reviewed by Dan Bernstein.
        
        The provisional DocumentLoader request URL does not reflect redirects when content filtering is enabled, but
        the URL argument passed to dispatchDidReceiveServerRedirectForProvisionalLoad() does, so use it intead.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        Sent DidReceiveServerRedirectForProvisionalLoadForFrame using the URL argument.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2015-08-23  Csaba Osztrogonác  <ossy@webkit.org>

        Typo fix after r188842.

        * CMakeLists.txt:

2015-08-23  Csaba Osztrogonác  <ossy@webkit.org>

        Speculative buildfix after r188828.

        * CMakeLists.txt:

2015-08-22  Tim Horton  <timothy_horton@apple.com>

        Factor out and add logging to swipe-start hysteresis code
        https://bugs.webkit.org/show_bug.cgi?id=148361

        Reviewed by Darin Adler.

        * UIProcess/ViewGestureController.cpp:
        (WebKit::ViewGestureController::ViewGestureController):
        * UIProcess/mac/ViewGestureController.h:
        (WebKit::ViewGestureController::wheelEventWasNotHandledByWebCore):
        (WebKit::ViewGestureController::shouldIgnorePinnedState):
        (WebKit::ViewGestureController::setShouldIgnorePinnedState):
        (WebKit::ViewGestureController::PendingSwipeTracker::PendingSwipeTracker):
        (WebKit::ViewGestureController::PendingSwipeTracker::shouldIgnorePinnedState):
        (WebKit::ViewGestureController::PendingSwipeTracker::setShouldIgnorePinnedState):
        Move pending-swipe members into PendingSwipeTracker.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::scrollEventCanInfluenceSwipe):
        (WebKit::deltaShouldCancelSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::scrollEventCanBecomeSwipe):
        (WebKit::ViewGestureController::handleScrollWheelEvent):
        (WebKit::ViewGestureController::PendingSwipeTracker::handleEvent):
        (WebKit::ViewGestureController::PendingSwipeTracker::eventWasNotHandledByWebCore):
        (WebKit::ViewGestureController::PendingSwipeTracker::tryToStartSwipe):
        (WebKit::ViewGestureController::PendingSwipeTracker::reset):
        (WebKit::ViewGestureController::trackSwipeGesture):
        (WebKit::ViewGestureController::setDidMoveSwipeSnapshotCallback):
        Move pending-swipe methods into PendingSwipeTracker.
        Clean up the logic a bit.
        Add some logging.

2015-08-22  Timothy Horton  <timothy_horton@apple.com>

        WebKitTestRunner should use WKWebView on OS X and iOS
        https://bugs.webkit.org/show_bug.cgi?id=143743
        <rdar://problem/16947123>

        Reviewed by Anders Carlsson.
        Patch by Enrica Casucci and myself.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _windowOcclusionDetectionEnabled]):
        (-[WKWebView _setWindowOcclusionDetectionEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Add SPI to disable window occlusion detection, for WebKitTestRunner's use.

        * Shared/WebPreferencesDefinitions.h:
        Remove a completely unused WebPreference. It is a WebCore Setting,
        but in the API it's exposed as a WKPage setter and WKView and WKWebView property
        instead of as a WKPreference, so there's no need for the WebPreference.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageAddUserScript):
        (WKBundlePageAddUserStyleSheet):
        (WKBundlePageRemoveAllUserContent):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addUserScript):
        (WebKit::WebPage::addUserStyleSheet):
        (WebKit::WebPage::removeAllUserContent):
        * WebProcess/WebPage/WebPage.h:
        Add WKBundlePage functions for user script and style sheet manipulation.
        These use the WebPage's WebUserContentController instead of the WebPageGroupProxy's
        (used by the WKBundle functions), so they work correctly with the modern API.

2015-08-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, attempt to fix GTK build after r188718

        * CMakeLists.txt: Build WKPageConfigurationRef.cpp
        * PlatformEfl.cmake: Don't build WKPageConfigurationRef.cpp

2015-08-22  Antti Koivisto  <antti@apple.com>

        Decode data URLs in web process
        https://bugs.webkit.org/show_bug.cgi?id=148128

        Reviewed by Darin Adler.

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

            Don't send data: loads to the network process, handle them locally.

        (WebKit::WebResourceLoadScheduler::startLocalLoad):

            Call ResourceLoder::start() directly.

2015-08-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r188807, r188813, and r188815.
        https://bugs.webkit.org/show_bug.cgi?id=148349

        lots of 32-bit build problems, better to resolve separately
        and try again (Requested by thorton on #webkit).

        Reverted changesets:

        "WebKitTestRunner should use WKWebView on OS X and iOS"
        https://bugs.webkit.org/show_bug.cgi?id=143743
        http://trac.webkit.org/changeset/188807

        "Stop building WebKitTestRunner for 32-bit platforms"
        https://bugs.webkit.org/show_bug.cgi?id=143743
        http://trac.webkit.org/changeset/188813

        "Stop building WebKitTestRunner for 32-bit platforms"
        https://bugs.webkit.org/show_bug.cgi?id=143743
        http://trac.webkit.org/changeset/188815

2015-08-21  Timothy Horton  <timothy_horton@apple.com>

        WebKitTestRunner should use WKWebView on OS X and iOS
        https://bugs.webkit.org/show_bug.cgi?id=143743
        <rdar://problem/16947123>

        Reviewed by Anders Carlsson.
        Patch by Enrica Casucci and myself.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _windowOcclusionDetectionEnabled]):
        (-[WKWebView _setWindowOcclusionDetectionEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Add SPI to disable window occlusion detection, for WebKitTestRunner's use.

        * Shared/WebPreferencesDefinitions.h:
        Remove a completely unused WebPreference. It is a WebCore Setting,
        but in the API it's exposed as a WKPage setter and WKView and WKWebView property
        instead of as a WKPreference, so there's no need for the WebPreference.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageAddUserScript):
        (WKBundlePageAddUserStyleSheet):
        (WKBundlePageRemoveAllUserContent):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addUserScript):
        (WebKit::WebPage::addUserStyleSheet):
        (WebKit::WebPage::removeAllUserContent):
        * WebProcess/WebPage/WebPage.h:
        Add WKBundlePage functions for user script and style sheet manipulation.
        These use the WebPage's WebUserContentController instead of the WebPageGroupProxy's
        (used by the WKBundle functions), so they work correctly with the modern API.

2015-08-21  Alexey Proskuryakov  <ap@apple.com>

        Improve how UI events are dispatched by WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=148326

        Reviewed by Anders Carlsson.

        Added "fully synchronous mode for testing", in which all messages are dispatched
        synchronously.

        When an async message is sent in this mode, it is wrapped into a sync one automatically.

        A client must opt in, either by using WKBundlePagePostSynchronousMessageForTesting(),
        or by calling WKContextConfigurationAllowFullySynchronousModeForTesting().
        This makes sure that we don't increase potential for IPC misuse.

        * WebProcess/WebPage/WebPage.messages.in: Yay, fewer messages!

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetShouldSendEventsSynchronously): Deleted.
        * UIProcess/API/C/WKPagePrivate.h:
        We no longer need WKPageSetShouldSendEventsSynchronously and associated custom messages.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        (WebKit::updateWheelEventTestTriggersIfNeeded): Deleted.
        Removed code that was only needed to support pseudo-syncronous scrolling in tests.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendMessage):
        (IPC::Connection::dispatchSyncMessage):
        (IPC::Connection::dispatchMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::allowFullySynchronousModeForTesting):
        (IPC::Connection::sendSync):
        * Platform/IPC/MessageDecoder.cpp:
        (IPC::MessageDecoder::shouldDispatchMessageWhenWaitingForSyncReply):
        (IPC::MessageDecoder::shouldUseFullySynchronousModeForTesting):
        (IPC::MessageDecoder::setImportanceAssertion):
        (IPC::MessageDecoder::unwrapForTesting):
        * Platform/IPC/MessageDecoder.h:
        (IPC::MessageDecoder::UUID):
        * Platform/IPC/MessageEncoder.cpp:
        (IPC::MessageEncoder::setShouldDispatchMessageWhenWaitingForSyncReply):
        (IPC::MessageEncoder::setFullySynchronousModeForTesting):
        (IPC::MessageEncoder::wrapForTesting):
        * Platform/IPC/MessageEncoder.h:
        (IPC::MessageEncoder::UUID):
        * Platform/IPC/MessageFlags.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationSetMediaKeysStorageDirectory):
        (WKContextConfigurationAllowFullySynchronousModeForTesting):
        * UIProcess/API/C/WKContextConfigurationRef.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::handleMouseEvent):
        (WebKit::WebPageProxy::sendWheelEvent):
        (WebKit::WebPageProxy::handleKeyboardEvent):
        (WebKit::WebPageProxy::handleTouchEvent):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::renderTreeSize):
        (WebKit::WebPageProxy::setShouldSendEventsSynchronously): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processDidFinishLaunching):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePagePostMessage):
        (WKBundlePagePostSynchronousMessageForTesting):
        (WKBundlePagePostSynchronousMessage): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEvent):
        (WebKit::handleWheelEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::handleKeyEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::validateCommand):
        (WebKit::WebPage::touchEvent):
        (WebKit::WebPage::scroll):
        (WebKit::WebPage::postMessage):
        (WebKit::WebPage::postSynchronousMessageForTesting):
        (WebKit::WebPage::mouseEventSyncForTesting): Deleted.
        (WebKit::WebPage::wheelEventSyncForTesting): Deleted.
        (WebKit::WebPage::keyEventSyncForTesting): Deleted.
        (WebKit::WebPage::touchEventSyncForTesting): Deleted.
        (WebKit::WebPage::postSynchronousMessage): Deleted.
        * WebProcess/WebPage/WebPage.h:

2015-08-20  Matt Rajca  <mrajca@apple.com>

        Media Session: let UI clients change the volume of the focused media element
        https://bugs.webkit.org/show_bug.cgi?id=148289

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKMediaSessionFocusManager.cpp:
        (WKMediaSessionFocusManagerSetVolumeOfFocusedMediaElement):
        * UIProcess/API/C/WKMediaSessionFocusManager.h:
        * UIProcess/WebMediaSessionFocusManager.cpp:
        (WebKit::WebMediaSessionFocusManager::updatePlaybackAttribute):
        (WebKit::WebMediaSessionFocusManager::setVolumeOfFocusedMediaElement):
        * UIProcess/WebMediaSessionFocusManager.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setVolumeOfMediaElement):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setVolumeOfMediaElement):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-08-21  Anders Carlsson  <andersca@apple.com>

        Get rid of uses of the old callOnMainThread function that takes a function ptr + context
        https://bugs.webkit.org/show_bug.cgi?id=148324

        Reviewed by Tim Horton.

        * UIProcess/mac/WKPrintingView.mm:
        (prepareDataForPrintingOnSecondaryThread):
        (-[WKPrintingView knowsPageRange:]):

2015-08-21  Chris Dumez  <cdumez@apple.com>

        Regression(r188698): http/tests/cache/disk-cache/disk-cache-revalidation-new-expire-header.html is very flaky
        https://bugs.webkit.org/show_bug.cgi?id=148205

        Reviewed by Antti Koivisto.

        After r188640, successful revalidation of resources in the memory cache
        would cause us to drop the corresponding resource in the disk cache.
        This patch addresses the issue by not removing the cache entry if the
        response is a successful revalidation (i.e. status code == 304).

        Longer term, we should probably update the entry in the disk cache (if
        it exists) when it is revalidated by the memory cache. Currently,
        revalidation by the memory cache bypasses the disk cache and goes
        straight to the network. Then, when the response comes back as a 304,
        we try and store the response in the cache. However, a 304 status code
        is not cacheable so the cache rejects it.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):

2015-08-20  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Revise PlatformWebView ctor according to r188718
        https://bugs.webkit.org/show_bug.cgi?id=148282

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake:

2015-08-20  Alex Christensen  <achristensen@webkit.org>

        GTK build fix after r188693.

        * UIProcess/API/gtk/PageClientImpl.h:
        Delete mediaDocumentNaturalSizeChanged which could be renamed to imageOrMediaDocumentSizeChanged, 
        but there's no reason to have an empty function overriding another virtual function that is also empty.

2015-08-20  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix build error since r188693
        https://bugs.webkit.org/show_bug.cgi?id=148279

        Reviewed by Gyuyoung Kim.

        * UIProcess/efl/WebViewEfl.h:

2015-08-20  Anders Carlsson  <andersca@apple.com>

        Use WKPageConfigurationRef in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=147996

        Reviewed by Tim Horton.

        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _commonInitializationWithConfigurationRef:]):
        (-[WKView initWithFrame:configurationRef:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:configurationRef:]):
        Make sure to copy the configuration, matching what we do in the modern API.
        
2015-08-20  Beth Dakin  <bdakin@apple.com>

        Standalone image documents should send their size to the UIClient just like 
        standalone media documents
        https://bugs.webkit.org/show_bug.cgi?id=148195
        -and corresponding-
        rdar://problem/21951253

        Reviewed by Tim Horton.

        This patch re-names mediaDocumentNaturalSizeChanged() to 
        imageOrMediaDocumentSizeChanged(), and, as the new name implies, uses the 
        function for both media documents and images.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didClickAutoFillButton):
        (API::UIClient::imageOrMediaDocumentSizeChanged):
        (API::UIClient::mediaDocumentNaturalSizeChanged): Deleted.
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        The WKWebView and PageClient implementations of this function were actually 
        not being used, so this patch removes them and just keeps the UIClient stuff.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView performDragOperation:]):
        (-[WKWebView _mediaDocumentNaturalSizeChanged:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:

        More re-naming.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::UIClient):
        (WebKit::UIDelegate::UIClient::didNotHandleTapAsClick):
        (WebKit::UIDelegate::UIClient::imageOrMediaDocumentSizeChanged):
        (WebKit::UIDelegate::UIClient::mediaDocumentNaturalSizeChanged): Deleted.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::installViewStateChangeCompletionHandler):
        (WebKit::WebPageProxy::imageOrMediaDocumentSizeChanged):
        (WebKit::WebPageProxy::setShouldDispatchFakeMouseMoveEvents):
        (WebKit::WebPageProxy::mediaDocumentNaturalSizeChanged): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::useFixedLayoutDidChange):
        (WebKit::WebPageProxy::fixedLayoutSizeDidChange):
        * UIProcess/WebPageProxy.messages.in:

        The WKWebView and PageClient implementations of this function were actually 
        not being used, so this patch removes them and just keeps the UIClient stuff.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::mediaDocumentNaturalSizeChanged): Deleted.
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::mediaDocumentNaturalSizeChanged): Deleted.

        More re-naming.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::imageOrMediaDocumentSizeChanged):
        (WebKit::WebChromeClient::mediaDocumentNaturalSizeChanged): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::imageOrMediaDocumentSizeChanged):
        (WebKit::WebPage::mediaDocumentNaturalSizeChanged): Deleted.
        * WebProcess/WebPage/WebPage.h:

2015-08-19  Eric Carlson  <eric.carlson@apple.com>

        Remove ENABLE_WEBVTT_REGIONS
        https://bugs.webkit.org/show_bug.cgi?id=148184

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig: Remove ENABLE_WEBVTT_REGIONS.

2015-08-18  Dean Jackson  <dino@apple.com>

        Support CSS filters without webkit prefix
        https://bugs.webkit.org/show_bug.cgi?id=148138
        <rdar://problem/22331434>

        Reviewed by Sam Weinig.

        Rename WebkitFilter to Filter.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextureMapperAnimation>::encode):
        (IPC::ArgumentCoder<TextureMapperAnimation>::decode):

2015-08-19  Alex Christensen  <achristensen@webkit.org>

        Build TestWTF on Mac with CMake.
        https://bugs.webkit.org/show_bug.cgi?id=147972

        Reviewed by Tim Horton.

        * PlatformMac.cmake:
        Make more forwarding headers.

2015-08-18  Filip Pizlo  <fpizlo@apple.com>

        Replace all uses of std::mutex/std::condition_variable with WTF::Lock/WTF::Condition
        https://bugs.webkit.org/show_bug.cgi?id=148140

        Reviewed by Geoffrey Garen.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::traverse):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::SyncMessageState::dispatchMessages):
        (IPC::Connection::SyncMessageState::dispatchMessageAndResetDidScheduleDispatchMessagesForConnection):
        (IPC::Connection::sendMessage):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::installIncomingSyncMessageCallback):
        (IPC::Connection::uninstallIncomingSyncMessageCallback):
        (IPC::Connection::hasIncomingSyncMessage):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::sendOutgoingMessages):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::dispatchOneMessage):
        * Platform/IPC/Connection.h:
        * Shared/BlockingResponseMap.h:
        (BlockingResponseMap::waitForResponse):
        (BlockingResponseMap::didReceiveResponse):
        (BlockingResponseMap::cancel):
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::saveToFile):
        (WebKit::PluginInfoCache::updatePluginInfo):
        * UIProcess/Plugins/gtk/PluginInfoCache.h:
        * UIProcess/mac/WKPrintingView.h:
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]):
        (prepareDataForPrintingOnSecondaryThread):
        (-[WKPrintingView knowsPageRange:]):

2015-08-19  Chris Dumez  <cdumez@apple.com>

        WebKit may keep outdated entry in the disk cache after a reload
        https://bugs.webkit.org/show_bug.cgi?id=148137
        <rdar://problem/22299547>

        Reviewed by Antti Koivisto.

        WebKit would keep outdated entry in the disk cache after a reload
        in the following scenario:
        1. We have an entry in the cache
        2. The user reloads
        3. We get a fresh resource from the network but this one is not cacheable

        In this case, we now remove the stale entry from the cache to make sure
        it is not served to following requests (e.g. history navigations).

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):
        Remove the entry from the cache if its redirection is no longer
        cacheable.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        If we make the decision not to store the response, then remove the
        entry in the cache for this resource if it exists.

        (WebKit::NetworkCache::Cache::remove):
        * NetworkProcess/cache/NetworkCache.h:
        Add new remove() overload taking a ResourceRequest argument so the
        call site does not have the compute the key.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::removeFromPendingWriteOperations):
        (WebKit::NetworkCache::Storage::remove):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        When we're asked to remove an entry with a given key, also remove
        it from the pending write operations. This pre-existing bug would
        prevent the new layout test from passing.

2015-08-18  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] GMainLoopSource should receive the std::function<> objects through rvalue references
        https://bugs.webkit.org/show_bug.cgi?id=147981

        Reviewed by Carlos Garcia Campos.

        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::runTaskInQueue): Move the std::function<> into the scheduling call.

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

        [iOS] Safari’s Web Content process crashes when decoding an NSError containing an identity
        https://bugs.webkit.org/show_bug.cgi?id=148135

        Reviewed by Sam Weinig.

        * Configurations/WebContent-iOS.entitlements: Added the com.apple.identities keychain
          access group. The Networking process already has it since r169655.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitialize): Always allow the UI process to decode keys.

2015-08-18  Jincheol Jo  <jincheol.jo@navercorp.com>

        [EFL] Web Inspector: make to use StringBuilder in inspectorBaseURL
        https://bugs.webkit.org/show_bug.cgi?id=148126

        Reviewed by Gyuyoung Kim.

        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):

2015-08-18  Anders Carlsson  <andersca@apple.com>

        Fix build, and fix the version check.

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

2015-08-18  Anders Carlsson  <andersca@apple.com>

        REGRESSION: Playing audio causes near-instant crash
        https://bugs.webkit.org/show_bug.cgi?id=148059
        rdar://problem/22282680

        Reviewed by Sam Weinig.

        The version of WebKit that Safari 6.2.8, 7.1.8 and 8.0.8 built against
        had an ABI incompatible WKPageUIClientV4 struct. Thankfully we're not going to ship any
        versions of Safari that use the "normal" WKPageUIClientV4 struct so just assume that it's always the
        broken one and fix it up by converting it to a WKPageUIClientV5 struct and setting that as the page UI client.

        * UIProcess/API/C/WKPage.cpp:
        (fixUpBotchedPageUIClient):
        (WKPageSetPageUIClient):

2015-08-17  Filip Pizlo  <fpizlo@apple.com>

        Replace all remaining uses of WTF::Mutex with WTF::Lock
        https://bugs.webkit.org/show_bug.cgi?id=148089

        Reviewed by Geoffrey Garen.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::postDatabaseTask):
        (WebKit::DatabaseProcess::performNextDatabaseTask):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::shutdown):
        (WebKit::UniqueIDBDatabase::postMainThreadTask):
        (WebKit::UniqueIDBDatabase::performNextMainThreadTask):
        (WebKit::UniqueIDBDatabase::postDatabaseTask):
        (WebKit::UniqueIDBDatabase::performNextDatabaseTask):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingSyncReply):
        (IPC::Connection::connectionDidClose):
        * Platform/IPC/Connection.h:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::appendUpdate):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::createCompositingThread):
        (WebKit::ThreadedCompositor::runCompositingThread):
        (WebKit::ThreadedCompositor::terminateCompositingThread):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (WebKit::CustomProtocolManager::addCustomProtocol):
        (WebKit::CustomProtocolManager::removeCustomProtocol):
        (WebKit::CustomProtocolManager::registerScheme):
        (WebKit::CustomProtocolManager::unregisterScheme):
        (WebKit::CustomProtocolManager::supportsScheme):
        (WebKit::CustomProtocolManager::protocolForID):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::removePluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::addScrollingTreeForPage):
        (WebKit::EventDispatcher::removeScrollingTreeForPage):
        (WebKit::EventDispatcher::wheelEvent):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamReadAsync):
        (webkitSoupRequestInputStreamAddData):

2015-08-17  Alex Christensen  <achristensen@webkit.org>

        Speculative GTK build fix after r188553

        * CMakeLists.txt:
        Added new files.

2015-08-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement IntegerHasher
        https://bugs.webkit.org/show_bug.cgi?id=147866

        Reviewed by Darin Adler and Anders Carlsson.

        Use new #include.

        * DatabaseProcess/IndexedDB/IDBIdentifier.h:
        * Platform/IPC/StringReference.cpp:

2015-08-13  Anders Carlsson  <andersca@apple.com>

        Add WKWindowFeaturesRef and a new modern createNewPage UI client callback
        https://bugs.webkit.org/show_bug.cgi?id=147989

        Reviewed by Tim Horton.

        Re-land this and make sure we actually allocate a WKWindowFeatures object.

        * Platform/IPC/mac/ConnectionMac.mm:
        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * UIProcess/API/APIWindowFeatures.cpp: Added.
        * UIProcess/API/APIWindowFeatures.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/C/WKWindowFeaturesRef.cpp: Added.
        (WKWindowFeaturesGetTypeID):
        * UIProcess/API/C/WKWindowFeaturesRef.h: Added.
        * UIProcess/API/Cocoa/WKWindowFeatures.mm:
        (-[WKWindowFeatures dealloc]):
        (-[WKWindowFeatures menuBarVisibility]):
        (-[WKWindowFeatures statusBarVisibility]):
        (-[WKWindowFeatures toolbarsVisibility]):
        (-[WKWindowFeatures allowsResizing]):
        (-[WKWindowFeatures x]):
        (-[WKWindowFeatures y]):
        (-[WKWindowFeatures width]):
        (-[WKWindowFeatures height]):
        (-[WKWindowFeatures _apiObject]):
        (-[WKWindowFeatures _initWithWindowFeatures:]): Deleted.
        * UIProcess/API/Cocoa/WKWindowFeaturesInternal.h:
        (WebKit::wrapper):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * WebKit2.xcodeproj/project.pbxproj:

2015-08-17  Sam Weinig  <sam@webkit.org>

        API::PageConfiguration's sessionID needs to be set whenever the API::WebsiteDataStore is set
        https://bugs.webkit.org/show_bug.cgi?id=148097

        Reviewed by Anders Carlsson.

        We were getting an empty SessionID set on the WebPageProxy (and crashing asserting down the line)
        when using a WKPageConfiguration with a WKWebsiteDataStore set on it.

        Tests:
            WebKit2.WKPageConfigurationBasicWithDataStore
            WebKit2.WKPageConfigurationBasicWithNonPersistentDataStore

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::setWebsiteDataStore):
        Set the sessionID member whenever changing the WebsiteDataStore.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
        (WKWebsiteDataStoreGetDefaultDataStore):
        (WKWebsiteDataStoreCreateNonPersistentDataStore):
        * UIProcess/API/C/WKWebsiteDataStoreRef.h:
        Expose functions for getting default and new non-persistent data stores via the C-SPI. Useful
        for testing and transitioning users of the C-SPI to the new model.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Remove explicit setting of the sessionID. This is handled by the above call to setWebsiteDataStore().

2015-08-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Cannot change WKWebView scrollView deceleration rate
        https://bugs.webkit.org/show_bug.cgi?id=148086
        <rdar://problem/21893685>

        Reviewed by Simon Fraser.

        Updates the preferred scroll deceleration factor when the scrollView's decelerationRate is explicitly set by the
        user, so when snap scrolling is inactive and [WKWebView scrollViewWillBeginDragging] sets its scrollView's
        decelerationRate to the preferred decelerationRate, it will be set to the updated value.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView setDecelerationRate:]): Overrides setDecelerationRate to update _preferredScrollDecelerationFactor.

2015-08-17  Timothy Horton  <timothy_horton@apple.com>

        Adopt shrink-wrapping for TextIndicators on Mac
        https://bugs.webkit.org/show_bug.cgi?id=148064

        Reviewed by Beth Dakin.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode): Deleted.
        (IPC::ArgumentCoder<TextIndicatorData>::decode): Deleted.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        Use the new option, TextIndicatorOptionIncludeMarginIfRangeMatchesSelection,
        for iOS and FindController, because we can keep the margins in these cases
        because we don't have to animate to/from the blue highlight.

2015-08-16  Timothy Horton  <timothy_horton@apple.com>

        Refactor ViewGestureController swipe snapshot removal to be more platform-independent
        https://bugs.webkit.org/show_bug.cgi?id=148062

        Reviewed by Dan Bernstein.

        * Platform/Logging.h:
        Add a ViewGestures logging channel.

        * UIProcess/ViewGestureController.cpp: Added.
        (viewGestureControllersForAllPages):
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::~ViewGestureController):
        (WebKit::ViewGestureController::gestureControllerForPage):
        (WebKit::ViewGestureController::didFirstVisuallyNonEmptyLayoutForMainFrame):
        (WebKit::ViewGestureController::didRepaintAfterNavigation):
        (WebKit::ViewGestureController::didHitRenderTreeSizeThreshold):
        (WebKit::ViewGestureController::didRestoreScrollPosition):
        (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState):
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame):
        (WebKit::ViewGestureController::checkForActiveLoads):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::eventsDescription):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::SnapshotRemovalTracker):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::log):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::start):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::reset):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::eventOccurred):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::cancelOutstandingEvent):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::fireRemovalCallbackIfPossible):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::fireRemovalCallbackImmediately):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::watchdogTimerFired):
        (WebKit::ViewGestureController::SnapshotRemovalTracker::startWatchdog):
        Build a platform-independent SnapshotRemovalTracker, which keeps track of
        various events that we wait for before removing the snapshot. This
        is constructed from the union of ViewGestureController{IOS, Mac}'s snapshot
        removal code, and each platform ViewGestureController can specify which
        events to wait for (because this currently differs slightly).

        Add logging to SnapshotRemovalTracker to make debugging snapshot removal
        issues much easier.

        * UIProcess/mac/ViewGestureController.h:
        (WebKit::ViewGestureController::backgroundColorForCurrentSnapshot):
        (WebKit::ViewGestureController::didFinishLoadForMainFrame):
        (WebKit::ViewGestureController::didFailLoadForMainFrame):

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::platformTeardown):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        (WebKit::ViewGestureController::setRenderTreeSize):
        (WebKit::ViewGestureController::willCommitPostSwipeTransitionLayerTree):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        (viewGestureControllersForAllPages): Deleted.
        (WebKit::ViewGestureController::ViewGestureController): Deleted.
        (WebKit::ViewGestureController::~ViewGestureController): Deleted.
        (WebKit::ViewGestureController::didRestoreScrollPosition): Deleted.
        (WebKit::ViewGestureController::mainFrameLoadDidReachTerminalState): Deleted.
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame): Deleted.
        (WebKit::ViewGestureController::activeLoadMonitoringTimerFired): Deleted.
        (WebKit::ViewGestureController::swipeSnapshotWatchdogTimerFired): Deleted.
        (WebKit::ViewGestureController::removeSwipeSnapshotIfReady): Deleted.
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::platformTeardown):
        (WebKit::ViewGestureController::endSwipeGesture):
        (WebKit::ViewGestureController::forceRepaintIfNeeded):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        (WebKit::ViewGestureController::ViewGestureController): Deleted.
        (WebKit::ViewGestureController::~ViewGestureController): Deleted.
        (WebKit::ViewGestureController::beginSwipeGesture): Deleted.
        (WebKit::ViewGestureController::didHitRenderTreeSizeThreshold): Deleted.
        (WebKit::ViewGestureController::didFirstVisuallyNonEmptyLayoutForMainFrame): Deleted.
        (WebKit::ViewGestureController::mainFrameLoadDidReachTerminalState): Deleted.
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame): Deleted.
        (WebKit::ViewGestureController::activeLoadMonitoringTimerFired): Deleted.
        (WebKit::ViewGestureController::swipeSnapshotWatchdogTimerFired): Deleted.
        (WebKit::ViewGestureController::removeSwipeSnapshotAfterRepaint): Deleted.
        Move shareable snapshot removal code to a new platform-independent ViewGestureController file.
        Move the ViewGestureController constructor/destructor to the platform-independent file.

        * UIProcess/mac/ViewGestureController.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:

2015-08-11  Andy Estes  <aestes@apple.com>

        [Cocoa] Add redirect support to CustomProtocolManager
        https://bugs.webkit.org/show_bug.cgi?id=147871

        Reviewed by Dan Bernstein.
        
        NSURLProtocols have the ability to generate redirect responses. This change teaches CustomProtocolManager how to handle them.

        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (WebKit::CustomProtocolManager::wasRedirectedToRequest): Called -URLProtocol:wasRedirectedToRequest:redirectResponse: on the NSURLProtocolClient.
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/Network/CustomProtocols/CustomProtocolManager.messages.in: Defined WasRedirectedToRequest.
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
        (WebKit::CustomProtocolManager::wasRedirectedToRequest): Defined empty function.
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (-[WKCustomProtocolLoader connection:willSendRequest:redirectResponse:]): If a redirect response is received, send WasRedirectedToRequest and return nil to ignore the redirect.

2015-08-13  Andy Estes  <aestes@apple.com>

        [Cocoa] Downloads do not start if policy decision is made asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=147985

        Reviewed by Brady Eidson.

        * WebProcess/Network/WebResourceLoader.cpp: Updated to include SubresourceLoader.h.
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::convertMainResourceLoadToDownload): Started a new download if the main resource loader is not calling didReceiveResponse.

2015-08-14  Simon Fraser  <simon.fraser@apple.com>

        Speculative fix for iOS build failure.

        * Shared/mac/RemoteLayerTreeTransaction.h:

2015-08-14  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, remove dead code after r188385.

        * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp:
        (webkitUserMediaPermissionRequestAllow): Deleted.

2015-08-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build with !ENABLE(MEDIA_STREAM) after r188385.

        * UIProcess/API/C/WKUserMediaPermissionRequest.cpp:
        (WKUserMediaPermissionRequestDeviceNamesVideo):
        (WKUserMediaPermissionRequestDeviceNamesAudio):

2015-08-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r188386.

        * UIProcess/API/gtk/WebKitWindowProperties.cpp:
        (webkitWindowPropertiesUpdateFromWebWindowFeatures):

2015-08-13  Tim Horton  <timothy_horton@apple.com>

        Performing a Lookup on wrapped text puts the popover arrow in the wrong place (off to the right)
        https://bugs.webkit.org/show_bug.cgi?id=148012
        <rdar://problem/19238094>

        Reviewed by Simon Fraser.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _animationControllerForText]):
        Adopt the new SPI, handing it the first text rect, instead of having it
        guess where to put the popover.

2015-08-13  Commit Queue  <commit-queue@webkit.org>

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

        Fix EFL after the rollout of r188404 (Requested by smfr on
        #webkit).

        Reverted changeset:

        "[CMake] Unreviewed build fix after r188404"
        http://trac.webkit.org/changeset/188418

2015-08-13  Commit Queue  <commit-queue@webkit.org>

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

        Broke 4 API tests (Requested by smfr on #webkit).

        Reverted changeset:

        "Add WKWindowFeaturesRef and a new modern createNewPage UI
        client callback"
        https://bugs.webkit.org/show_bug.cgi?id=147989
        http://trac.webkit.org/changeset/188404

2015-08-13  Tim Horton  <timothy_horton@apple.com>

        Try to fix the Gtk/EFL build.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):

2015-08-13  Tim Horton  <timothy_horton@apple.com>

        Refactor and improve TextIndicator to prepare for tests
        https://bugs.webkit.org/show_bug.cgi?id=147622

        Reviewed by Simon Fraser.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeOptionalImage):
        (IPC::decodeOptionalImage):
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        Move encode/decodeOptionalImage to their own functions to avoid duplication.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dictionaryLookupPopoverWillClose:]):
        (-[WKView _setTextIndicator:]):
        (-[WKView _setTextIndicator:withLifetime:]):
        (-[WKView _clearTextIndicatorWithAnimation:]):
        (-[WKView _dismissContentRelativeChildWindows]):
        (-[WKView _dismissContentRelativeChildWindowsWithAnimation:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setTextIndicator):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setTextIndicator):
        (WebKit::PageClientImpl::clearTextIndicator):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setTextIndicator):
        (WebKit::PageClientImpl::clearTextIndicator):
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _animationControllerForText]):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        (WebKit::shouldUseTextIndicatorForLink): Deleted.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):
        Adopt TextIndicatorOptions.
        Adjust to Range method renames.

2015-08-13  Jaehun Lim  <ljaehun.lim@samsung.com>

        [CMake] Unreviewed build fix after r188404

        * CMakeLists.txt: Add UIProcess/API/APIWindowFeatures.cpp, UIProcess/API/C/WKWindowFeaturesRef.cpp

2015-08-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        A focused node should not be assisted when handling touch events synchronously
        https://bugs.webkit.org/show_bug.cgi?id=147836
        <rdar://problem/22204108>

        Reviewed by Enrica Casucci.

        Makes interaction with touch handlers no longer assist the currently focused element in the
        general case. Added plumbing to reassist a currently focused node when dispatching touch events,
        so that an input that programmatically focuses itself and prevents default on a touch event will
        be properly assisted when it has been programmatically focused (either through Javascript or the
        autofocus attribute) prior to receiving the touch event. This patch also removes the now
        unnecessary special-casing of the Gmail settings app that currently makes the keyboard deploy
        upon autofocus.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]): Removed
            special case to avoid the early return for Gmail Add Account.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Added a handler for refocusing an element.
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::elementDidRefocus): Makes refocusing an element trigger input
            assistance on iOS.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dispatchTouchEvent): Removes logic to focus the currently focused element upon
            receiving a touch event.

2015-08-13  Anders Carlsson  <andersca@apple.com>

        Add WKWindowFeaturesRef and a new modern createNewPage UI client callback
        https://bugs.webkit.org/show_bug.cgi?id=147989

        Reviewed by Tim Horton.

        * Platform/IPC/mac/ConnectionMac.mm:
        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * UIProcess/API/APIWindowFeatures.cpp: Added.
        * UIProcess/API/APIWindowFeatures.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/API/C/WKWindowFeaturesRef.cpp: Added.
        (WKWindowFeaturesGetTypeID):
        * UIProcess/API/C/WKWindowFeaturesRef.h: Added.
        * UIProcess/API/Cocoa/WKWindowFeatures.mm:
        (-[WKWindowFeatures dealloc]):
        (-[WKWindowFeatures menuBarVisibility]):
        (-[WKWindowFeatures statusBarVisibility]):
        (-[WKWindowFeatures toolbarsVisibility]):
        (-[WKWindowFeatures allowsResizing]):
        (-[WKWindowFeatures x]):
        (-[WKWindowFeatures y]):
        (-[WKWindowFeatures width]):
        (-[WKWindowFeatures height]):
        (-[WKWindowFeatures _apiObject]):
        (-[WKWindowFeatures _initWithWindowFeatures:]): Deleted.
        * UIProcess/API/Cocoa/WKWindowFeaturesInternal.h:
        (WebKit::wrapper):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * WebKit2.xcodeproj/project.pbxproj:

2015-08-13  Simon Fraser  <simon.fraser@apple.com>

        FilterOperation.h should not include FilterEffect.h
        https://bugs.webkit.org/show_bug.cgi?id=147970

        Reviewed by Daniel Bates.

        FilterEffect.h pulls in lots of JSC goop via runtime/Uint8ClampedArray.h,
        so move its include to FilterOperation.cpp.
        
        Causes include bloat because FilterOperation.h is pulled in via RenderStyle.h.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:

2015-08-12  Anders Carlsson  <andersca@apple.com>

        Use WTF::Optional in WindowFeatures
        https://bugs.webkit.org/show_bug.cgi?id=147956

        Reviewed by Sam Weinig.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<WindowFeatures>::encode): Deleted.
        (IPC::ArgumentCoder<WindowFeatures>::decode): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKWindowFeatures.mm:
        (-[WKWindowFeatures _initWithWindowFeatures:]):

2015-08-13  Matthew Daiter  <mdaiter@apple.com>

        Linking device query ability from WebKit2 to clients
        https://bugs.webkit.org/show_bug.cgi?id=147263
        <rdar://problem/21983345>

        Reviewed by Jer Noble.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::setColorMatchUntaggedContent):
        (WebKit::LayerHostingContext::colorMatchUntaggedContent):
        * UIProcess/API/C/WKUserMediaPermissionRequest.cpp:
        (WKUserMediaPermissionRequestAllow):
        (WKUserMediaPermissionRequestDeviceNamesVideo):
        (WKUserMediaPermissionRequestDeviceNamesAudio):
        * UIProcess/API/C/WKUserMediaPermissionRequest.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
        (WebKit::UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision): Deleted.
        * UIProcess/UserMediaPermissionRequestManagerProxy.h:
        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::allow):
        (WebKit::UserMediaPermissionRequestProxy::deny):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision):


2015-08-12  Alexey Proskuryakov  <ap@apple.com>

        [Mac] WebKit processes should have access to com.apple.nesessionmanager.flow-divert-token
        https://bugs.webkit.org/show_bug.cgi?id=147949
        rdar://problem/22254920

        Reviewed by Anders Carlsson.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2015-08-12  Brian Burg  <bburg@apple.com>

        Web Inspector: CRASH under WebInspector::closeFrontend for some protocol tests
        https://bugs.webkit.org/show_bug.cgi?id=147948

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::closeFrontend): Don't invalidate the channel if it's null.
        * WebProcess/WebPage/WebInspector.h: Add default member variable values.

2015-08-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Not receiving responses for async request IndexedDB.requestDatabaseNames
        https://bugs.webkit.org/show_bug.cgi?id=147844

        Reviewed by Brian Burg.

        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp:
        (WebKit::WebIDBFactoryBackend::getDatabaseNames):
        This method should not return without calling either the success
        or error callbacks. In this case, it can succeed with an empty list.

2015-08-12  Enrica Casucci  <enrica@apple.com>

        Element interaction should not be canceled when the menu is already being shown.
        https://bugs.webkit.org/show_bug.cgi?id=147945
        rdar://problem/22206433

        Reviewed by Beth Dakin.

        When preview is canceled by the action menu gesture, we should not stop interacting
        with the element, since the information about the element is used for the menu actions.
        We now expose a new method in the action sheet assistant to know if the action sheed is
        being shown and we use this as an indication that we should not stop the interaction
        with the element.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant isShowingSheet]): Added.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interactionStoppedFromPreviewItemController:]): Do not stop
        the interaction if the sheet is being shown.

2015-08-12  Matt Rajca  <mrajca@apple.com>

        Fixed the Release build when MEDIA_SESSION is enabled.

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

2015-08-07  Matt Rajca  <mrajca@apple.com>

        Media Session: notify the UI process when media controls are enabled/disabled
        https://bugs.webkit.org/show_bug.cgi?id=147802

        Reviewed by Eric Carlson.

        * UIProcess/WebMediaSessionFocusManager.cpp:
        (WebKit::WebMediaSessionFocusManager::playbackAttributeDidChange): Generalized to take different attributes.
        (WebKit::WebMediaSessionFocusManager::mediaElementIsPlayingDidChange): Deleted.
        * UIProcess/WebMediaSessionFocusManager.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange): Process new attributes for enabling/disabling media controls.

2015-08-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Implement selector highlighting for iOS
        https://bugs.webkit.org/show_bug.cgi?id=147919

        Reviewed by Timothy Hatcher.

        * UIProcess/WKInspectorHighlightView.mm:
        (-[WKInspectorHighlightView _layoutForNodeHighlight:offset:]):
        Added offset parameter to start drawing the highlight at that index of the highlight quad list.

        (-[WKInspectorHighlightView _layoutForNodeListHighlight:]):
        Loops through the highlight quads and draws a new highlight for every 4 highlight quad objects.

        (-[WKInspectorHighlightView update:]):
        Now uses the light highlighting for both nodes and lists of nodes.

2015-08-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkProcess: DNS prefetch happens in the Web Process
        https://bugs.webkit.org/show_bug.cgi?id=147824

        Reviewed by Alexey Proskuryakov.

        DNS prefetch requests started in the WebProcess should be sent to
        the network process when it's enabled.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::prefetchDNS): Do the
        actual DNS prefetch.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in: Add
        PrefetchDNS message.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp:
        (webkitWebExtensionDidReceiveMessage): Use WebProcess::prefetchDNS().
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::prefetchDNS): Ditto.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary): Use
        FrameLoaderClient to do the DNS prefetch.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::prefetchDNS): Send the request to the network
        process if it's enabled, otherwise do the actual DNS prefetch.
        * WebProcess/WebProcess.h:

2015-08-11  Hunseop Jeong  <hs85.jeong@samsung.com>

        Try to fix the EFL build after r188279
        https://bugs.webkit.org/show_bug.cgi?id=147917

        Reviewed by Gyuyoung Kim.

        Replaced the WKPageLoaderClient with variable name because it is removed in r188279.

        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PagePolicyClientEfl.cpp:
        (WebKit::PagePolicyClientEfl::PagePolicyClientEfl):

2015-08-11  Andy Estes  <aestes@apple.com>

        Tried again to fix the iOS build.

        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS initWithProcessPool:]):

2015-08-11  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build.

        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS initWithProcessPool:]):

2015-08-11  Andy Estes  <aestes@apple.com>

        WebFrameLoaderClient::dispatchDecidePolicyForResponse() calls an std::function after it's been moved from
        https://bugs.webkit.org/show_bug.cgi?id=147873

        Reviewed by Alexey Proskuryakov.
        
        I noticed during code inspection that we were calling an std::function after WTF::move() has been called on it.
        Calling an empty std::function results in a C++ exception being thrown. I don't know how to make a sync IPC
        message fail, so I'm not sure how to test this.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): Called didReceivePolicyDecision instead.

2015-08-11  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r188053): Sometimes unable to save an image from Google Search/
        imgur via long press
        https://bugs.webkit.org/show_bug.cgi?id=147896

        Reviewed by Enrica Casucci.

        http://trac.webkit.org/changeset/188053 added code to call cleanupSheet when 
        the long press gesture is cancelled. However, the gesture will be called with 
        the cancelled state when then user taps an item in the action sheet (such as 
        “save image”), and sometimes the “cancel” comes in before the image has been 
        saved. That is a problem because we need to avoid cleaning up the sheet until 
        after the image is saved. Before that patch, we never cleaned up the sheet on 
        cancel, so this patch goes back to that behavior. We also have to remove some 
        assertions that assume that everything will be totally cleaned up when a new 
        sheet is created, but that is not necessarily true due to interactions 
        between the preview gesture and the long press gesture. 

        Remove assertions.
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):

        Revert the part of Enrica’s patch that called cleanupSheet when the gesture 
        is cancelled.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _longPressRecognized:]):

2015-08-11  Anders Carlsson  <andersca@apple.com>

        Remove unversioned client structs from the C SPI
        https://bugs.webkit.org/show_bug.cgi?id=147894

        Reviewed by Dan Bernstein.

        * Shared/API/c/WKConnectionRef.h:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKContextConnectionClient.h:
        * UIProcess/API/C/WKContextDownloadClient.h:
        * UIProcess/API/C/WKContextHistoryClient.h:
        * UIProcess/API/C/WKContextInjectedBundleClient.h:
        * UIProcess/API/C/WKCookieManager.h:
        * UIProcess/API/C/WKDatabaseManager.h:
        * UIProcess/API/C/WKGeolocationManager.h:
        * UIProcess/API/C/WKIconDatabase.h:
        * UIProcess/API/C/WKNotificationProvider.h:
        * UIProcess/API/C/WKPageContextMenuClient.h:
        * UIProcess/API/C/WKPageDiagnosticLoggingClient.h:
        * UIProcess/API/C/WKPageFindClient.h:
        * UIProcess/API/C/WKPageFindMatchesClient.h:
        * UIProcess/API/C/WKPageFormClient.h:
        * UIProcess/API/C/WKPageLoaderClient.h:
        * UIProcess/API/C/WKPagePolicyClient.h:
        * UIProcess/API/C/WKPageUIClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageBanner.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageContextMenuClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageDiagnosticLoggingClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageEditorClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageFormClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageFullScreenClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePagePolicyClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageResourceLoadClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageUIClient.h:

2015-08-11  Dan Bernstein  <mitz@apple.com>

        Reverted r188255, because it turned out that delegates do nonot need this information.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::footerHeight):
        (API::UIClient::drawHeader):
        (API::UIClient::drawFooter):
        (API::UIClient::printFrame):
        (API::UIClient::canRunModal):
        (API::UIClient::runModal):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIDelegate):
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::reachedApplicationCacheOriginQuota):
        (WebKit::UIDelegate::UIClient::printFrame):
        (WebKit::UIDelegate::UIClient::close):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runOpenPanel):
        (WebKit::WebPageProxy::printFrame):
        (WebKit::WebPageProxy::printMainFrame):
        (WebKit::WebPageProxy::setMediaVolume):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setShouldSendEventsSynchronously):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::print):
        (WebKit::WebChromeClient::exceededDatabaseQuota):

2015-08-11  Dan Bernstein  <mitz@apple.com>

        [Cocoa] The UI delegate can't tell if printing was user-initiated
        https://bugs.webkit.org/show_bug.cgi?id=147869

        Reviewed by Sam Weinig.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::printFrame): Added processingUserGesture argument.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient): Updated for new client function signature.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Added userInitiated boolean argument to
          -_webView:printFrame:.

        * UIProcess/Cocoa/UIDelegate.h: Added bool to m_delegateMethods for the new method.
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIDelegate):
        (WebKit::UIDelegate::setDelegate): Initialized new bool.
        (WebKit::UIDelegate::UIClient::printFrame): Pass processingUserGesture as the delegate’s
          userInitiated argument.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::printFrame): Added processingUserGesture argument, passing it along
          to the client.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPageProxy.messages.in: Added processingUserGesture argument to printFrame.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::print): Pass new argument.

2015-08-10  Matthew Daiter  <mdaiter@apple.com>

        Add MediaDeviceIdentifier to WebsiteDataTypes
        https://bugs.webkit.org/show_bug.cgi?id=147853

        Reviewed by Jer Noble.

        * Shared/WebsiteData/WebsiteDataTypes.h:

2015-08-10  Sam Weinig  <sam@webkit.org>

        Try to fix the 32-bit build.

        * UIProcess/API/mac/WKViewInternal.h:

2015-08-08  Sam Weinig  <sam@webkit.org>

        Replace WebPageConfiguration with API::PageConfiguration and expose a C-SPI accessor for it
        https://bugs.webkit.org/show_bug.cgi?id=147811

        Reviewed by Darin Adler.

        - Adds the missing pieces from WebPageConfiguration into API::PageConfiguration.
        - Adds C-SPI to set and get the WebsiteDataStore on the WKPageConfigurationRef.
        - Uses API::PageConfiguration to pass configuration information from WKWebView/WKView 
          to WebPageProxy.
        - Stores the API::PageConfiguration on the WebPageProxy and exposes a new C-SPI function,
          WKPageCopyPageConfiguration, to get a copy of it.

        * UIProcess/API/APIPageConfiguration.cpp:
        (API::PageConfiguration::create):
        (API::PageConfiguration::PageConfiguration):
        (API::PageConfiguration::~PageConfiguration):
        (API::PageConfiguration::copy):
        (API::PageConfiguration::processPool):
        (API::PageConfiguration::setRelatedPage):
        (API::PageConfiguration::visitedLinkProvider):
        (API::PageConfiguration::setVisitedLinkProvider):
        (API::PageConfiguration::websiteDataStore):
        (API::PageConfiguration::setWebsiteDataStore):
        (API::PageConfiguration::sessionID):
        (API::PageConfiguration::setSessionID):
        (API::PageConfiguration::webPageConfiguration): Deleted.
        * UIProcess/API/APIPageConfiguration.h:
        (API::PageConfiguration::preferenceValues):
        (API::PageConfiguration::treatsSHA1SignedCertificatesAsInsecure):
        (API::PageConfiguration::setTreatsSHA1SignedCertificatesAsInsecure):
        (API::PageConfiguration::alwaysRunsAtForegroundPriority):
        (API::PageConfiguration::setAlwaysRunsAtForegroundPriority):
        (API::PageConfiguration::create): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetPageGroup):
        (WKPageCopyPageConfiguration):
        (WKPageLoadURL):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPageConfigurationRef.cpp:
        (WKPageConfigurationSetRelatedPage):
        (WKPageConfigurationGetWebsiteDataStore):
        (WKPageConfigurationSetWebsiteDataStore):
        * UIProcess/API/C/WKPageConfigurationRef.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPrimaryTrackingArea:]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (-[WKView initWithFrame:configurationRef:]):
        (-[WKView wantsUpdateLayer]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::create):
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::configuration):
        (WebKit::WebPageProxy::processIdentifier):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::pageID):
        (WebKit::WebPageProxy::sessionID):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::download):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::webPage):
        (WebKit::WebProcessProxy::createWebPage):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::processPool):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
        (-[WKContentView initWithFrame:processPool:configuration:wkView:]):
        (-[WKContentView dealloc]):

2015-08-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r187131 and r187286.
        https://bugs.webkit.org/show_bug.cgi?id=147839

         Causing mroe frequent crashes with invalid layer bounds
        (rdar://problem/21465328) (Requested by smfr on #webkit).

        Reverted changesets:

        "[iOS] Menu drop down such as on nike.com does not stay"
        https://bugs.webkit.org/show_bug.cgi?id=147047
        http://trac.webkit.org/changeset/187131

        "[iOS] REGRESSION (187131): Loading CuteOverload zooms in to
        the top left corner."
        https://bugs.webkit.org/show_bug.cgi?id=147251
        http://trac.webkit.org/changeset/187286

2015-08-07  Matt Rajca  <mrajca@apple.com>

        Media Session: generalize isFocusedContentMediaElementPlaying so it works with other playback attributes
        https://bugs.webkit.org/show_bug.cgi?id=147797

        Reviewed by Simon Fraser.

        * UIProcess/API/C/WKMediaSessionFocusManager.cpp:
        (WKMediaSessionFocusManagerValueForPlaybackAttribute):
        (WKMediaSessionFocusManagerIsFocusedContentMediaElementPlaying): Deleted.
        * UIProcess/API/C/WKMediaSessionFocusManager.h:
        * UIProcess/WebMediaSessionFocusManager.cpp:
        (WebKit::WebMediaSessionFocusManager::valueForPlaybackAttribute):
        (WebKit::WebMediaSessionFocusManager::mediaControlIsEnabledDidChange):
        (WebKit::WebMediaSessionFocusManager::isFocusedContentMediaElementPlaying): Deleted.
        (WebKit::WebMediaSessionFocusManager::mediaElementIsPlayingDidChange): Deleted.
        * UIProcess/WebMediaSessionFocusManager.h:

2015-08-10  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Fix forward declarations of CoordinatedGraphicsLayerState, ViewportAttributes
        https://bugs.webkit.org/show_bug.cgi?id=147823

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.h:

2015-08-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash when the web view is destroyed while the screensaver DBUs proxy is being created
        https://bugs.webkit.org/show_bug.cgi?id=147780

        Reviewed by Sergio Villar Senin.

        We should cancel the screenSaverInhibitCancellable on
        dispose. Also use adoptGRef() when creating the cancellable object
        to not leak it.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDispose):
        (webkitWebViewBaseSendInhibitMessageToScreenSaver):
        (webkitWebViewBaseInhibitScreenSaver):

2015-08-09  Chris Dumez  <cdumez@apple.com>

        Follow-up nit fixes after r187691.
        https://bugs.webkit.org/show_bug.cgi?id=128006

        Reviewed by Gavin Barraclough.

        Use modern for-loops instead of explicit iterators.

        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::shouldCoalesceChallenge):
        (WebKit::AuthenticationManager::coalesceChallengesMatching):

2015-08-07  Filip Pizlo  <fpizlo@apple.com>

        Lightweight locks should be adaptive
        https://bugs.webkit.org/show_bug.cgi?id=147545

        Reviewed by Geoffrey Garen.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::clearQueuedTouchEventsForPage):
        (WebKit::EventDispatcher::getQueuedTouchEventsForPage):
        (WebKit::EventDispatcher::touchEvent):
        (WebKit::EventDispatcher::dispatchTouchEvents):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        * WebProcess/WebPage/ViewUpdateDispatcher.h:

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

        Temporarily allow programmatic input assistance for adding Gmail account
        https://bugs.webkit.org/show_bug.cgi?id=147792

        Reviewed by Enrica Casucci.
        <rdar://problem/22126518>

        Temporary fix for keyboard input sliding out and immediately back in upon user interaction
        in the Gmail 2-factor authentication page.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]): Early
            return no longer triggers due to lack of user interaction when adding a new Gmail account
            through Settings.

2015-08-07  Brady Eidson  <beidson@apple.com>

        Move concrete KeyedDecoder/Encoder implementations to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=147757.

        Rubberstamped by Andy Estes.

        * DatabaseProcess/IndexedDB/IDBSerialization.cpp:
        (WebKit::serializeIDBKeyPath):
        (WebKit::deserializeIDBKeyPath):
        (WebKit::serializeIDBKeyData):
        (WebKit::deserializeIDBKeyData):
        
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebKit2.xcodeproj/project.pbxproj:

2015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ compile warning also introduced in r188121.

        * UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp:
        (webkit_install_missing_media_plugins_permission_request_get_description):

2015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ debug build after r188121.

        * UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp:
        (webkit_install_missing_media_plugins_permission_request_get_description):

2015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Do not automatically show PackageKit codec installation notifications
        https://bugs.webkit.org/show_bug.cgi?id=135973

        Reviewed by Philippe Normand.

        Add InstallMissingMediaPluginsPermissionRequest to ask the API
        layer whether to allow or deny the installation of missing media
        plugins. And add a GTK+ implementation based on current permission
        request API. Replace the
        PageClientImpl::createGstInstallPluginsContext() with
        decicePolicyForInstallMissingMediaPluginsPermissionRequest() that
        passes the InstallMissingMediaPluginsPermissionRequest object to
        the API layer. The allow method receives the
        GstInstallPluginsContext now, so that it can be created by the API implementation.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::decicePolicyForInstallMissingMediaPluginsPermissionRequest):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp: Added.
        (createGstInstallPluginsContext):
        (webkitInstallMissingMediaPluginsPermissionRequestAllow):
        (webkitInstallMissingMediaPluginsPermissionRequestDeny):
        (webkit_permission_request_interface_init):
        (webkitInstallMissingMediaPluginsPermissionRequestDispose):
        (webkit_install_missing_media_plugins_permission_request_class_init):
        (webkitInstallMissingMediaPluginsPermissionRequestCreate):
        (webkit_install_missing_media_plugins_permission_request_get_description):
        * UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h: Added.
        * UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRequestInstallMissingMediaPlugins):
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/webkit2.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/efl/WebViewEfl.h:
        * UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp: Copied from Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp.
        (WebKit::InstallMissingMediaPluginsPermissionRequest::InstallMissingMediaPluginsPermissionRequest):
        (WebKit::InstallMissingMediaPluginsPermissionRequest::~InstallMissingMediaPluginsPermissionRequest):
        (WebKit::InstallMissingMediaPluginsPermissionRequest::allow):
        (WebKit::InstallMissingMediaPluginsPermissionRequest::deny):
        (WebKit::InstallMissingMediaPluginsPermissionRequest::didEndRequestInstallMissingMediaPlugins):
        * UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h: Copied from Source/WebKit2/WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp.
        (WebKit::InstallMissingMediaPluginsPermissionRequest::create):
        (WebKit::InstallMissingMediaPluginsPermissionRequest::page):
        (WebKit::InstallMissingMediaPluginsPermissionRequest::details):
        (WebKit::InstallMissingMediaPluginsPermissionRequest::description):
        * UIProcess/gstreamer/WebPageProxyGStreamer.cpp:
        (WebKit::WebPageProxy::requestInstallMissingMediaPlugins):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestInstallMissingMediaPlugins):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp:
        (WebKit::WebPage::requestInstallMissingMediaPlugins):

2015-08-06  Beth Dakin  <bdakin@apple.com>

        TextIndicator can have stale contentImage data and crash
        https://bugs.webkit.org/show_bug.cgi?id=147770
        -and corresponding-
        rdar://problem/22181735

        Reviewed by Tim Horton.

        If there is no contentImage or contentImageWithHighlight, set them to 
        nullptr.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::decode):

2015-08-06  Dan Bernstein  <mitz@apple.com>

        Fixed all the builds after trying to fix the non-HAVE(LINK_PREVIEW) build.

        * UIProcess/ios/WKContentViewInteraction.mm:

2015-08-06  Dan Bernstein  <mitz@apple.com>

        Fixed the non-HAVE(LINK_PREVIEW) build.

        * UIProcess/ios/WKContentViewInteraction.mm:

2015-08-06  Enrica Casucci  <enrica@apple.com>

        Cleanup action sheet only when long press is canceled (non ended).
        https://bugs.webkit.org/show_bug.cgi?id=147766
        rdar://problem/22181842

        Reviewed by Tim Horton.

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

2015-08-06  Matt Rajca  <mrajca@apple.com>

        Media Session: notify focus manager clients when the playing state of the focused media element changes
        https://bugs.webkit.org/show_bug.cgi?id=147745

        Reviewed by Tim Horton.

        Added plumbing to allow focus manager's clients to be notified when the focused Content media element begins
        playing or is paused.

        * UIProcess/API/C/WKMediaSessionFocusManager.cpp:
        (WKMediaSessionFocusManagerSetClient):
        * UIProcess/API/C/WKMediaSessionFocusManager.h:
        * UIProcess/WebMediaSessionFocusManager.cpp:
        (WebKit::WebMediaSessionFocusManager::initializeClient):
        (WebKit::WebMediaSessionFocusManager::mediaElementIsPlayingDidChange):
        * UIProcess/WebMediaSessionFocusManager.h:
        * UIProcess/WebMediaSessionFocusManagerClient.cpp:
        (WebKit::WebMediaSessionFocusManagerClient::didChangePlaybackAttribute):
        * UIProcess/WebMediaSessionFocusManagerClient.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-08-06  Alex Christensen  <achristensen@webkit.org>

        Make CMake usable on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=147756

        Reviewed by Tim Horton.

        * PlatformMac.cmake:
        DatabaseProcess_SOURCES needs something in order to not have errors when generating build systems from CMake.
        This doesn't fix everything, but it can now be used to build jsc again.

2015-08-06  Enrica Casucci  <enrica@apple.com>

        Build fix for iOS after http://trac.webkit.org/changeset/188053.

        Unreviewed.

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

2015-08-06  Enrica Casucci  <enrica@apple.com>

        Allow long press to cancel link preview.
        https://bugs.webkit.org/show_bug.cgi?id=147743
        rdar://problem/22128839

        Reviewed by Tim Horton.

        We should be able to show the context menu at the beginnig of link preview.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _longPressRecognized:]):
        (-[WKContentView _singleTapRecognized:]):
        (-[WKContentView _registerPreview]):
        (-[WKContentView _unregisterPreview]):

2015-08-06  Matt Rajca  <mrajca@apple.com>

        Media Session: rename isFocusedContentMediaElementPaused and get rid of callback
        https://bugs.webkit.org/show_bug.cgi?id=147726

        Reviewed by Simon Fraser.

        - isFocusedContentMediaElementPaused should be renamed to isFocusedContentMediaElementPlaying to match recent
          refactoring work.
        - isFocusedContentMediaElementPlaying itself does not need a callback anymore because the value can be returned
          directly.

        * UIProcess/API/C/WKMediaSessionFocusManager.cpp:
        (WKMediaSessionFocusManagerIsFocusedContentMediaElementPlaying): Removed callback and renamed from...
        (WKMediaSessionFocusManagerIsFocusedContentMediaElementPaused): Deleted.
        * UIProcess/API/C/WKMediaSessionFocusManager.h:
        * UIProcess/WebMediaSessionFocusManager.cpp:
        (WebKit::WebMediaSessionFocusManager::isFocusedContentMediaElementPlaying): Removed callback and renamed from...
        (WebKit::WebMediaSessionFocusManager::isFocusedContentMediaElementPaused): Deleted.
        * UIProcess/WebMediaSessionFocusManager.h:

2015-08-06  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Bump EFL version to 1.15.0
        https://bugs.webkit.org/show_bug.cgi?id=147450

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake:

2015-08-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash closing a page when a context menu is open
        https://bugs.webkit.org/show_bug.cgi?id=147682

        Reviewed by Sergio Villar Senin.

        Implement WebContextMenuProxy::cancelTracking() to clear the
        internal menu when the web page is closed.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::cancelTracking):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk): Deleted.
        * UIProcess/gtk/WebContextMenuProxyGtk.h:

2015-08-04  Matt Rajca  <mrajca@apple.com>

        Media Session: push paused state to the media session focus manager instead of polling
        https://bugs.webkit.org/show_bug.cgi?id=147633

        Reviewed by Simon Fraser.

        * UIProcess/WebMediaSessionFocusManager.cpp:
        (WebKit::WebMediaSessionFocusManager::isFocusedContentMediaElementPaused): Report whether the focused media
         element is currently playing. The callback is no longer necessary and will be removed in a future patch in
         favor of returning a value directly.
        (WebKit::WebMediaSessionFocusManager::mediaElementIsPlayingDidChange): Keep track of whether the focused media
         element is currently playing.
        * UIProcess/WebMediaSessionFocusManager.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange): If the focused media element begins/ends playing, keep track
         of its playing state.
        (WebKit::WebPageProxy::isMediaElementPaused): Deleted. We now push media playback state changes instead of
         polling.
        * UIProcess/WebPageProxy.h: isPlayingMediaDidChange is now passed the ID of the media element that triggered
         the 'playing' state change. This can be used in conjunction with the IsSourcePlaying media flag to identify
         whether the source element begin/ended playing.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setPluginIsPlayingAudio): Since a media element did not trigger this, pass in 0 for the
         source media element.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::isPlayingMediaDidChange): isPlayingMediaDidChange is now passed the ID of the media
         element that triggered the 'playing' state change.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::isMediaElementPaused): Deleted. We now push media playback state changes instead of polling.
        * WebProcess/WebPage/WebPage.h: Ditto.
        * WebProcess/WebPage/WebPage.messages.in: Ditto.

2015-08-05  Tim Horton  <timothy_horton@apple.com>

        PDFPlugins are clipped in link previews (and remain so when opened)
        https://bugs.webkit.org/show_bug.cgi?id=147708
        <rdar://problem/22055130>

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView _supportsArbitraryLayoutModes]):
        (-[WKView _didCommitLoadForMainFrame]):
        (-[WKView _setLayoutMode:]):
        (-[WKView _setViewScale:]):
        Avoid using any layout mode other than "ViewSize" for main frame PluginDocuments,
        because they will often end up behaving incorrectly (especially with PDFPlugin,
        which is even more special in that it takes over application of page scale).

        Save any incoming changes to the viewScale and layoutMode, and re-apply
        them once we load something in the main frame that is *not* a PluginDocument.

        * UIProcess/API/mac/WKViewInternal.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scalePage):
        Make sure to reset WebCore's page scale if the main frame contains a 
        PluginDocument that takes care of page scale itself.

        (WebKit::WebPage::didCommitLoad):
        Do the same thing as what we do in WKView _didCommitLoadForMainFrame,
        but without the UI process round-trip, to avoid an ugly flash.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didCommitLoad):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::containsPluginDocument):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        Plumb and keep track of whether the main frame contains a PluginDocument or not.

2015-08-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out http://trac.webkit.org/changeset/187972.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::postDatabaseTask):
        (WebKit::DatabaseProcess::performNextDatabaseTask):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::shutdown):
        (WebKit::UniqueIDBDatabase::postMainThreadTask):
        (WebKit::UniqueIDBDatabase::performNextMainThreadTask):
        (WebKit::UniqueIDBDatabase::postDatabaseTask):
        (WebKit::UniqueIDBDatabase::performNextDatabaseTask):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingSyncReply):
        (IPC::Connection::connectionDidClose):
        * Platform/IPC/Connection.h:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::appendUpdate):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::createCompositingThread):
        (WebKit::ThreadedCompositor::runCompositingThread):
        (WebKit::ThreadedCompositor::terminateCompositingThread):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (WebKit::CustomProtocolManager::addCustomProtocol):
        (WebKit::CustomProtocolManager::removeCustomProtocol):
        (WebKit::CustomProtocolManager::registerScheme):
        (WebKit::CustomProtocolManager::unregisterScheme):
        (WebKit::CustomProtocolManager::supportsScheme):
        (WebKit::CustomProtocolManager::protocolForID):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::removePluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::addScrollingTreeForPage):
        (WebKit::EventDispatcher::removeScrollingTreeForPage):
        (WebKit::EventDispatcher::wheelEvent):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamReadAsync):
        (webkitSoupRequestInputStreamAddData):

2015-08-05  Ryosuke Niwa  <rniwa@webkit.org>

        WebInspectorProxy should make WKWebView first responder
        https://bugs.webkit.org/show_bug.cgi?id=147676

        Reviewed by Timothy Hatcher.

        Revert r181927 now that WKWebView forwards the first responder role to WKView as needed.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformBringToFront):
        (WebKit::WebInspectorProxy::platformAttach):

2015-08-04  Filip Pizlo  <fpizlo@apple.com>

        Rename Mutex to DeprecatedMutex
        https://bugs.webkit.org/show_bug.cgi?id=147675

        Reviewed by Geoffrey Garen.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::postDatabaseTask):
        (WebKit::DatabaseProcess::performNextDatabaseTask):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::shutdown):
        (WebKit::UniqueIDBDatabase::postMainThreadTask):
        (WebKit::UniqueIDBDatabase::performNextMainThreadTask):
        (WebKit::UniqueIDBDatabase::postDatabaseTask):
        (WebKit::UniqueIDBDatabase::performNextDatabaseTask):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingSyncReply):
        (IPC::Connection::connectionDidClose):
        * Platform/IPC/Connection.h:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::appendUpdate):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::createCompositingThread):
        (WebKit::ThreadedCompositor::runCompositingThread):
        (WebKit::ThreadedCompositor::terminateCompositingThread):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        (WebKit::CustomProtocolManager::addCustomProtocol):
        (WebKit::CustomProtocolManager::removeCustomProtocol):
        (WebKit::CustomProtocolManager::registerScheme):
        (WebKit::CustomProtocolManager::unregisterScheme):
        (WebKit::CustomProtocolManager::supportsScheme):
        (WebKit::CustomProtocolManager::protocolForID):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::removePluginProcessConnection):
        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::addScrollingTreeForPage):
        (WebKit::EventDispatcher::removeScrollingTreeForPage):
        (WebKit::EventDispatcher::wheelEvent):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamReadAsync):
        (webkitSoupRequestInputStreamAddData):

2015-08-05  Daniel Bates  <dabates@apple.com>

        REGRESSION (r185111): Clicking phone numbers doesn't prompt to call sometimes
        https://bugs.webkit.org/show_bug.cgi?id=147678
        <rdar://problem/21827815>

        Reviewed by Brady Eidson.

        Teach WebKit to save and restore the "should open external URLs" policy.

        * Shared/SessionState.cpp:
        (WebKit::isValidEnum): Added.
        (WebKit::PageState::encode): Modified to encode the "should open external URLs" policy.
        (WebKit::PageState::decode): Modified to decode the "should open external URLs" policy.
        * Shared/SessionState.h: Added ShouldOpenExternalURLsPolicy to PageState (defaults to WebCore::ShouldOpenExternalURLsPolicy::ShouldNotAllow).
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _killWebContentProcessAndResetState]): Added; used in the unit test TestWebKitAPI/Tests/WebKit2Cocoa/ShouldOpenExternalURLsInNewWindowActions.mm.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declare -[WKWebView _killWebContentProcessAndResetState].
        * UIProcess/mac/LegacySessionStateCoding.cpp: Defined constant sessionHistoryEntryShouldOpenExternalURLsPolicyKey.
        (WebKit::encodeSessionHistory): Modified to encode the "should open external URLs" policy.
        (WebKit::decodeSessionHistoryEntry): Modified to decode the "should open external URLs" policy.
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toPageState): Copy "should open external URLs" policy from specified history item.
        (WebKit::toHistoryItem): Apply "should open external URLs" policy from PageState to HistoryItem.

2015-08-04  Antti Koivisto  <antti@apple.com>

        Network cache fetches should have timeout
        https://bugs.webkit.org/show_bug.cgi?id=147631

        Reviewed by Andreas Kling.

        System might be under heavy I/O pressure. If it takes long time to get data from disk we should load from network instead.

        This patch introduces 1.5s timeout for disk reads. If the last dispatched cache read takes longer than that we cancel all
        active and pending reads and just load those resources from network.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::ReadOperation::ReadOperation):
        (WebKit::NetworkCache::Storage::ReadOperation::cancel):
        (WebKit::NetworkCache::Storage::ReadOperation::finish):

            Factor to functions.

        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::updateFileModificationTime):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::Storage::finishReadOperation):
        (WebKit::NetworkCache::Storage::cancelAllReadOperations):
        (WebKit::NetworkCache::Storage::dispatchPendingReadOperations):
        (WebKit::NetworkCache::Storage::dispatchPendingWriteOperations):

            Also make dispatch functions transfer the operation ownership.

        (WebKit::NetworkCache::shouldStoreBodyAsBlob):
        (WebKit::NetworkCache::Storage::dispatchWriteOperation):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-08-04  Matt Rajca  <mrajca@apple.com>

        Media Session: add a focus manager that WebKit clients can use to access the focused media element
        https://bugs.webkit.org/show_bug.cgi?id=147629

        Reviewed by Tim Horton.

        * Shared/API/APIObject.h: Added a new type for the focus manager.
        * Shared/API/c/WKBase.h: Added a new type for the focus manager.
        * UIProcess/API/C/WKAPICast.h: Added a new type for the focus manager.
        * UIProcess/API/C/WKContext.cpp: The "global" focus manager is accessed via WKContext.
        (WKContextGetMediaSessionFocusManager):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKMediaSessionFocusManager.cpp: Added C wrapper for WebMediaSessionFocusManager.
        (WKMediaSessionFocusManagerGetTypeID):
        (WKMediaSessionFocusManagerIsFocusedContentMediaElementPaused):
        * UIProcess/API/C/WKMediaSessionFocusManager.h: Added C wrapper for WebMediaSessionFocusManager.
        * UIProcess/WebMediaSessionFocusManager.cpp: Added to keep track of the focused media element in the UI process and let clients query this state.
        (WebKit::WebMediaSessionFocusManager::supplementName):
        (WebKit::WebMediaSessionFocusManager::create):
        (WebKit::WebMediaSessionFocusManager::WebMediaSessionFocusManager):
        (WebKit::WebMediaSessionFocusManager::refWebContextSupplement):
        (WebKit::WebMediaSessionFocusManager::derefWebContextSupplement):
        (WebKit::WebMediaSessionFocusManager::isFocusedContentMediaElementPaused): Check if the media element on the focused page is paused.
        (WebKit::WebMediaSessionFocusManager::setFocusedMediaElement): Keep track of the focused page / media element pair.
        (WebKit::WebMediaSessionFocusManager::clearFocusedMediaElement): Reset the focused page / media element pair.
        * UIProcess/WebMediaSessionFocusManager.h: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isMediaElementPaused): Updated to take a UnsignedCallback.
        (WebKit::WebPageProxy::focusedContentMediaElementDidChange): Store the focused media element in the focus manager.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessPool.cpp: Added WebMediaSessionFocusManager as a supplement.
        * UIProcess/WebProcessPool.h: WebMediaSessionFocusManager is a supplement, so include its header.
        * WebKit2.xcodeproj/project.pbxproj: Added new sources and ran sort-xcode-project.

2015-08-04  Anders Carlsson  <andersca@apple.com>

        Get rid of ReasonForCallingAllowPlugins since it's not used anywhere
        https://bugs.webkit.org/show_bug.cgi?id=147648

        Reviewed by Andreas Kling.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::objectContentType):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPluginInfo):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::canPluginHandleResponse):
        (WebKit::WebPage::canShowMIMEType):

2015-08-04  Alexey Proskuryakov  <ap@apple.com>

        Implement NPAPI redirect handling
        https://bugs.webkit.org/show_bug.cgi?id=138675
        rdar://problem/15779101

        Patch by Jeffrey Pfau, updated and tweaked by me.

        Reviewed by Anders Carlsson.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::loadURL):
        (WebKit::PluginControllerProxy::continueStreamLoad):
        (WebKit::PluginControllerProxy::cancelStreamLoad):
        (WebKit::PluginControllerProxy::didEvaluateJavaScript):
        (WebKit::PluginControllerProxy::streamWillSendRequest):
        (WebKit::PluginControllerProxy::streamDidReceiveResponse):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_ConvertPoint):
        (WebKit::NPN_URLRedirectResponse):
        (WebKit::initializeBrowserFuncs):
        (WebKit::netscapeBrowserFuncs):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::getAuthenticationInfo):
        (WebKit::NetscapePlugin::registerRedirect):
        (WebKit::NetscapePlugin::urlRedirectResponse):
        (WebKit::NetscapePlugin::setIsPlayingAudio):
        (WebKit::NetscapePlugin::NPP_URLNotify):
        (WebKit::NetscapePlugin::NPP_URLRedirectNotify):
        (WebKit::NetscapePlugin::NPP_GetValue):
        (WebKit::NetscapePlugin::didEvaluateJavaScript):
        (WebKit::NetscapePlugin::streamWillSendRequest):
        (WebKit::NetscapePlugin::streamDidReceiveResponse):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::~NetscapePluginStream):
        (WebKit::NetscapePluginStream::willSendRequest):
        (WebKit::NetscapePluginStream::didReceiveResponse):
        (WebKit::NetscapePluginStream::stop):
        (WebKit::NetscapePluginStream::setURL):
        (WebKit::NetscapePluginStream::cancel):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        (WebKit::NetscapePluginStream::streamID):
        (WebKit::NetscapePluginStream::npStream):
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::didEvaluateJavaScript):
        (WebKit::PluginProxy::streamWillSendRequest):
        (WebKit::PluginProxy::streamDidReceiveResponse):
        (WebKit::PluginProxy::setPluginIsPlayingAudio):
        (WebKit::PluginProxy::continueStreamLoad):
        (WebKit::PluginProxy::cancelStreamLoad):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::streamID):
        (WebKit::PluginView::Stream::Stream):
        (WebKit::PluginView::Stream::cancel):
        (WebKit::PluginView::Stream::continueLoad):
        (WebKit::buildHTTPHeaders):
        (WebKit::lastModifiedDateMS):
        (WebKit::PluginView::Stream::willSendRequest):
        (WebKit::PluginView::Stream::didReceiveResponse):
        (WebKit::PluginView::cancelStreamLoad):
        (WebKit::PluginView::continueStreamLoad):
        (WebKit::PluginView::cancelManualStreamLoad):
        * WebProcess/Plugins/PluginView.h:

2015-08-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r187812.

        This is not safe

        Reverted changeset:

        "[WK2] Reserve Vector capacity in VectorArgumentCoder<false,
        T, inlineCapacity>::decode()"
        https://bugs.webkit.org/show_bug.cgi?id=147619
        http://trac.webkit.org/changeset/187812

2015-08-03  Chris Dumez  <cdumez@apple.com>

        [WK2] Reserve Vector capacity in VectorArgumentCoder<false, T, inlineCapacity>::decode()
        https://bugs.webkit.org/show_bug.cgi?id=147619

        Reviewed by Andreas Kling.

        Reserve Vector capacity in VectorArgumentCoder<false, T, inlineCapacity>::decode()
        as we know the size of the Vector in advance.

        * Platform/IPC/ArgumentCoders.h:

2015-08-03  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [CoordinatedGraphics] Rearrange uses of USE_COORDINATED_GRAPHICS_MULTIPROCESS
        https://bugs.webkit.org/show_bug.cgi?id=147256

        Reviewed by Benjamin Poulain.

        Reduce uses of USE_COORDINATED_GRAPHICS_MULTIPROCESS guard in order to fix build
        breaks when USE_COORDINATED_GRAPHICS_MULTIPROCESS is off. This is first step to switch
        between multiprocess model to thread model.

        * PlatformEfl.cmake:
        * Shared/DrawingAreaInfo.h:
        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewFindZoomableAreaForRect):
        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:
        (WebKit::CoordinatedDrawingAreaProxy::CoordinatedDrawingAreaProxy):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::commitCoordinatedGraphicsState):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::pageTransitionViewportReady):
        * UIProcess/CoordinatedGraphics/WebPageProxyCoordinatedGraphics.cpp:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::commitPageTransitionViewport):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::CoordinatedDrawingArea):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/WebPageCoordinatedGraphics.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):
        (WebKit::WebPage::pageDidRequestScroll):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-08-03  Matt Rajca  <mrajca@apple.com>

        Media Session: let UI clients query whether a media element is paused
        https://bugs.webkit.org/show_bug.cgi?id=147588

        Reviewed by Tim Horton.

        Added plumbing to determine if a page's media element is paused.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isMediaElementPaused):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::isMediaElementPaused):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-08-03  Chris Dumez  <cdumez@apple.com>

        Make sure error handling code APIUserContentExtensionStore closes open file descriptors
        https://bugs.webkit.org/show_bug.cgi?id=147562

        Reviewed by Alex Christensen.

        Make sure error handling code APIUserContentExtensionStore closes open
        file descriptors to avoid leaking them.

        * NetworkProcess/cache/NetworkCacheData.cpp:
        (WebKit::NetworkCache::adoptAndMapFile):
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::compiledToFile):

2015-08-03  Beth Dakin  <bdakin@apple.com>

        Need WKWebView API to enable/disable link preview
        https://bugs.webkit.org/show_bug.cgi?id=147573
        -and corresponding-
        rdar://problem/22077836

        Reviewed by Dan Bernstein.

        WKView implementation.
        * UIProcess/API/Cocoa/WKViewPrivate.h:

        New API. Call into WKView to handle Mac.
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView allowsLinkPreview]):
        (-[WKWebView setAllowsLinkPreview:]):

        Remove the SPI declaration from WKWebViewPrivate in order to make this API.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Handle the Mac side.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView allowsBackForwardNavigationGestures]):
        (-[WKView allowsLinkPreview]):
        (-[WKView setAllowsLinkPreview:]):

        Don’t register previews when link preview is prevented.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _registerPreview]):

2015-08-03  Tim Horton  <timothy_horton@apple.com>

        [iOS] Link previews sometimes don't hide the link highlight
        https://bugs.webkit.org/show_bug.cgi?id=147585
        <rdar://problem/22119648>

        Reviewed by Beth Dakin.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interactionStartedFromPreviewItemController:]):
        (-[WKContentView _interactionStoppedFromPreviewItemController:]):
        (-[WKContentView _previewItemController:didDismissPreview:committing:]):
        (-[WKContentView _previewItemController:willPresentPreview:forPosition:inSourceView:]): Deleted.
        Use interactionStarted/Stopped, which are always called, instead of didDismiss/willPresent,
        which are only called if we return a custom view controller from _presentedViewControllerForPreviewItemController.
        We continue using didDismiss to inform clients of dismissal because they'll
        only care if they customized the view controller.

2015-08-03  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Do not munmap() on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=147569

        Reviewed by Geoffrey Garen.

        Do not munmap() on the main thread for performance reasons and
        consistency as we already make sure to mmap() on another thread.

        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::adoptMap):

2015-08-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Inputs with the autofocus attribute cause the keyboard to not deploy
        https://bugs.webkit.org/show_bug.cgi?id=147555
        <rdar://problem/22018044>

        Reviewed by Andreas Kling.

        Upon submitting a form by pressing "Go" on the keyboard, an <input> on the next page with the
        autofocus attribute may become non-interactible. When attempting to tap on the input, nothing
        seems to happen. This is because the state of WebPage upon invoking WebPage::elementDidFocus
        indicates (incorrectly) that the input element is already focused, and therefore hits an early
        return. To solve this, we explicitly reset m_hasFocusedDueToUserInteraction upon transitioning
        to a new page.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didStartPageTransition): On iOS, resets m_hasFocusedDueToUserInteraction as
            well. It was previously thought that this would be handled by blur() called on the assisted
            element when submitting a form. However, pressing "Go" on the iOS keyboard is an implicit
            submission and does not trigger a blur event.

2015-08-03  Chris Dumez  <cdumez@apple.com>

        Fix error handling case in Cache::dumpContentsToFile()
        https://bugs.webkit.org/show_bug.cgi?id=147567

        Reviewed by Andreas Kling.

        Cache::dumpContentsToFile() was expecting openFile() to return 0 in case
        of error. However, it returns invalidPlatformFileHandle, which is -1 on
        Unix.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::dumpContentsToFile):

2015-08-03  Chris Dumez  <cdumez@apple.com>

        Make sure WebMemorySampler doesn't leak file descriptor
        https://bugs.webkit.org/show_bug.cgi?id=147564

        Reviewed by Anders Carlsson.

        WebMemorySampler was opening files but never closing them.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::stop):
        * Shared/WebMemorySampler.h:

2015-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.9.5 release.

        * gtk/NEWS: Add release notes for 2.9.5.

2015-07-27  Matt Rajca  <mrajca@apple.com>

        Media Session: inform the UI process when the focused Content media element changes
        https://bugs.webkit.org/show_bug.cgi?id=147323

        Reviewed by Tim Horton.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedContentMediaElementDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2015-07-31  Chris Dumez  <cdumez@apple.com>

        Drop dummy Timer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=147516

        Reviewed by Alexey Proskuryakov.

        Drop dummy Timer callbacks in the code base. A lot of Timer callbacks
        do nothing else beside calling a particular method. In such case, we
        can use the called method as Timer callback instead.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::layerFlushTimerFired): Deleted.

2015-07-31  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Drop HTTP method from NetworkCache::Key
        https://bugs.webkit.org/show_bug.cgi?id=143348

        Reviewed by Antti Koivisto.

        Drop HTTP method from NetworkCache::Key as we only cache GET responses
        for now. Even when we start caching HEAD responses, we likely will not
        want the method to be part of the key because:
        - A HEAD response can be used to update the headers of a previously cached response to GET
        - A cached GET response may be used to satisfy subsequent HEAD requests

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeCacheKey):
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::Key):
        (WebKit::NetworkCache::Key::operator==):
        (WebKit::NetworkCache::Key::decode):
        (WebKit::NetworkCache::Key::operator=): Deleted.
        (WebKit::NetworkCache::Key::computeHash): Deleted.
        (WebKit::NetworkCache::Key::encode): Deleted.
        * NetworkProcess/cache/NetworkCacheKey.h:
        (WebKit::NetworkCache::Key::method): Deleted.

2015-07-31  Chris Dumez  <cdumez@apple.com>

        Coalesce concurrent authentication challenges for the same ProtectionSpace
        https://bugs.webkit.org/show_bug.cgi?id=147496
        <rdar://problem/16839069>

        Reviewed by Alexey Proskuryakov.

        Coalesce concurrent authentication challenges for the same ProtectionSpace.
        Ideally, this would be done in the network layer but short term, this will
        make sure the user no longer gets repeating authentication dialogs for the
        same protection space.

        This gets rid of a long-standing bug in WebKit / Safari where visiting a
        site using HTTP authentication would pop up one authentication dialog for
        each subresource being loaded from the network (especially when the main
        resource is loaded from the cache).

        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::canCoalesceChallenge):
        (WebKit::AuthenticationManager::addChallengeToChallengeMap):
        (WebKit::AuthenticationManager::shouldCoalesceChallenge):
        (WebKit::AuthenticationManager::coalesceChallengesMatching):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        (WebKit::AuthenticationManager::useCredentialForChallenge):
        (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):
        (WebKit::AuthenticationManager::AuthenticationManager): Deleted.
        * Shared/Authentication/AuthenticationManager.h:

2015-07-31  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed parameter name typo fix.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _setHiddenPageDOMTimerThrottlingEnabled:]):

2015-07-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] NPAPI code crashes on Wayland
        https://bugs.webkit.org/show_bug.cgi?id=147297

        Reviewed by Žan Doberšek.

        Do not crete NPAPI plugins when runing on Wayland, since they are
        not supported. ENABLE_NETSCAPE_PLUGIN_API option used to be
        incompatible with building with the Wayland target, but now that
        we allow to build X11 and Wayland targets at the same time, we
        need runtime checks to avoid creating NPAPI plugins in Wayland.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_set_enable_plugins): Do not allow to change the
        setting when running in Wayland.
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore): Initialize
        EnablePlugins preference to false when running in Wayland.

2015-07-30  Joseph Pecoraro  <pecoraro@apple.com>

        LayoutTests/inspector frequently run slow and timeout when run in WebKit2 but not WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=147456

        Reviewed by Timothy Hatcher.

        By default, WebKit2 WebPage's on PLATFORM(COCOA) enabling DOM Timer
        throttling. Under testing, this ends up impacting Web Inspector
        tests that create their own WKWebView which never gets displayed
        and so gets throttled. Disable throttling on the Inspector's view
        during testing.

        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _hiddenPageDOMTimerThrottlingEnabled]):
        (-[WKPreferences _setHiddenPageDOMTimerThrottlingEnabled:]):
        SPI to toggle DOM timer throttling.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage):
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::isUnderTest):
        Provide a way to get if we are under test, and set it before
        calling into the platform method.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        When testing, disable timer throttling.

2015-07-30  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Set AirPlay discovery mode to disabled when page is hidden
        https://bugs.webkit.org/show_bug.cgi?id=147455

        Reviewed by Enrica Casucci.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker _dismissAirPlayRoutePickerIPad]): Set discovery mode to disabled after
          the picker has been closed.
        (-[WKAirPlayRoutePicker showAirPlayPickerIPhone:]): Ditto.

2015-07-29  Dean Jackson  <dino@apple.com>

        Don't use (Details) when exposing SPI
        https://bugs.webkit.org/show_bug.cgi?id=147426
        <rdar://problem/22062407>

        Reviewed by Dan Bernstein.

        If we are declaring the interface without any implementation,
        we should use class extensions.

        * Platform/spi/ios/AssertionServicesSPI.h:
        * Platform/spi/ios/CorePDFSPI.h:
        * Platform/spi/ios/DataDetectorsUISPI.h:
        * Platform/spi/ios/ManagedConfigurationSPI.h:
        * Platform/spi/ios/UIKitSPI.h:
        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        * UIProcess/_WKWebViewPrintFormatter.mm:
        * UIProcess/mac/WebPageProxyMac.mm:

2015-07-30  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Stop closing files on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=147410

        Reviewed by Andreas Kling.

        After r186510, we no longer open cache files on the main thread.
        However, we still close them on the main thread. This patch makes
        sure we close the files on another thread instead.

        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::IOChannel):

2015-07-30  Simon Fraser  <simon.fraser@apple.com>

        Convert Path applier to use std::function
        https://bugs.webkit.org/show_bug.cgi?id=147368

        Reviewed by Sam Weinig.

        Use std::function for Path::apply().

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::pathEncodeApplierFunction):
        (IPC::ArgumentCoder<Path>::encode):
        (IPC::pathPointCountApplierFunction): Deleted.

2015-07-30  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Enable IndexedDB based on DatabaseProcess
        https://bugs.webkit.org/show_bug.cgi?id=147221

        Reviewed by Csaba Osztrogonác.

        * DatabaseProcess/efl/DatabaseProcessMainEfl.cpp: Add ecore_init().
        Without this call, it leads to crash when launching DatabaseProcess.
        * PlatformEfl.cmake: Add missing include_directory.
        * Shared/efl/ProcessExecutablePathEfl.cpp:
        (WebKit::executablePathOfDatabaseProcess):
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
        Add default path for indexedDB sqlite3 db file.

2015-07-30  Chris Dumez  <cdumez@apple.com>

        Minimize children vector capacity changes in PlatformCALayerRemote::recursiveBuildTransaction()
        https://bugs.webkit.org/show_bug.cgi?id=147446

        Reviewed by Simon Fraser.

        Minimize children vector capacity changes in PlatformCALayerRemote::recursiveBuildTransaction()
        by leveraging the fact that we know in advance how many layer IDs are going to be added. We
        now set the Vector size from the start, instead of clearing it and then growing the vector
        capacity when appending the layer IDs one by one.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):

2015-07-30  Chris Dumez  <cdumez@apple.com>

        Mark more classes as fast allocated
        https://bugs.webkit.org/show_bug.cgi?id=147440

        Reviewed by Sam Weinig.

        Mark more classes as fast allocated for performance. We heap-allocate
        objects of those types throughout the code base.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * Platform/IPC/MessageRecorder.h:
        * Platform/mac/LayerHostingContext.h:

2015-07-29  Andy VanWagoner  <thetalecrafter@gmail.com>

        Implement basic types for ECMAScript Internationalization API
        https://bugs.webkit.org/show_bug.cgi?id=146926

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: Enabled INTL.

2015-07-29  Chris Dumez  <cdumez@apple.com>

        [WK2] Use FastMalloc in IPC::MessageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=147425

        Reviewed by Sam Weinig.

        Use FastMalloc in IPC::MessageDecoder instead of system malloc, for
        performance reasons and consistency.

        * Platform/IPC/ArgumentDecoder.cpp:
        (IPC::ArgumentDecoder::~ArgumentDecoder):
        (IPC::ArgumentDecoder::initialize):

2015-07-29  Enrica Casucci  <enrica@apple.com>

        Preview should not start if touch handler prevents default.
        https://bugs.webkit.org/show_bug.cgi?id=147423
        rdar://problem/22061043

        Reviewed by Tim Horton.

        We need to check if _highlightLongPressCanClick has not been reset before
        we allow the preview. It can be reset by a touch handler preventing default.

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

2015-07-29  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: VoiceOver hangs indefinitely when an JS alert appears
        https://bugs.webkit.org/show_bug.cgi?id=147386

        Reviewed by Dan Bernstein.

        Make sure this also builds on iOS8.

        * Platform/IPC/mac/ConnectionMac.mm:

2015-07-29  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Seccomp] Further improvements to default web process policy
        https://bugs.webkit.org/show_bug.cgi?id=142987

        Provide various helper functions to allow more flexible construction of
        filesystem access policies.

        Reviewed by Žan Doberšek.

        Improve the policy. Also, remove ifdefs to reduce potential for breakage in non-default
        configurations.

        * Shared/linux/SeccompFilters/SyscallPolicy.cpp:
        (WebKit::SyscallPolicy::addDefaultWebProcessPolicy):

2015-07-29  Chris Dumez  <cdumez@apple.com>

        Avoid unnecessarily constructing PlatformMediaSessionManager on Document destruction
        https://bugs.webkit.org/show_bug.cgi?id=147398

        Reviewed by Jer Noble.

        Only call PlatformMediaSessionManager::stopAllMediaPlaybackForProcess() in
        destructors if an PlatformMediaSessionManager instance already exists, to 
        avoid constructing one unecessarily at that point.

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

2015-07-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to set the maximum number of web processes per WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=147108

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_web_process_count_limit):
        (webkit_web_context_get_web_process_count_limit):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:

2015-07-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix empty space in popup menus when first item is selected
        https://bugs.webkit.org/show_bug.cgi?id=147358

        Reviewed by Martin Robinson.

        It happens when one of the first elements are selected, because we
        try to center the current selection on the combo element. When the
        menu is large enough to make the element centered we need to leave
        empty space at the beginning. This can be fixed by not scrolling
        to center the selected item when it's above the combo
        element. This ensure the selected item will always be visible,
        even if it's not centered. If the selected item is already
        centered or below the combo element, the behaviour doesn't change
        and we scroll to center it.

        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):

2015-07-28  Jincheol Jo  <jincheol.jo@navercorp.com>

        [EFL] Fix typos in ewk_extension.cpp
        https://bugs.webkit.org/show_bug.cgi?id=147396

        Reviewed by Gyuyoung Kim.

        Fix from toEwkExtendion to toEwkExtension.

        * WebProcess/InjectedBundle/API/efl/ewk_extension.cpp:
        (toEwkExtension):
        (EwkExtension::didCreatePage):
        (EwkExtension::willDestroyPage):
        (EwkExtension::didReceiveMessage):
        (toEwkExtendion): Deleted.

2015-07-28  Alexey Proskuryakov  <ap@apple.com>

        Clean up usesAsyncCallbacks handling in ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=147342

        Reviewed by Darin Adler.

        Update for a renaming in WebCore.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::cleanup):
        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::platformInvalidate):

2015-07-28  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: VoiceOver hangs indefinitely when an JS alert appears
        https://bugs.webkit.org/show_bug.cgi?id=147386

        Reviewed by Anders Carlsson.

        Support the iOS platform API to notify accessibility clients when the WebProcess is about to suspend (because of some modal dialog).
        Luckily, we did all the hardwork for OSX a few years ago to support this paradigm.         

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::AccessibilityProcessSuspendedNotification):
        (IPC::Connection::willSendSyncMessage):
        (IPC::Connection::didReceiveSyncReply):

2015-07-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Add ENABLE_ES6_MODULES compile time flag with the default value "false"
        https://bugs.webkit.org/show_bug.cgi?id=147350

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2015-07-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] REGRESSION(r168075): Fullscreen web video doesn't pause on screen lock
        https://bugs.webkit.org/show_bug.cgi?id=147269

        Reviewed by Andreas Kling.

        Media elements should pause when the application is going to EnterBackground
        under lock regardless whether it is in full screen or not.

        * Platform/spi/ios/UIKitSPI.h: Forward declare [UIApplication isSuspendedUnderLock].

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackground):
        [UIApp isSuspendedUnderLock] can only be called in the UIProcess. We need
        to call it here and pass it to the WebPage in the WebProcess as part of the
        ApplicationDidEnterBackground message.
        
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add the new parameter:
        'isSuspendedUnderLock' to the ApplicationDidEnterBackground message.
        
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationDidEnterBackground): On iOS, the WebPage needs
        to notify the MediaSessionManagerIOS that it received the message 
        ApplicationDidEnterBackground.

2015-07-28  Yongjun Zhang  <yongjun_zhang@apple.com>

        Bounds in InteractionInformationAtPosition should be always in main frame coordinate space.
        https://bugs.webkit.org/show_bug.cgi?id=147372

        When we prepare the bounds for InteractionInformationAtPosition, we should convert the rect to
        main frame space since WKContent in UIProcess expects it to be in the web view space.

        Reviewed by Tim Horton.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation): Convert the bounding rect to main frame space if the element is inside a sub-frame.

2015-07-27  Simon Fraser  <simon.fraser@apple.com>

        PathApplierFunction should take a reference to a PathElement
        https://bugs.webkit.org/show_bug.cgi?id=147337

        Reviewed by Dan Bates.

        Convert PathApplierFunction to take a const PathElement&, since it can never be null.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::pathPointCountApplierFunction):
        (IPC::pathEncodeApplierFunction):

2015-07-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Notify fullscreen controller in UIProcess whether external playback is allowed
        https://bugs.webkit.org/show_bug.cgi?id=147343

        Reviewed by Brady Eidson.

        Pass the boolean property wirelessVideoPlaybackDisabled across the UIProcess/WebProcess boundary.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setWirelessVideoPlaybackDisabled):
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenInterfaceContext::setWirelessVideoPlaybackDisabled):
        (WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager):
        (WebKit::WebVideoFullscreenManager::setWirelessVideoPlaybackDisabled):

2015-07-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use fastMalloc instead of g_slice
        https://bugs.webkit.org/show_bug.cgi?id=147357

        Reviewed by Sergio Villar Senin.

        The use of g_slice is no longer encouraged by glib developers.

        * UIProcess/API/gtk/WebKitCredential.cpp:
        (webkitCredentialCreate):
        (webkit_credential_free):
        * UIProcess/API/gtk/WebKitJavascriptResult.cpp:
        (webkitJavascriptResultCreate):
        (webkit_javascript_result_unref):
        * UIProcess/API/gtk/WebKitMimeInfo.cpp:
        (webkitMimeInfoCreate):
        (webkit_mime_info_unref):
        * UIProcess/API/gtk/WebKitNavigationAction.cpp:
        (webkitNavigationActionCreate):
        (webkit_navigation_action_copy):
        (webkit_navigation_action_free):
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitScriptDialog.cpp:
        (webkitScriptDialogCopy):
        (webkitScriptDialogFree):
        * UIProcess/API/gtk/WebKitUserContent.cpp:
        (webkit_user_style_sheet_unref):
        (webkit_user_style_sheet_new):
        (webkit_user_script_unref):
        (webkit_user_script_new):

2015-07-27  Dan Bernstein  <mitz@apple.com>

        [iOS] REGRESSION (r187376): Form editing buttons are missing from the Shortcut Bar
        https://bugs.webkit.org/show_bug.cgi?id=147351

        Reviewed by Adele Peterson.

        We were relying on -[WKContentView inputAccessoryView] getting called to initialize the form
        accessory view, even when that method would always return nil, as it does on iPad. After
        r187376, that method changed to initializing the view only when returning it, which caused
        this bug.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]): Call the new -_ensureFormAccessoryView from
        here, when we are going to need the view.
        (-[WKContentView _ensureFormAccessoryView]): Moved initialization code from
        -inputAccessoryView here, and removed outdated +instancesRespondToSelector: check.
        (-[WKContentView inputAccessoryView]): Now calls through -formAccessoryView.
        (-[WKContentView formAccessoryView]): Added call to -_ensureFormAccessoryView here.

2015-07-27  Andreas Kling  <akling@apple.com>

        WebsiteDataStore should clean up its storage in the network process when destroyed.
        <https://webkit.org/b/147349>
        <rdar://problem/21838764>

        Reviewed by Darin Adler.

        Have ~WebsiteDataStore() send a DestroyPrivateBrowsingSession message to all networking processes
        for ephemeral sessions. This plugs a NetworkStorageSession leak that could retain a large
        CFNetwork object graph.

        This complements r187115 which did the same for network process storage owned by
        API::Session objects.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):

2015-07-27  Tim Horton  <timothy_horton@apple.com>

        First in-window viewStateChange synchronously blocks despite not previously being in-window
        https://bugs.webkit.org/show_bug.cgi?id=147344
        <rdar://problem/22021772>

        Reviewed by Simon Fraser.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateViewState):
        (WebKit::WebPageProxy::dispatchViewStateChange):
        The whole point of m_viewWasEverInWindow was so that we would not
        synchronously wait when a view was added to a window for the first time,
        only all subsequent times.

        However, since m_viewWasEverInWindow was being set *before* being
        checked in dispatchViewStateChange, we were always blocking. This is
        a huge waste of main-thread time, because there's no reason to wait
        for the first paint if you've never seen the view before (and shouldn't
        expect it to have content).

        Instead, set the flag after dispatching a view state change, so it becomes
        "have we ever sent a view state with IsInWindow set" instead.

2015-07-27  Tim Horton  <timothy_horton@apple.com>

        [iOS] Long press or link click can sometimes trigger during/after a preview
        https://bugs.webkit.org/show_bug.cgi?id=147338
        <rdar://problem/22020770>

        Reviewed by Enrica Casucci.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _longPressRecognized:]):
        Bail if we're previewing.

        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        Always avoid allowing clicks and start interaction when previewing a link.

2015-07-27  Andreas Kling  <akling@apple.com>

        [iOS] Occasional crashes in WebPage::elementDidBlur()'s async block.
        <https://webkit.org/b/147281>
        <rdar://problem/21701858>

        Reviewed by Anders Carlsson.

        Protect the WebPage object until the dispatch_async block has finished.
        I have no way to repro this, but there's evidence of some crashing here.

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

2015-07-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Seccomp] Set appropriate filters when trapping syscalls by default
        https://bugs.webkit.org/show_bug.cgi?id=142983

        If we trap syscalls by default, we must not set separate filters to trap
        anything here, since it will fail causing us to crash.

        But also, there are some things we must allow unconditionally even when
        trapping by default. sigreturn, obviously. Also, let's whitelist brk
        here instead of in platform-specific code.

        Reviewed by Žan Doberšek.

        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        (WebKit::SeccompBroker::launchProcess): Don't trap sigprocmask or sigaction unless allow is
        the default action. Also, allow sigreturn and brk is allow is not the default.
        * Shared/linux/SeccompFilters/SeccompFilters.cpp: Added
        (WebKit::SeccompFilters::defaultAction):
        * Shared/linux/SeccompFilters/SeccompFilters.h: Added defaultAction

2015-07-27  Matthew Daiter  <mdaiter@apple.com>

        Renamed duplicate vectors inside UserMediaPermissionRequestProxy
        https://bugs.webkit.org/show_bug.cgi?id=147321
        <rdar://problem/22011290>

        Reviewed by Eric Carlson.

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::videoDeviceUIDs):
        (WebKit::UserMediaPermissionRequestProxy::audioDeviceUIDs):
        (WebKit::UserMediaPermissionRequestProxy::deviceUIDsVideo): Deleted.
        (WebKit::UserMediaPermissionRequestProxy::deviceUIDsAudio): Deleted.
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startRequest):

2015-07-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Pass a GstInstallPluginsContext to gst_install_plugins_async
        https://bugs.webkit.org/show_bug.cgi?id=147103

        Reviewed by Philippe Normand.

        This allows PackageKit to properly position the window and make it
        transient to the web view window.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setCursor): Disambiguate Cursor now that
        we include gtkx.h.
        (WebKit::PageClientImpl::createGstInstallPluginsContext): Create a
        new GstInstallPluginsContext and set the web view window XID when
        running on X11.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/efl/WebViewEfl.h:
        * UIProcess/gstreamer/WebPageProxyGStreamer.cpp:
        (WebKit::WebPageProxy::requestInstallMissingMediaPlugins): Use
        PageClient::createGstInstallPluginsContext() to create a new
        GstInstallPluginsContext and pass it to gst_install_plugins_async().

2015-07-26  Gwang Yoon Hwang  <yoon@igalia.com>

        [ThreadedCompositor] Unreviewed build fix after r186059
        https://bugs.webkit.org/show_bug.cgi?id=147315

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::glContext):
        Explicitly cast u_int64 to GLNativeWindowType.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        (WebKit::ThreadedCoordinatedLayerTreeHost::create):
        Update declaration to match with modified definition.


2015-07-26  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] WebContent process main thread should have fixed priority
        https://bugs.webkit.org/show_bug.cgi?id=147313
        <rdar://problem/22003112>

        Reviewed by Darin Adler.

        WebContent process main thread should have fixed priority on iOS 9.
        Priority decay regresses PLT and fixing the main thread's priority
        gives up a ~3% progression on warm PLT (tested on iPhone 5s).

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2015-07-26  Dan Bernstein  <mitz@apple.com>

        Suppressed an Xcode 7 warning about including a nib in an iOS build product.

        * Configurations/BaseLegacyProcess.xcconfig: Exclude xib files on iOS.
        * Configurations/BaseXPCService.xcconfig: Ditto.

2015-07-24  Ryosuke Niwa  <rniwa@webkit.org>

        iOS 8 build fix attempt after r187215.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]): Deleted.

2015-07-24  Yongjun Zhang  <yongjun_zhang@apple.com>

        Don't create UIWebFormAccessory if we don't require accessory view.
        https://bugs.webkit.org/show_bug.cgi?id=147283

        Don't try to intialize _formAccessoryView if requiresAccessoryView returns false since we don't
        need it yet.

        Reviewed by Dan Bernstein.

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

2015-07-24  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore remove methods don't properly delete cookies
        https://bugs.webkit.org/show_bug.cgi?id=147282
        rdar://problem/21948230

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        Call deleteCookiesForHostnames instead of iterating over each hostname.

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        Call deleteCookiesForHostnames.

2015-07-24  Anders Carlsson  <andersca@apple.com>

        Networking process crash in NetworkConnectionToWebProcess::convertMainResourceLoadToDownload while attempting to download a blob
        https://bugs.webkit.org/show_bug.cgi?id=147276
        rdar://problem/21423353

        Reviewed by Andreas Kling.

        We currently don't support downloading blobs, so for now just bail if we encounter a null loader inside
        convertMainResourceLoadToDownload (which happens when trying to download a blob URL).

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didCleanupResourceLoader):
        Rewrite the assertion to be more clear - it's fine to do an extra hash lookup in debug builds.

        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        Bail if loader is null.

2015-07-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove runtime flags for symbols
        https://bugs.webkit.org/show_bug.cgi?id=147246

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2015-07-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        Object.getOwnPropertySymbols on large list takes very long
        https://bugs.webkit.org/show_bug.cgi?id=146137

        Reviewed by Mark Lam.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::enumerate):

2015-07-24  Simon Fraser  <simon.fraser@apple.com>

        Recode.net gets into a continual resize loop in split fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=147266
        rdar://problem/21409047

        Reviewed by Tim Horton.
        
        In split fullscreen, we use fixed layout and scale to shrink pages down to
        fit a given width. This is re-evaluated every time the document width changes.
        However some pages, like recode.net, end up continually resizing because
        when laid out unconstrained they use a narrower width than when laid out with
        a fixed layout size. In fixed layout, they actually use more width than the fixed
        layout size.
        
        Detect and break this cycle by just not re-scaling when we've done one fixed layout,
        and the document is now taking more width than the fixed layout width.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):

2015-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Crashes during plugin installation
        https://bugs.webkit.org/show_bug.cgi?id=144099

        Reviewed by Philippe Normand.

        Move the missing plugins installation to the UI process, ensuring
        there's a single installer running and cancelling the request when
        the page is closed or the media player is deleted.

        * PlatformEfl.cmake: Add new files to compilation.
        * PlatformGTK.cmake: Ditto.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Add
        RequestInstallMissingMediaPlugins message.
        * UIProcess/gstreamer/WebPageProxyGStreamer.cpp: Added.
        (WebKit::WebPageProxy::requestInstallMissingMediaPlugins): Call
        gst_install_plugins_async() and send
        DidEndRequestInstallMissingMediaPlugins message back to the web
        process when done.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::requestInstallMissingMediaPlugins): Call
        WebPage::requestInstallMissingMediaPlugins().
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close): Invalidate the install missing plugins
        request callback.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add
        DidEndRequestInstallMissingMediaPlugins message.
        * WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp: Added.
        (WebKit::WebPage::requestInstallMissingMediaPlugins): Send
        RequestInstallMissingMediaPlugins to the UI process or complete
        the request early if there's already a request in progress.
        (WebKit::WebPage::didEndRequestInstallMissingMediaPlugins):
        Complete the request.

2015-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build with MEDIA_STREAM disabled after r187282.

        RealtimeMediaSource is only defined when MEDIA_STREAM is enabled.

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        * UIProcess/UserMediaPermissionRequestProxy.h:

2015-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r187100): [GTK] ASSERTION FAILED: Attempt to access post layout data before receiving it when typing backspace
        https://bugs.webkit.org/show_bug.cgi?id=147196

        Reviewed by Žan Doberšek.

        Do not try to use the PostLayoutData from EditorState when
        isMissingPostLayoutData is true. That happens when there's a
        layout pending, and EditorStateChanged is sent again after that
        layout with the post layout data. So we can just return early and
        wait until the second message.

        * UIProcess/API/gtk/WebKitEditorState.cpp:
        (webkitEditorStateChanged):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseUpdateTextInputState):

2015-07-23  Alex Christensen  <achristensen@webkit.org>

        Fix 32-bit build after r187272.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::mediaDocumentNaturalSizeChanged):
        Added some WK_API_ENABLED.

2015-07-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21929532> REGRESSION (r184026): Safari AutoFill with Contact info for phone number is broken
        https://bugs.webkit.org/show_bug.cgi?id=147249

        Reviewed by Sam Weinig.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (encodeObject): Use encodeString only for strings that encode as NSString or
        NSMutableString. It can’t encode arbitrary NSString subclasses.
        (decodeObject): Use decodeString for NSMutableString as well.

2015-07-23  Zalan Bujtas  <zalan@apple.com>

        [iOS] REGRESSION (187131): Loading CuteOverload zooms in to the top left corner.
        https://bugs.webkit.org/show_bug.cgi?id=147251
        rdar://problem/21953359

        Calling zoomToRect() should result in essentially the same zoom scale as if we
        called setZoomScale with the new page scale factor.
 
        Reviewed by Benjamin Poulain.

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

2015-07-23  Matthew Daiter  <mdaiter@apple.com>

        Linking WebKit2 to be able to grab media sources from a UID
        https://bugs.webkit.org/show_bug.cgi?id=147202
        <rdar://problem/21947608>

        Reviewed by Brent Fulgham.

        * UIProcess/UserMediaPermissionRequestProxy.cpp:
        (WebKit::UserMediaPermissionRequestProxy::getDeviceNameForUID):
        * UIProcess/UserMediaPermissionRequestProxy.h:

2015-07-23  Alex Christensen  <achristensen@webkit.org>

        Remove compile and runtime flags for promises.
        https://bugs.webkit.org/show_bug.cgi?id=147244

        Reviewed by Yusuke Suzuki.

        * Configurations/FeatureDefines.xcconfig:
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2015-07-21  Jer Noble  <jer.noble@apple.com>

        Notify the UI delegate when a MediaDocument's natural size changes
        https://bugs.webkit.org/show_bug.cgi?id=147182

        Reviewed by Simon Fraser.

        Pipe notifications of media document natural size changes up from the chrome client, through
        to the UIProcess,  through the page client, through the WKWebView, to the UIDelegate.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::mediaDocumentNaturalSizeChanged):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mediaDocumentNaturalSizeChanged:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::mediaDocumentNaturalSizeChanged):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::mediaDocumentNaturalSizeChanged):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::mediaDocumentNaturalSizeChanged):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::mediaDocumentNaturalSizeChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mediaDocumentNaturalSizeChanged):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mediaDocumentNaturalSizeChanged):
        * WebProcess/WebPage/WebPage.h:
        * UIProcess/API/gtk/PageClientImpl.h: Add default, empty implementation of new pure-virtual method.
        * UIProcess/efl/WebViewEfl.h: Ditto.

2015-07-23  Enrica Casucci  <enrica@apple.com>

        Removing one incorrect annotation from the previous change.

        Unreviewed.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

2015-07-23  Enrica Casucci  <enrica@apple.com>

        [iOS] Add another preview delegate for didDismissPreview.
        https://bugs.webkit.org/show_bug.cgi?id=147241
        rdar://problem/21664211

        Reviewed by Tim Horton and Yongjun Zhang.

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

2015-07-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21910578> Second pass at [iOS] Keyboard shortcuts that take focus away from the web view end up typing a letter into the newly focused field
        https://bugs.webkit.org/show_bug.cgi?id=146732

        Reviewed by Darin Adler.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]): Rather than checking if the view is
        first responder, which it might still be when the Web Content processes invokes this
        callback, check if we are in editable content before forwarding the event to the keyboard.

2015-07-23  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r187251; rename flag -> allows.

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

2015-07-23  Alex Christensen  <achristensen@webkit.org>

        [iOS] Unreviewed build fix after r187251.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setAllowsMediaDocumentInlinePlayback):
        Use the correct name for the boolean to pass along to SetAllowsMediaDocumentInlinePlayback.

2015-07-23  Enrica Casucci  <enrica@apple.com>

        One more iOS build fix.

        Unreviewed.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.h:

2015-07-23  Matthew Daiter  <mdaiter@apple.com>

        Bridged passing lists of devices between the UIProcess and the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=147056
        <rdar://problem/21883094>

        Reviewed by Brent Fulgham.

        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: Modified file
        to reflect changes made to the header in the .messages.in file
        (WebKit::UserMediaPermissionRequestManagerProxy::createRequest): Ditto
        (WebKit::UserMediaPermissionRequestManagerProxy::didReceiveUserMediaPermissionDecision):
        * UIProcess/UserMediaPermissionRequestManagerProxy.h: Ditto
        * UIProcess/UserMediaPermissionRequestProxy.cpp: Ditto
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
        * UIProcess/UserMediaPermissionRequestProxy.h:
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::deviceUIDsVideo):
        (WebKit::UserMediaPermissionRequestProxy::deviceUIDsAudio):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Changed heading
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
        (WebKit::UserMediaPermissionRequestManager::startRequest):
        (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveUserMediaPermissionDecision):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Changed heading

2015-07-23  Yongjun Zhang  <yongjun_zhang@apple.com>

        Adopt the new _previewItemControllerDidCancelPreview delegate method.
        https://bugs.webkit.org/show_bug.cgi?id=147238

        Don't allow hightlight long press to trigger tap if the link preview is cancelled because
        the link is not preview-able.

        Reviewed by Beth Dakin.

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

2015-07-23  Enrica Casucci  <enrica@apple.com>

        iOS build fix after http://trac.webkit.org/changeset/187238.

        Unreviewed.

        * Platform/spi/ios/UIKitSPI.h:

2015-07-23  Jer Noble  <jer.noble@apple.com>

        [WK2] Add a WKWebView property for whether the view is displaying a media document
        https://bugs.webkit.org/show_bug.cgi?id=147233

        Reviewed by Beth Dakin.

        Add a _isDisplayingStandaloneMediaDocument property, which queries the frame for whether
        the current MIME type is one which our media engines support.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isDisplayingStandaloneMediaDocument]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::isDisplayingStandaloneMediaDocument):
        * UIProcess/WebFrameProxy.h:

2015-07-21  Jer Noble  <jer.noble@apple.com>

        [iOS] Add an explicit API to allow media documents to (temporarily) play inline
        https://bugs.webkit.org/show_bug.cgi?id=147181

        Reviewed by Beth Dakin.

        Add a WKWebView(Private) API which allows MediaDocuments loaded by the view to play their contents inline, regardless
        of whether inline playback is restricted on the current device.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setRequiresUserActionForMediaPlayback:]): Added. Pass through to WebPageProxy.
        (-[WKWebView _allowsMediaDocumentInlinePlayback]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::allowsMediaDocumentInlinePlayback): Simple getter.
        (WebKit::WebPageProxy::setAllowsMediaDocumentInlinePlayback): Set, and conditionally pass the new value to WebPage.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setAllowsMediaDocumentInlinePlayback): Set, and conditionally notify WebCore page of the change.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::allowsMediaDocumentInlinePlayback): Simple getter.
        * WebProcess/WebPage/WebPage.messages.in: Add new messages.

2015-07-23  Beth Dakin  <bdakin@apple.com>

        Should not allow previews of 1x1 images
        https://bugs.webkit.org/show_bug.cgi?id=147237
        -and corresponding-
        rdar://problem/21968460

        Reviewed by Tim Horton.

        1x1 images are used on some sites to cover actual images, which leads to a 
        misleading preview experience. There is not any reason why you would really 
        want to preview an image this small nor any reason to believe that the 
        preview would result in anything useful.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2015-07-23  Brady Eidson  <beidson@apple.com>

        Crash in WebPlatformStrategies::createPingHandle - Deref a null NetworkingContext.
        <rdar://problem/21949735> and https://bugs.webkit.org/show_bug.cgi?id=147227

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createPingHandle): Skip it if there's a null NetworkingContext.

2015-07-23  Tim Horton  <timothy_horton@apple.com>

        Remove some files that should have been removed with WebKit2 Windows
        https://bugs.webkit.org/show_bug.cgi?id=147223

        Reviewed by Csaba Osztrogonác.

        * Shared/API/c/cf/WKURLRequestCF.cpp: Removed.
        * Shared/API/c/cf/WKURLRequestCF.h: Removed.
        * Shared/API/c/cf/WKURLResponseCF.cpp: Removed.
        * Shared/API/c/cf/WKURLResponseCF.h: Removed.

2015-07-23  Timothy Horton  <timothy_horton@apple.com>

        Fix the build

        * Platform/spi/ios/UIKitSPI.h:

2015-07-23  Tim Horton  <timothy_horton@apple.com>

        Remove files that were meant to be removed in r173929

        * WebProcess/WebPage/mac/WebInspectorMac.mm: Removed.

2015-07-23  Tim Horton  <timothy_horton@apple.com>

        Remove files that were meant to be removed in r168213

        * UIProcess/API/Cocoa/WKErrorRecoveryAttempting.h: Removed.

2015-07-23  Tim Horton  <timothy_horton@apple.com>

        Remove files that were meant to be removed in r168229

        * UIProcess/API/Cocoa/WKSession.h: Removed.
        * UIProcess/API/Cocoa/WKSession.mm: Removed.
        * UIProcess/API/Cocoa/WKSessionInternal.h: Removed.

2015-07-23  Tim Horton  <timothy_horton@apple.com>

        Remove files that were meant to be removed in r165014

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.h: Removed.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm: Removed.

2015-07-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to allow executing editing commands that require an argument
        https://bugs.webkit.org/show_bug.cgi?id=146781

        Reviewed by Gustavo Noronha Silva.

        Commands like InsertImage or CreateLink receive an argument, but
        we only have webkit_web_view_execute_editing_command() that
        doesn't receive any argument. This patch adds
        webkit_web_view_execute_editing_command_with_argument() for those
        commands. It also adds WEBKIT_EDITING_COMMAND_INSERT_IMAGE and
        WEBKIT_EDITING_COMMAND_CREATE_LINK to the predefined editing commands.

        * UIProcess/API/gtk/WebKitEditingCommands.h: Add
        WEBKIT_EDITING_COMMAND_INSERT_IMAGE and WEBKIT_EDITING_COMMAND_CREATE_LINK.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_execute_editing_command_with_argument):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::executeEditCommand): Pass also the argument
        to the message.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::executeEditCommand): Add the argument parameter
        to the message handler.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add argument parameter
        to ExecuteEditCommand message.

2015-07-22  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Add ENABLE_WEBASSEMBLY feature flag for WebAssembly
        https://bugs.webkit.org/show_bug.cgi?id=147212

        Reviewed by Filip Pizlo.

        * Configurations/FeatureDefines.xcconfig:

2015-07-22  James Savage  <james.savage@apple.com>

        Use updated CoreAnimation snapshot SPI.
        https://bugs.webkit.org/show_bug.cgi?id=147197
        <rdar://problem/21032083>

        Reviewed by Tim Horton.
        Patch by James Savage.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2015-07-22  Timothy Horton  <timothy_horton@apple.com>

        Fix the build

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

2015-07-22  Commit Queue  <commit-queue@webkit.org>

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

        broke all the iOS builds (Requested by thorton on #webkit).

        Reverted changeset:

        "Use updated CoreAnimation snapshot SPI."
        https://bugs.webkit.org/show_bug.cgi?id=147197
        http://trac.webkit.org/changeset/187196

2015-07-22  Tim Horton  <timothy_horton@apple.com>

        Fix the build

        * UIProcess/ios/WKContentViewInteraction.h:

2015-07-22  Tim Horton  <timothy_horton@apple.com>

        [iOS] Adjust the preview architecture
        https://bugs.webkit.org/show_bug.cgi?id=147203
        <rdar://problem/21945775>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        Link previews should win over image previews if both are possible.

2015-07-22  James Savage  <james.savage@apple.com>

        Use updated CoreAnimation snapshot SPI.
        https://bugs.webkit.org/show_bug.cgi?id=147197

        Reviewed by Tim Horton.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2015-07-22  Tim Horton  <timothy_horton@apple.com>

        [iOS] Adjust the preview architecture
        https://bugs.webkit.org/show_bug.cgi?id=147203
        <rdar://problem/21945775>

        Reviewed by Beth Dakin.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setAllowsLinkPreview:]): Deleted.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView willMoveToWindow:]): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _registerPreview]):
        (-[WKContentView _unregisterPreview]):
        (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]):
        (-[WKContentView _dataForPreviewItemController:atPosition:type:]):
        (-[WKContentView _presentationRectForPreviewItemController:]):
        (-[WKContentView _presentedViewControllerForPreviewItemController:]):
        (-[WKContentView _previewItemController:commitPreview:]):
        (-[WKContentView _previewItemController:willPresentPreview:forPosition:inSourceView:]):
        (-[WKContentView _previewItemController:didDismissPreview:committing:]):
        (-[WKContentView _presentationSnapshotForPreviewItemController:]):
        (-[WKContentView _presentationRectsForPreviewItemController:]):
        (-[WKContentView gestureRecognizerShouldBegin:]): Deleted.
        (-[WKContentView _registerPreviewInWindow:]): Deleted.
        (-[WKContentView _unregisterPreviewInWindow:]): Deleted.
        (-[WKContentView previewViewControllerForPosition:inSourceView:]): Deleted.
        (-[WKContentView commitPreviewViewController:]): Deleted.
        (-[WKContentView willPresentPreviewViewController:forPosition:inSourceView:]): Deleted.
        (-[WKContentView didDismissPreviewViewController:committing:]): Deleted.
        Register and unregister in setup/cleanupInteraction instead of when moving between windows.
        Implement 'shouldBegin' instead of interacting directly with the recognizer.
        Make use of system enums instead of our own.
        Let UIPreviewItemController handle shrink-wrapping and the indicator view.

2015-07-22  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Support indexeddb for WK2
        https://bugs.webkit.org/show_bug.cgi?id=145867

        Reviewed by Csaba Osztrogonác.

        Add stub implementation for indexeddb. Move KeyedDecoder and KeyedEncoder from gtk to glib
        in order to share it between GTK and EFL ports.

        * DatabaseProcess/EntryPoint/unix/DatabaseProcessMain.cpp:
        * DatabaseProcess/efl/DatabaseProcessMainEfl.cpp: Copied from Source/WebKit2/DatabaseProcess/EntryPoint/unix/DatabaseProcessMain.cpp.
        (WebKit::DatabaseProcessMainUnix):
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Shared/glib/KeyedDecoder.cpp: Renamed from Source/WebKit2/Shared/gtk/KeyedDecoder.cpp.
        (WebKit::KeyedDecoder::KeyedDecoder):
        (WebKit::KeyedDecoder::~KeyedDecoder):
        (WebKit::KeyedDecoder::dictionaryFromGVariant):
        (WebKit::KeyedDecoder::decodeBytes):
        (WebKit::KeyedDecoder::decodeSimpleValue):
        (WebKit::KeyedDecoder::decodeBool):
        (WebKit::KeyedDecoder::decodeUInt32):
        (WebKit::KeyedDecoder::decodeInt32):
        (WebKit::KeyedDecoder::decodeInt64):
        (WebKit::KeyedDecoder::decodeFloat):
        (WebKit::KeyedDecoder::decodeDouble):
        (WebKit::KeyedDecoder::decodeString):
        (WebKit::KeyedDecoder::beginObject):
        (WebKit::KeyedDecoder::endObject):
        (WebKit::KeyedDecoder::beginArray):
        (WebKit::KeyedDecoder::beginArrayElement):
        (WebKit::KeyedDecoder::endArrayElement):
        (WebKit::KeyedDecoder::endArray):
        * Shared/glib/KeyedDecoder.h: Renamed from Source/WebKit2/Shared/gtk/KeyedDecoder.h.
        * Shared/glib/KeyedEncoder.cpp: Renamed from Source/WebKit2/Shared/gtk/KeyedEncoder.cpp.
        (WebKit::KeyedEncoder::KeyedEncoder):
        (WebKit::KeyedEncoder::~KeyedEncoder):
        (WebKit::KeyedEncoder::encodeBytes):
        (WebKit::KeyedEncoder::encodeBool):
        (WebKit::KeyedEncoder::encodeUInt32):
        (WebKit::KeyedEncoder::encodeInt32):
        (WebKit::KeyedEncoder::encodeInt64):
        (WebKit::KeyedEncoder::encodeFloat):
        (WebKit::KeyedEncoder::encodeDouble):
        (WebKit::KeyedEncoder::encodeString):
        (WebKit::KeyedEncoder::beginObject):
        (WebKit::KeyedEncoder::endObject):
        (WebKit::KeyedEncoder::beginArray):
        (WebKit::KeyedEncoder::beginArrayElement):
        (WebKit::KeyedEncoder::endArrayElement):
        (WebKit::KeyedEncoder::endArray):
        (WebKit::KeyedEncoder::finishEncoding):
        * Shared/glib/KeyedEncoder.h: Renamed from Source/WebKit2/Shared/gtk/KeyedEncoder.h.
        * UIProcess/Databases/efl/DatabaseProcessProxyEfl.cpp: Copied from Source/WebKit2/DatabaseProcess/EntryPoint/unix/DatabaseProcessMain.cpp.
        (WebKit::DatabaseProcessProxy::platformGetLaunchOptions):

2015-07-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Seccomp] Canonicalize filesystem path when whitelisting it
        https://bugs.webkit.org/show_bug.cgi?id=142986

        Reviewed by Žan Doberšek.

        * Shared/linux/SeccompFilters/SyscallPolicy.cpp:
        (WebKit::canonicalizeFileName):
        (WebKit::SyscallPolicy::addFilePermission):
        (WebKit::SyscallPolicy::addDirectoryPermission):

2015-07-21  Simon Fraser  <simon.fraser@apple.com>

        Add logging for TiledCoreAnimationDrawingArea resizing
        https://bugs.webkit.org/show_bug.cgi?id=147180

        Reviewed by Tim Horton.

        Add a "Resize" log channel for WebKit2, and use it to log data in scaleViewToFitDocumentIfNeeded().

        * Platform/Logging.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):

2015-07-22  Sam Weinig  <sam@webkit.org>

        Encode/Decode underlying errors when serializing NSErrors
        <rdar://problem/21818117>
        https://bugs.webkit.org/show_bug.cgi?id=147199

        Reviewed by Anders Carlsson.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<CertificateInfo>::decode):
        (IPC::encodeNSError):
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        (IPC::decodeNSError):
        (IPC::ArgumentCoder<ResourceError>::decodePlatformData):
        Break out encoding/decoding of the NSErrors into a helpers so they can be called
        for the underlying error.

2015-07-22  Beth Dakin  <bdakin@apple.com>

        Animated images should animate in previews
        https://bugs.webkit.org/show_bug.cgi?id=147173
        -and corresponding-
        rdar://problem/21637698

        Reviewed by Dan Bernstein.

        InteractionInformationAtPosition needs to know if it’s an animated image.
        * Shared/InteractionInformationAtPosition.cpp:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/InteractionInformationAtPosition.h:

        New delegate method to create a link preview view controller for animated 
        images.
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        Treat animated images more like link previews.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):

        Set info.isAnimatedImage
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2015-07-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Seccomp Filters] Add helpers to get XDG base directory locations
        https://bugs.webkit.org/show_bug.cgi?id=142982

        Reviewed by Zan Dobersek.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Shared/linux/SeccompFilters/XDGBaseDirectory.h: Added.
        * Shared/linux/SeccompFilters/XDGBaseDirectoryGLib.cpp: Added.
        (WebKit::userHomeDirectory):
        (WebKit::userCacheDirectory):
        (WebKit::userConfigDirectory):
        (WebKit::userDataDirectory):
        (WebKit::userRuntimeDirectory):

2015-07-22  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][WK2] EWK2ContextTestMultipleProcesses.ewk_context_network_process_model fails to pass
        https://bugs.webkit.org/show_bug.cgi?id=142967

        Reviewed by Csaba Osztrogonác.

        Though processIdentifier() can return 0 when a page is not closed, ewk_context_network_process_model has
        not been considered process id can be 0. This patch adds a protection logic which doesn't test when process
        id is 0 at the moment.

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

2015-07-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix some warnings when generating GTK+ HTML API docs.

        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add
        WebKitWebsiteDataManager and WebKitWebEditor.

2015-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.9.4 release.

        * gtk/NEWS: Add release notes for 2.9.4.

2015-07-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: [Mac] "Open Image In New Window" context menu item does nothing on an image
        https://bugs.webkit.org/show_bug.cgi?id=147175

        Reviewed by Timothy Hatcher.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::getContextMenuFromProposedMenu):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Remove default context menus that won't work in the inspector page.

2015-07-21  Benjamin Poulain  <benjamin@webkit.org>

        [Content Extensions] Use a jump table when consecutive transitions have different targets
        https://bugs.webkit.org/show_bug.cgi?id=147099

        Reviewed by Alex Christensen.

        * UIProcess/API/APIUserContentExtensionStore.h:

2015-07-21  Daniel Bates  <dabates@apple.com>

        Fix the build following <https://trac.webkit.org/changeset/187129>
        (https://bugs.webkit.org/show_bug.cgi?id=147112)

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::reinstateNetworkProcessAssertionState): Guard implementation with PLATFORM(IOS)
        since this logic is specific to the iOS port.

2015-07-21  Simon Fraser  <simon.fraser@apple.com>

        Rename the 'View' log channel to 'Printing'
        https://bugs.webkit.org/show_bug.cgi?id=147172

        Reviewed by Zalan Bujtas.

        "View" was a terrible name for a log channel that was all about printing.
        Sort the log channels.

        * Platform/Logging.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        (-[WKView printOperationWithPrintInfo:forFrame:]):
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]):
        (pageDidComputePageRects):
        (-[WKPrintingView knowsPageRange:]):
        (-[WKPrintingView drawRect:]):
        (-[WKPrintingView rectForPage:]):
        (-[WKPrintingView beginDocument]):
        (-[WKPrintingView endDocument]):

2015-07-21  Zalan Bujtas  <zalan@apple.com>

        [iOS] Menu drop down such as on nike.com does not stay
        https://bugs.webkit.org/show_bug.cgi?id=147047
        rdar://problem/21046961

        Reviewed by Benjamin Poulain.

        This is a workaround for unintended scrolling while scaling.
        (Based on Benjamin Poulain's WIP patch for webkit.org/b/136904)

        In certain cases when scaling would result in moving the scrollview (which would trigger
        a scroll event on WebCore side), zoomRect is called instead of setZoomScale to ensure
        that the scroll position stays intact.

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

2015-07-21  Daniel Bates  <dabates@apple.com>

        WTFCrash() in WebKit::WebProcess::networkConnection()
        https://bugs.webkit.org/show_bug.cgi?id=147112
        <rdar://problem/18477459>

        Reviewed by Gavin Barraclough.

        Fixes an issue where a newly launched network process may be jetsam'd because it has not
        taken a process assertion between the time it was launched and the time when a web process
        makes use of it.

        Initially a network process does not have a process assertion. A process assertion is taken
        (if one has not been taken) for the network process when a process assertion is taken for at
        least one web process. When the network process crashes a WebProcess may ultimately launch a
        new network process in WebProcess::networkConnection(). The new network process may be jetsam'd
        immediately when the system is under some measure pressure because it has a low jetsam priority,
        0 (since it does not have a process assertion and higher priority implies that a process is less
        likely to be jetsam'd). And the logic in WebProcess::networkConnection() explicitly calls
        CRASH() if the newly launched network process crashes immediately. Towards preventing the newly
        launched network process from being jetsam'd we should obtain a process assertion for it.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool): Initialize m_didNetworkProcessCrash to false.
        (WebKit::WebProcessPool::ensureNetworkProcess): If the network process crashed (m_didNetworkProcessCrash == true)
        then tell each process in the pool to reinstate their network activity token for the new network process.
        (WebKit::WebProcessPool::networkProcessCrashed): Set m_didNetworkProcessCrash to true when the
        network process crashed.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::reinstateNetworkProcessAssertionState): Added.
        (WebKit::WebProcessProxy::didSetAssertionState): Add assert to ensure we never have both
        a background- and foreground- activity token for the network process.
        * UIProcess/WebProcessProxy.h:

2015-07-21  Daniel Bates  <dabates@apple.com>

        ASSERT(m_suspendMessageCount >= 0) fails in ProcessThrottler::didCancelProcessSuspension()
        when WebContent process crashes; Network process may never voluntarily suspend
        https://bugs.webkit.org/show_bug.cgi?id=147122
        <rdar://problem/21906759>

        Reviewed by Chris Dumez.

        Fixes an issue where the network process may never voluntarily release its process assertion.

        Currently the network process always sends both a ProcessReadyToSuspend and CancelPrepareToSuspend
        message in response to receiving a PrepareToSuspend message and CancelPrepareToSuspend message,
        respectively. The process throttler expects to receive either a ProcessReadyToSuspend message
        or a CancelPrepareToSuspend message (and not both) in response to sending the message sequence
        PrepareToSuspend, CancelPrepareToSuspend. When a process throttler receives both messages in
        response to this sequence then its internal message count becomes imbalanced and it will
        never release the process assertion it manages. One user interaction that can cause such an
        imbalance, in the process throttler held by NetworkProcessProxy, is switching tabs.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::cancelPrepareToSuspend): Do not send message NetworkProcessProxy::DidCancelProcessSuspension. 
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didCancelProcessSuspension): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in: Remove message NetworkProcessProxy::DidCancelProcessSuspension.

2015-07-21  Matthew Daiter  <mdaiter@apple.com>

        Make sure to invalidate requests for user media after webpage reset
        https://bugs.webkit.org/show_bug.cgi?id=147155
        <rdar://problem/21924174>

        Reviewed by Brent Fulgham.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState): Added user media reset

2015-07-21  Tim Horton  <timothy_horton@apple.com>

        [iOS] Avoid using a TextIndicator if there are non-text things to indicate
        https://bugs.webkit.org/show_bug.cgi?id=147152
        <rdar://problem/21921061>

        Reviewed by Beth Dakin.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView willPresentPreviewViewController:forPosition:inSourceView:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::shouldUseTextIndicatorForLink):
        (WebKit::WebPage::getPositionInformation):
        Fall back to a rectangular area instead of a TextIndicator if there are any
        non-inline elements inside the link.

2015-07-21  Andreas Kling  <akling@apple.com>

        API::Session should clean up its storage in the network process when destroyed.
        <https://webkit.org/b/147139>
        <rdar://problem/21838764>

        Reviewed by Anders Carlsson.

        Have ~Session() send a DestroyPrivateBrowsingSession message to all networking processes
        for ephemeral sessions. This plugs a NetworkStorageSession leak that could retain a large
        CFNetwork object graph.

        * UIProcess/API/APISession.cpp:
        (API::Session::~Session):

2015-07-21  Sungmann Cho  <sungmann.cho@navercorp.com>

        Make PluginProxy::handleMouseEvent() asynchronous.
        https://bugs.webkit.org/show_bug.cgi?id=146142

        Reviewed by Anders Carlsson.

        PluginProxy::handleMouseEvent() forwards the generated mouse event to PluginControllerProxy
        using a synchronous message, but the recipient always reply immediately with the same value("true")
        even before handling the received message. So I think PluginProxy::handleMouseEvent() is perfectly
        OK to process its messages asynchronously.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::handleMouseEvent):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::handleMouseEvent):

2015-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to be notified about editor state changes
        https://bugs.webkit.org/show_bug.cgi?id=145875

        Reviewed by Gustavo Noronha Silva.

        Add WebKitEditorState object, that is created on demand by the
        WebKitWebView and can be used to get the typing attributes of the
        editor at the current position or selection.

        * PlatformGTK.cmake:
        * Shared/EditorState.cpp: Use part of the PostLayoutData struct
        for the GTK port too.
        (WebKit::EditorState::encode): Encode PostLayoutData for GTK and
        remove our custom cursorRect.
        (WebKit::EditorState::decode): Decode PostLayoutData for GTK and
        remove our custom cursorRect.
        (WebKit::EditorState::PostLayoutData::encode): Reorder it to
        reduce the amonut of ifdefs.
        (WebKit::EditorState::PostLayoutData::decode): Ditto.
        * Shared/EditorState.h: Add AttributeStrikeThrough to
        TypingAttributes enum.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::selectionDidChange): Rename
        updateTextInputState() to selectionDidChange() and also notify the
        WebKitWebView.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitEditorState.cpp: Added.
        (webkitEditorStateGetProperty):
        (webkit_editor_state_class_init):
        (webkitEditorStateSetTypingAttributes):
        (webkitEditorStateCreate):
        (webkitEditorStateChanged):
        (webkit_editor_state_get_typing_attributes):
        * UIProcess/API/gtk/WebKitEditorState.h: Added.
        * UIProcess/API/gtk/WebKitEditorStatePrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewSelectionDidChange): Notify the WebKitEditorState if
        it has already been created.
        (webkit_web_view_get_editor_state): Ensure a WebKitEditorState and
        return it.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseUpdateTextInputState): Get the caret cursor rect
        from PostLayoutData.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Add webkit_editor_state_get_type.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for WebKitEditorState.
        * UIProcess/API/gtk/webkit2.h: Include WebKitEditorState.h.
        * UIProcess/PageClient.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::editorStateChanged): Call PageClientImpl::selectionDidChange().
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformEditorState): Add typing attributes to EditorState.

2015-07-20  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:

2015-07-20  Simon Fraser  <simon.fraser@apple.com>

        Facebook in tiled fullscreen is slow
        https://bugs.webkit.org/show_bug.cgi?id=147134
        rdar://problem/21823349

        Reviewed by Tim Horton.
        
        TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded() could cause a page to toggle
        between two fixed layout sizes differing by a pixel, because of rounding. This would cause
        lots of extra layouts and painting.
        
        This happened because the the fixed layout size was computed using ceil(m_webPage.size().width() / viewScale)

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):

2015-07-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix crash due to RemoteLayerTreeDisplayRefreshMonitor outliving RemoteLayerTreeDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=147124
        <rdar://problem/21582858>

        Reviewed by Simon Fraser.

        Refactors RemoteLayerTreeDisplayRefreshMonitor to use a weak pointer rather than a reference
        to its RemoteLayerTreeDrawingArea, since the drawing area may be deallocated before the monitor
        in some rare cases. This rarely caused pages using requestAnimationFrame to crash on iOS. However,
        this should not be the case: logically, a RemoteLayerTreeDrawingArea should always outlive its
        refresh monitors. Refer to https://bugs.webkit.org/show_bug.cgi?id=147128 for more details.

        * WebProcess/WebPage/Cocoa/RemoteLayerTreeDisplayRefreshMonitor.h:
        * WebProcess/WebPage/Cocoa/RemoteLayerTreeDisplayRefreshMonitor.mm:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::RemoteLayerTreeDisplayRefreshMonitor):
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::~RemoteLayerTreeDisplayRefreshMonitor): On destruction, checks
            first to see whether or not the drawing area has been deallocated before telling it to update its monitors.
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::requestRefreshCallback):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        (WebKit::RemoteLayerTreeDrawingArea::createWeakPtr): Creates and returns a new weak pointer to itself.
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):

2015-07-20  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Cache actions with domains that match everything
        https://bugs.webkit.org/show_bug.cgi?id=147050

        Reviewed by Benjamin Poulain.

        * UIProcess/API/APIUserContentExtensionStore.h:

2015-07-20  Gordon Sheridan  <gordon_sheridan@apple.com>

        Support blocking a plug-in for non-security reasons
        https://bugs.webkit.org/show_bug.cgi?id=145009

        Reviewed by Anders Carlsson.

        * Shared/Plugins/PluginModuleInfo.h:
        Replace PluginModuleBlocked with separate enum values for blocking for security and compatibility.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toWKPluginLoadPolicy):
        Modify to handle change to PluginModuleBlocked enum.

        (WebKit::toPluginModuleLoadPolicy):
        Ditto.

        * UIProcess/API/C/WKPluginLoadPolicy.h:
        Added enum value for blocking a plugin for compatibility reasons.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::shouldBlockPlugin):
        Check load policy for both reasons a plugin may be blocked.

        (WebKit::WKPlugInModuleLoadPolicyToPluginModuleLoadPolicy):
        Added function to convert between load policy enum types.

        (WebKit::PluginInfoStore::defaultLoadPolicyForPlugin):
        Modified to call WKLoadPolicyForPluginVersion() which can distinguish between blocked for security or compatibility.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        Updated to recognize both PluginModuleBlocked enum values that indicate a plugin is blocked.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Ditto.

        (WebKit::WebPage::canPluginHandleResponse):
        Ditto.

2015-07-20  Antti Koivisto  <antti@apple.com>

        NSURLCache fallback does not work on iOS due to sandboxing
        https://bugs.webkit.org/show_bug.cgi?id=146314
        <rdar://problem/21433691>

        Reviewed by Anders Carlsson.

        This broke with earlier cache path computation changes.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):

            NSURLCache path is relative to the container cache path so "." is sufficient.
            This puts the cache files under
            <container>/Library/Caches/com.apple.WebKit.Networking/

2015-07-20  Jeremy Jones  <jeremyj@apple.com>

        Adopt AVPlayerLayerView
        https://bugs.webkit.org/show_bug.cgi?id=146862

        Reviewed by Simon Fraser.

        The CALayerHost is replaced with WebLayerHostView to be compatible with UIView animations.
        videoLayerFrame and videoLayerGravity no longer need to be stored because they are stored
        where they are used in the interface. Some animation is improved in the conversion.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (+[WebLayerHostView layerClass]): Add class WebLayerHostView.
        (-[WebLayerHostView contextID]):
        (-[WebLayerHostView setContextID:]):
        (-[WebLayerHostView layerHost]):
        (WebKit::WebVideoFullscreenManagerProxy::invalidate): layer -> view
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID):
        Apply the hostingDeviceScaleFactor transform to -sublayerTransform instead of to
        -transform. This more directly inverts the tranform WebProcess and allows -transform
        to be used for animation in the UIProcess. This is important because UIView's actions
        animate -transform, but not -sublayerTrasform.

        (WebKit::WebVideoFullscreenManagerProxy::didCleanupFullscreen): layer -> view
        (WebKit::WebVideoFullscreenModelContext::setVideoLayerFrame): Deleted.
        (WebKit::WebVideoFullscreenModelContext::videoLayerFrame): Deleted.
        (WebKit::WebVideoFullscreenModelContext::setVideoLayerGravity): Deleted.
        (WebKit::WebVideoFullscreenModelContext::videoLayerGravity): Deleted.
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement):
        Set initial video layer frame to fix start point of animation.

        (WebKit::WebVideoFullscreenManager::didSetupFullscreen):
        dispatch_async allows the CATransaction to complete before continuing with the animation.
        This prevents a flash during animation.

2015-07-20  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r174287): Flash of black when opening a new web view or navigating to a new page
        https://bugs.webkit.org/show_bug.cgi?id=147127
        <rdar://problem/21474317>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotAtSize):
        Avoid using an invalid documentBackgroundColor, fall back to baseBackgroundColor
        like we did before r174287.

2015-07-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Seccomp] Should be easier to debug blocked syscalls
        https://bugs.webkit.org/show_bug.cgi?id=142980

        These should be printed even when not running in debug mode. There is no
        value in hiding errors from release build users.

        Reviewed by Žan Doberšek.

        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        (WebKit::SeccompBroker::runLoop): Don't close stderr et. al. in release builds.
        * Shared/linux/SeccompFilters/Syscall.cpp:
        (WebKit::write_uint): Added.
        (WebKit::reportUnexpectedSyscall): Added.
        (WebKit::Syscall::createFromContext): Call reportUnexpectedSyscall. Also, no need to crash
        here in release builds.
        * Shared/linux/SeccompFilters/SyscallPolicy.cpp:
        (WebKit::SyscallPolicy::hasPermissionForPath): Print a warning when access is denied.
        (WebKit::SyscallPolicy::permissionToString): Added.
        * Shared/linux/SeccompFilters/SyscallPolicy.h: Add permissionToString.

2015-07-20  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO) build after r186396
        https://bugs.webkit.org/show_bug.cgi?id=147116

        Reviewed by Brent Fulgham.

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

2015-07-20  Tomas Popela  <tpopela@redhat.com>

        [GTK] Add selection-changed signal to the WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=137116

        Reviewed by Carlos Garcia Campos.

        Add a new object WebKitWebEditor where the editing capabilities of a
        WebPage will be grouped and exposed. Add the selection-changed signal
        there (we used the same name as in WK1 API).

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebEditor.cpp: Added.
        (didChangeSelection):
        (webkitWebEditorCreate):
        (webkit_web_editor_get_page):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebEditor.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebEditorPrivate.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitWebPageGetPage):
        (webkit_web_page_get_editor):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPagePrivate.h:
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:

2015-07-16  Anders Carlsson  <andersca@apple.com>

        WebsiteDataStore operations need to grab background assertions
        https://bugs.webkit.org/show_bug.cgi?id=147015
        rdar://problem/21799011

        Reviewed by Sam Weinig.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fetchWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteData):
        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):

2015-07-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, placate -Wmismatched-tags after r187011

        It's basically bug #146990 again. Oops.

        * WebProcess/gtk/SeccompFiltersWebProcessGtk.h:

2015-07-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add seccomp filters support
        https://bugs.webkit.org/show_bug.cgi?id=110014

        Reviewed by Žan Doberšek.

        Allow building with ENABLE_SECCOMP_FILTERS=ON. Based on work by Thiago Marcos P. Santos.

        * PlatformGTK.cmake: Support ENABLE_SECCOMP_FILTERS build option.
        * WebProcess/gtk/SeccompFiltersWebProcessGtk.cpp: Added.
        (WebKit::SeccompFiltersWebProcessGtk::SeccompFiltersWebProcessGtk):
        (WebKit::SeccompFiltersWebProcessGtk::platformInitialize):
        * WebProcess/gtk/SeccompFiltersWebProcessGtk.h: Added.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Initialize default
        GTK+ web process seccomp filters.

2015-07-18  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Reduce PassRefPtr in WebKit2 - 3
        https://bugs.webkit.org/show_bug.cgi?id=146995

        Reviewed by Daniel Bates.

        To remove PassRefPtr, this patch reduces use of PassRefPtr in WebKit2.
        Because some uses depend on WebCore, WebCore, WK1 ports are modified as well.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::getOrCreateUniqueIDBDatabase):
        * DatabaseProcess/DatabaseProcess.h:
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::takeInitializationReply):
        * PluginProcess/PluginControllerProxy.h:
        * Shared/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::texture):
        * Shared/CoordinatedGraphics/CoordinatedBackingStore.h:
        (WebKit::CoordinatedBackingStore::create):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::create):
        (WebKit::WebCoordinatedSurface::createWithSurface):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::webCryptoMasterKey):
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::webCryptoMasterKey):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        (WKPageSetPageNavigationClient):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/Authentication/WebCredential.h:
        * UIProcess/Authentication/WebProtectionSpace.h:
        * UIProcess/AutoCorrectionCallback.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::webCryptoMasterKey):
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::createPopupMenuProxy):
        (WebKit::WebView::createContextMenuProxy):
        (WebKit::WebView::createColorPicker):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebViewEfl::createPopupMenuProxy):
        (WebKit::WebViewEfl::createContextMenuProxy):
        (WebKit::WebViewEfl::createColorPicker):
        * UIProcess/efl/WebViewEfl.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleSubresourceLoad):
        (WebKit::WebResourceLoadScheduler::schedulePluginStreamLoad):
        * WebProcess/Network/WebResourceLoadScheduler.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::fromNPP):
        (WebKit::NetscapePlugin::snapshot):
        (WebKit::NetscapePlugin::liveResourceData):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::snapshot):
        (WebKit::PluginProxy::liveResourceData):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::storageArea):
        (WebKit::StorageNamespaceImpl::copy):
        * WebProcess/Storage/StorageNamespaceImpl.h:
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toHistoryItem):
        * WebProcess/WebCoreSupport/SessionStateConversion.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createPopupMenu):
        (WebKit::WebChromeClient::createSearchPopupMenu):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createDocumentLoader):
        (WebKit::WebFrameLoaderClient::createFrame):
        (WebKit::WebFrameLoaderClient::createPlugin):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::create):
        (WebKit::WebPage::createDocumentLoader):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::lookupTextAtLocation):

2015-07-18  Simon Fraser  <simon.fraser@apple.com>

        Scroll position jumps when scrolling scaling pages down in split view
        https://bugs.webkit.org/show_bug.cgi?id=147072
        rdar://problem/21769577

        Reviewed by Sam Weinig.
        
        When apple.com/music is in Split View at a reduced scale, scrolling the page
        can cause unwanted scroll jumps. This happened because we'd enter
        TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded() with a pending
        layout, so run the autosizing logic. When scrolled near the bottom, the unconstrained
        layout resulted in a shorter document, which truncated the scroll position. The
        scaled layout then restored the longer document, but it also restored that
        truncated scroll position.
        
        Forcing a layout is sufficient to fix the bug for this page, and doing a single
        layout (which will happen anyway) is preferable to running the autosize logic
        if layout happens to be dirty.

        I was not able to make a test to reproduce the problem. Entering
        scaleViewToFitDocumentIfNeeded() with pending layout was triggerable
        using a transform transition, but I was not able to reproduce incorrect
        scroll position restoration.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):

2015-07-17  Andy Estes  <aestes@apple.com>

        [iOS] Further tighten the sandbox around pages fetched with Content-Disposition: attachment
        https://bugs.webkit.org/show_bug.cgi?id=147044
        rdar://problem/21567820

        Reviewed by Brady Eidson.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Enabled Content-Disposition: attachment sandbox on iOS.

2015-07-17  Tim Horton  <timothy_horton@apple.com>

        [iOS] TextIndicator has a large forehead when line-height > 1
        https://bugs.webkit.org/show_bug.cgi?id=147058
        <rdar://problem/21643094>

        Reviewed by Dean Jackson.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        Apply a review comment that I left myself and then forgot about.

2015-07-17  Enrica Casucci  <enrica@apple.com>

        [iOS] Implement selectionInteractionAssistant accessor.
        https://bugs.webkit.org/show_bug.cgi?id=147054
        rdar://problem/20864286

        Reviewed by Tim Horton.

        One more change to adopt the new selection interaction
        model on iOS.

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

2015-07-17  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r186964): Crash in WebKit2.CloseFromWithinCreatePage
        https://bugs.webkit.org/show_bug.cgi?id=147055

        Reviewed by Alex Christensen.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage): Grab the main frame’s URL before calling out to the
        client, who may destroy the frame.

2015-07-17  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/21803781> The external URL policy is not reported correctly in navigation actions that create new windows
        https://bugs.webkit.org/show_bug.cgi?id=147040

        Reviewed by Dean Jackson.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage): Disallow App Links if the new page is for the
        same protocol, host and port as the main frame of this page.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Disallow App Links if
        m_shouldSuppressAppLinksInNextNavigationPolicyDecision is set, and reset it. See below for
        when we set it.
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction): Disallow App Links if the new window
        is for the same protocol, host and port as the main frame of this page.
        (WebKit::WebPageProxy::createNewPage): Make the new page disallow App Links in the first
        policy decision if it is for the same protocol, host and port as the main frame of this
        page.
        * UIProcess/WebPageProxy.h: Added m_shouldSuppressAppLinksInNextNavigationPolicyDecision
        member variable.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow): Pass the shouldOpenExternalURLsPolicy.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): Ditto.

2015-07-17  Tim Horton  <timothy_horton@apple.com>

        iOS TextIndicators include text that is not supposed to be indicated
        https://bugs.webkit.org/show_bug.cgi?id=147028
        <rdar://problem/21643094>

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::shouldCreateTransientPaintingSnapshot):

2015-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Cleanup PasteboardHelper
        https://bugs.webkit.org/show_bug.cgi?id=147035

        Reviewed by Žan Doberšek.

        Use PasteboardHelper::singleton() instead of
        PasteboardHelper::defaultPasteboardHelper().

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseConstructed):
        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::startDrag):
        (WebKit::DragAndDropHandler::fillDragData):
        (WebKit::DragAndDropHandler::dataObjectForDropData):
        (WebKit::DragAndDropHandler::requestDragData):

2015-07-16  Matt Baker  <mattbaker@apple.com>

        [Mac] Web Inspector toolbar can be covered by the Safari tab bar when docked to the right
        https://bugs.webkit.org/show_bug.cgi?id=146994

        Reviewed by Timothy Hatcher.

        WebInspectorProxy contained logic which ignored the next frame change notification from the inspected view,
        whenever it updated the frames of both the Inspector view and inspected view. This patch removes that logic,
        as it prevented the Inspector's frame from being adjusted after changes to the browser's top content inset.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter ignoreNextInspectedViewFrameDidChange]): Deleted.
        (-[WKWebInspectorProxyObjCAdapter inspectedViewFrameDidChange:]): Deleted.
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange): Deleted.

2015-07-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: [Mac] Save dialog not working when inspector is docked
        https://bugs.webkit.org/show_bug.cgi?id=146991

        Reviewed by Sam Weinig.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::runOpenPanel):
        (WebKit::WebInspectorProxy::platformSave):
        When the window is nil (docked) use a non-window version of running the dialog.

2015-07-16  Tim Horton  <timothy_horton@apple.com>

        Add shrink-wrapped link highlights
        https://bugs.webkit.org/show_bug.cgi?id=147021
        <rdar://problem/21643094>

        Reviewed by Enrica Casucci.

        * Shared/InteractionInformationAtPosition.cpp:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/InteractionInformationAtPosition.h:
        Add a TextIndicator to InteractionInformationAtPosition.
        Make use of some new C++ features.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView willPresentPreviewViewController:forPosition:inSourceView:]):
        (-[WKContentView didDismissPreviewViewController:committing:]):
        Make use of the TextIndicator (if we have one) to show a shrink-wrapped
        snapshot of the link.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):
        Build a TextIndicator for the link if possible.

2015-07-16  Matt Rajca  <mrajca@apple.com>

        Media Session: remove plumbing for delivering start/end-of-interruption events
        https://bugs.webkit.org/show_bug.cgi?id=147005

        Reviewed by Eric Carlson.

        Instead of receiving interruptions through WebKit, we will provide platform-specific implementations in WebCore
        so the same behavior is available to all clients.

        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-07-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r186464): [SOUP] ASSERTION FAILED: !m_messageReceiverMapCount when closing any tab
        https://bugs.webkit.org/show_bug.cgi?id=147006

        Reviewed by Anders Carlsson.

        Remove the message receiver before it is deallocated.

        * UIProcess/Network/CustomProtocols/soup/CustomProtocolManagerProxySoup.cpp:
        (WebKit::CustomProtocolManagerProxy::~CustomProtocolManagerProxy):

2015-07-16  Brady Eidson  <beidson@apple.com>

        Review feedback followup for:
        REGRESSION(r186088): Crash under WebKit::WebPageProxy::didFailLoadForFrame
        <rdar://problem/21692212> and https://bugs.webkit.org/show_bug.cgi?id=146988

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::refView): CFRetain instead of Obj-C retain.
        (WebKit::PageClientImpl::derefView): CFRelease instead of Obj-C release.


2015-07-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Linux] Seccomp: fix -Wmismatched-tags
        https://bugs.webkit.org/show_bug.cgi?id=146990

        Reviewed by Žan Doberšek.

        WebProcessCreationParameters is a struct nowadays, not a class, so declare it appropriately.

        * Shared/linux/SeccompFilters/SyscallPolicy.h:

2015-07-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r185415): [GTK] Browsers crash when an input method is enabled
        https://bugs.webkit.org/show_bug.cgi?id=146639

        Reviewed by Žan Doberšek.

        In r185415 I assumed that preedit signals were always emitted
        after a keypress was handled by the WebView. However, some input
        methods handle the keyboard events before the WebView, and preedit
        signals are emitted but no key event has been handled by the
        WebView. So, instead of asserting when filter key event completion
        handler is nullptr, we should check whether the current event was
        generated for a WebView filter request or not. In case the
        completion handler is nullptr, we send the event directly to the
        page, instead of going through the WebView, since there won't be
        editing commands for those events anyway.

        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::handleKeyboardEvent):
        (WebKit::InputMethodFilter::handleKeyboardEventWithCompositionResults):

2015-07-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Follow up to r186887 for GTK+.

        Add GTK+ implementation of PageClientImpl::refView/derefView.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::refView):
        (WebKit::PageClientImpl::derefView):
        * UIProcess/API/gtk/PageClientImpl.h:

2015-07-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Input method filter is always enabled when the view is focused
        https://bugs.webkit.org/show_bug.cgi?id=146965

        Reviewed by Martin Robinson.

        It should only be enabled when the view is focused and there's an
        editable element focused. In r138544, when input methods were
        implemented, the message SetInputMethodState was added, but it was
        never used. Instead, the notifyFocusIn method of the IM filter
        enables the input method unconditionally. We should actually use
        the SetInputMethodState message to enable/disable input methods
        when editable elements are focused/unfocused.

        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::setEnabled): Call notifyFocusedIn/Out
        when inputs methods are enabled/disabled instead of notifying the
        IM context directly.
        (WebKit::InputMethodFilter::setCursorRect): Do not update the
        cursor position if input methods are didabled.
        (WebKit::InputMethodFilter::notifyFocusedIn): Do nothing when
        input methods are disabled. Do not enable input methods
        uncontionally here.
        (WebKit::InputMethodFilter::notifyFocusedOut): Do not disable
        input methods uncontionally here.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::setInputMethodState): Call
        WebPage::setInputMethodState() for GTK platform.
        * WebProcess/WebPage/WebPage.h: Add setInputMethodState() for GTK platform.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::setInputMethodState): Update input method state
        and send SetInputMethodState message to the UI process if state changed.

2015-07-15  Brady Eidson  <beidson@apple.com>

        REGRESSION(r186088): Crash under WebKit::WebPageProxy::didFailLoadForFrame
        <rdar://problem/21692212> and https://bugs.webkit.org/show_bug.cgi?id=146988

        Reviewed by Sam Weinig.

        When a loader delegate callback results in the WKView getting deallocated, then the PageClient
        is also destroyed.

        WebPageProxy then (often) turns around and uses the PageClient anyways.

        Tried to write a TestWebKitAPI test for this, but only didFailLoadForFrame appears to obviously 
        be vulnerable, and there seems to be no way to reproduce that failure case under TestWebKitAPI.

        * UIProcess/PageClient.h: Add ref/derefView.

        * UIProcess/API/gtk/PageClientImpl.h: Stub them out.
        * UIProcess/efl/WebViewEfl.h: Stub them out.

        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::refView): [m_wkView retain]
        (WebKit::PageClientImpl::derefView): [m_wkView release]

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::refView): Retain all 3 views.
        (WebKit::PageClientImpl::derefView): Release all 3 views.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::PageClientProtector::PageClientProtector): Calls refView() on the PageClient.
        (WebKit::PageClientProtector::~PageClientProtector): Calls derefView() on the PageClient.
        (WebKit::WebPageProxy::didChangeBackForwardList): All methods that make m_loaderClient or
          m_pageClient callouts get a protector at their head.
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::shouldKeepCurrentBackForwardListItemInList):
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::didCreateMainFrame):
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::didStartProgress):
        (WebKit::WebPageProxy::didChangeProgress):
        (WebKit::WebPageProxy::didFinishProgress):
        (WebKit::WebPageProxy::didDestroyNavigation):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didLayoutForCustomContentProvider):
        (WebKit::WebPageProxy::didLayout):
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::didDetectXSSForFrame):
        (WebKit::WebPageProxy::frameDidBecomeFrameSet):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseSync):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didUpdateHistoryTitle):
        (WebKit::WebPageProxy::wrapCryptoKey):
        (WebKit::WebPageProxy::unwrapCryptoKey):
        (WebKit::WebPageProxy::navigationGestureDidBegin):
        (WebKit::WebPageProxy::navigationGestureWillEnd):
        (WebKit::WebPageProxy::navigationGestureDidEnd):
        (WebKit::WebPageProxy::willRecordNavigationSnapshot):

2015-07-15  Sam Weinig  <sam@webkit.org>

        Color match plug-ins
        <rdar://problem/21758722>
        https://bugs.webkit.org/show_bug.cgi?id=146987

        Reviewed by Dean Jackson.

        * Platform/mac/LayerHostingContext.h:
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::setColorMatchUntaggedContent):
        (WebKit::LayerHostingContext::colorMatchUntaggedContent):
        Add setter/getter for color matching untagged content.

        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::updateLayerHostingContext):
        Have plug-ins CAContext's color match untagged colors into sRGB.

2015-07-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Rename PACKAGE_LOCALE_DIR to LOCALEDIR
        https://bugs.webkit.org/show_bug.cgi?id=146975

        Reviewed by Martin Robinson.

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_class_init):
        * WebProcess/gtk/WebProcessMainGtk.cpp:

2015-07-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Rename LIBEXECDIR to PKGLIBEXECDIR
        https://bugs.webkit.org/show_bug.cgi?id=140070

        Reviewed by Martin Robinson.

        The path that's currently stored in LIBEXECDIR is one level lower than
        the real LIBEXECDIR, which we are going to need. Introduce PKGLIBEXECDIR
        so that we can use LIBEXECDIR for the real LIBEXECDIR in the future.

        * PlatformGTK.cmake:
        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        (WebKit::findWebKitProcess):

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

        [Mac][WK2] Videos should only have access to cookies when -[NSURLRequest HTTPShouldHandleCookies] is YES
        https://bugs.webkit.org/show_bug.cgi?id=146763
        <rdar://problem/21736994>

        Reviewed by Darin Adler.

        We should only fetch cookies from the Network process when -[NSURLRequest HTTPShouldHandleCookies] is YES.
        This makes us more closely match the behavior of the CFNetwork implementation of
        -[__NSURLSessionLocal {_copyCookiesForRequestUsingAllAppropriateStorageSemantics, _getCookieHeadersForTask:completionHandler}].

        * Shared/mac/CookieStorageShim.mm:
        (-[WKNSURLSessionLocal _copyCookiesForRequestUsingAllAppropriateStorageSemantics:]):
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

2015-07-14  Enrica Casucci  <enrica@apple.com>

        [iOS] Add support for updateSelectionWithExtentPoint:withBoundary.
        https://bugs.webkit.org/show_bug.cgi?id=146951
        rdar://problem/20864286

        Reviewed by Tim Horton.

        Add implementation for new method used by text selection
        engine on iOS. The new function modifies the selection near the given point
        and snaps it at the boundary of the specified granularity.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView updateSelectionWithExtentPoint:completionHandler:]):
        (-[WKContentView updateSelectionWithExtentPoint:withBoundary:completionHandler:]):
        (-[WKContentView _characterBeforeCaretSelection]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateSelectionWithExtentPoint):
        (WebKit::WebPageProxy::updateSelectionWithExtentPointAndBoundary):
        (WebKit::WebPageProxy::requestDictationContext):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForGranularityAtPoint):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::WebPage::updateSelectionWithExtentPointAndBoundary):

2015-07-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Linux] SeccompBrokerClient should cache arbitrary file descriptors
        https://bugs.webkit.org/show_bug.cgi?id=140068

        Reviewed by Žan Doberšek.

        If malloc() attempts to open /proc/sys/vm/overcommit_memory in a SIGSYS
        signal handler, the SeccompBroker will attempt to recursively broker the
        open() syscall. Generalize the existing code that already handles the
        similar case where malloc() opens /sys/devices/system/cpu/online to
        handle this situation as well.

        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        (WebKit::SIGSYSHandler):
        (WebKit::SeccompBrokerClient::SeccompBrokerClient):
        (WebKit::SeccompBrokerClient::~SeccompBrokerClient):
        (WebKit::SeccompBrokerClient::handleIfOpeningCachedFile):
        (WebKit::SeccompBrokerClient::cacheFile):
        (WebKit::SeccompBrokerClient::handleIfOpeningOnlineCPUCount): Deleted.

2015-07-15  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Accelerated compositing is enabled by MiniBrowser in Wayland
        https://bugs.webkit.org/show_bug.cgi?id=146827

        Reviewed by Žan Doberšek.

        WebKit2Gtk+ does not currently support accelerated compositing. For the reason,
        we forcedly disable it in webkitWebViewBaseCreateWebPage. However, when we launch
        MiniBrowser in wayland, the unsupported feature is re-enabled since the existing
        setting is overwritten by a newly created one. Here the default value for
        accelerated compositing is true. We can fix this by moving the code disabling
        accelerated composition to WebPreferences::platformInitializeStore() so that
        we make sure the accelerated compositing is always disabled for wayland.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreateWebPage): Deleted.
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformInitializeStore):

2015-07-15  Dan Bernstein  <mitz@apple.com>

        Fixed build fix.

        * Platform/spi/ios/SafariServicesSPI.h:

2015-07-14  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Possible wrong rendering with scrolling
        https://bugs.webkit.org/show_bug.cgi?id=146958

        Reviewed by Gyuyoung Kim.

        While r174261 fixing build break, there is some mistake that flushes contents layer
        instead of overlay layer.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):

2015-07-14  Dan Bernstein  <mitz@apple.com>

        Attempted build fixes.

        * Platform/spi/ios/SafariServicesSPI.h:

2015-07-14  Dan Bernstein  <mitz@apple.com>

        Attempted build fixes.

        * Platform/spi/ios/SafariServicesSPI.h:

2015-07-14  Anders Carlsson  <andersca@apple.com>

        Remove wkPopupMenu from WebCoreSystemInterface; it's not called from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=146945

        Reviewed by Tim Horton.

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

2015-07-14  Anders Carlsson  <andersca@apple.com>

        Release assert under StyleResolver::loadPendingImages() caused by MemoryPressureHandler
        https://bugs.webkit.org/show_bug.cgi?id=146940
        rdar://problem/21605505

        Reviewed by Sam Weinig.

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

2015-07-14  Sam Weinig  <sam@webkit.org>

        WebKit needs to serialize numeric values in NSError userInfo
        <rdar://problem/21818117>
        https://bugs.webkit.org/show_bug.cgi?id=146936

        Reviewed by Anders Carlsson.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        Encode userInfo values that are NSNumbers in addition to NSStrings and NSURLs. Decoding 
        is already handled.

2015-07-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Linux] SeccompFilters: whitelist all NPAPI plugin directories
        https://bugs.webkit.org/show_bug.cgi?id=140067

        Reviewed by Žan Doberšek.

        * PlatformEfl.cmake: Build PluginSearchPath.cpp
        * PlatformGTK.cmake: Build PluginSearchPath.cpp
        * Shared/Plugins/unix/PluginSearchPath.cpp: Added.
        (WebKit::pluginsDirectories): Moved from PluginInfoStoreUnix.cpp.
        * Shared/Plugins/unix/PluginSearchPath.h: Added.
        * Shared/linux/SeccompFilters/SyscallPolicy.cpp:
        (WebKit::SyscallPolicy::addDefaultWebProcessPolicy): Add the entire
        plugin search path to the whitelist.
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::pluginsDirectories): Now gets plugins
        directories from PluginSearchPath.cpp

2015-07-14  Yongjun Zhang  <yongjun_zhang@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=146917
        iOS WebKit doesn't build.
        rdar://problem/21801544

        Fix the build - don't use deprecated methods.

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _registerPreviewInWindow:]):
        (-[WKContentView _unregisterPreviewInWindow:]):

2015-07-14  Yongjun Zhang  <yongjun_zhang@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=146909
        Add actions for default link preview that uses SFSafariViewController.

        Use the new private properties to prepare actions for the default link preview controller.

        Reviewed by Dan Bernstein.

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

2015-07-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Linux] SeccompFilters: whitelist source directory on all ports
        https://bugs.webkit.org/show_bug.cgi?id=140066

        Reviewed by Žan Doberšek.

        Move this from EFL to port-independent code.

        * Shared/linux/SeccompFilters/SyscallPolicy.cpp:
        (WebKit::SyscallPolicy::addDefaultWebProcessPolicy):
        * WebProcess/efl/SeccompFiltersWebProcessEfl.cpp:
        (WebKit::SeccompFiltersWebProcessEfl::platformInitialize):

2015-07-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add a runtime check for X11 display in webkitWebViewBaseExitAcceleratedCompositingMode()
        https://bugs.webkit.org/show_bug.cgi?id=146711

        Reviewed by Carlos Garcia Campos.

        webkitWebViewBaseExitAcceleratedCompositingMode() is already guarded with
        X11 build guards, but it should also do a runtime check that the program
        is running under an X11 display before proceeding.

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

2015-07-13  Matt Rajca  <mrajca@apple.com>

        Media Session: add plumbing for delivering start/end-of-interruption events
        https://bugs.webkit.org/show_bug.cgi?id=146837

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageHandleMediaSessionInterruptionEvent):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMediaSessionInterruptionEvent):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::handleMediaSessionInterruptionEvent):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-07-13  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] When choosing an initial viewport scale, take overflow on the <body> into account
        https://bugs.webkit.org/show_bug.cgi?id=146918
        rdar://problem/9222837

        Reviewed by Tim Horton.

        Use as input to the viewport scaling algorithm a contents size from the FrameView
        that takes overflow on the viewport renderer into account. This prevents unexpected
        viewports scaling on pages that have content that overflows their expressed contents size,
        but apply overflow to the <body>.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameDidLayout): Use contentsSizeRespectingOverflow(),
        rather than raw contentsSize(), to determine scaling.

2015-07-13  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

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

2015-07-13  Dan Bernstein  <mitz@apple.com>

        Removed now-unused SPI -[WKWebView _loadRequest:withOptions:].

        Rubber-stamped by Anders Carlsson.

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

2015-07-13  Anders Carlsson  <andersca@apple.com>

        Apps linked with a deployment target of iOS 7.x or earlier crash when using modern WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=146913
        rdar://problem/21789252

        Reviewed by Dan Bernstein.

        Make a top-level symlink from /System/Library/PrivateFrameworks/WebKit.framework to
        /System/Library/Frameworks/WebKit.framework.

        * WebKit2.xcodeproj/project.pbxproj:

2015-07-13  Anders Carlsson  <andersca@apple.com>

        Silverlight causes tabs to hang
        https://bugs.webkit.org/show_bug.cgi?id=146912
        rdar://problem/21686508

        Reviewed by Sam Weinig.

        Make sure to link production builds of the legacy plug-in process against the shim on 10.11 and newer.

        * Configurations/PluginProcess.xcconfig:

2015-07-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Linux] SeccompFilters: handle alternate install prefixes
        https://bugs.webkit.org/show_bug.cgi?id=140065

        Reviewed by Žan Doberšek.

        If the install prefix is something other than /usr, e.g. /usr/local or
        ~/jhbuild/install, then we want to make sure to allow libraries and data
        from that prefix.

        * PlatformEfl.cmake:
        * Shared/linux/SeccompFilters/SyscallPolicy.cpp:
        (WebKit::SyscallPolicy::addDefaultWebProcessPolicy):

2015-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Contents not correctly laid out when the web view is not realized
        https://bugs.webkit.org/show_bug.cgi?id=142532

        Reviewed by Darin Adler.

        The problem is that we are not reporting any size until the web
        view is realized, so any web view loaded in a separate tab in the
        browser, will report 0x0 as the window.innerWidth,
        window.innerHeight until the view is realized. Websites that use
        the window.innerWidth/innerHeight during the page load to decide
        how to lay out the contents will be rendered wrongly.
        I haven't been able to reproduce this with unit tests, as this
        requires the particular case of same window but different web
        views using tabs for example.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::viewSize): Always report the drawing area
        size to make usre it's in sync with the WebProcess page size.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSizeAllocate): Remove the optimization of only
        report the size when it has changed, since both the redirected
        window and the drawing area already do that check. Also remove the
        optimization of waiting until the view is mapped to report its
        size, since that's often too late for websites using the window
        size during load.
        (webkitWebViewBaseMap): Never report size on map, it should have
        already been reported by size-allocate.

2015-07-11  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Inspector should be able to be docked to the bottom of a narrow window
        https://bugs.webkit.org/show_bug.cgi?id=146871

        Reviewed by Timothy Hatcher.

        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCanAttach):
        * WebProcess/WebPage/WebInspector.cpp:

2015-07-11  Joseph Pecoraro  <pecoraro@apple.com>

        Allow clients to opt-out of default app link link actions
        https://bugs.webkit.org/show_bug.cgi?id=146883
        <rdar://problem/21221902>

        Reviewed by Dan Bernstein.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::shouldIncludeAppLinkActionsForElement):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::shouldIncludeAppLinkActionsForElement):
        Plumbing for a new delegate message to ask the client if they
        would like app link actions or not. Default is yes.

        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant defaultActionsForLinkSheet:]):
        (-[WKActionSheetAssistant defaultActionsForImageSheet:]):
        Pass elementInfo into methods generating default actions.
        
        (-[WKActionSheetAssistant _appendOpenActionsForURL:actions:elementInfo:]):
        When generating open actions, if the process has AppLink capabilities
        ask the client if they want to include AppLink actions or fall back
        to the basic Open action.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView actionSheetAssistant:shouldIncludeAppLinkActionsForElement:]):
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView actionSheetAssistant:shouldIncludeAppLinkActionsForElement:]):
        Assistant delegate implementations forward to the UIDelegate.

2015-07-11  Joseph Pecoraro  <pecoraro@apple.com>

        Update default link action sheets for app links
        https://bugs.webkit.org/show_bug.cgi?id=146658
        <rdar://problem/21221902>

        Reviewed by Dan Bernstein.

        * Shared/mac/SandboxUtilities.h:
        * Shared/mac/SandboxUtilities.mm: Renamed from Source/WebKit2/Shared/mac/SandboxUtilities.cpp.
        (WebKit::processHasEntitlement):
        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::applicationType):
        (WebKit::hasEntitlement): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:
        Share a helper for checking if the current process has an entitlement.

        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction _elementActionWithType:title:actionHandler:]):
        (+[_WKElementAction _elementActionWithType:customTitle:assistant:]):
        * UIProcess/API/Cocoa/_WKElementActionInternal.h:
        Add an internal way to make an element action with a standard type and regular handler.
        We use this for the new standard types that don't have a default implementation.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (applicationHasAppLinkEntitlements):
        (appLinkForURL):
        Helpers checking access to app links and fetching app links.

        (-[WKActionSheetAssistant _appendOpenActionsForURL:actions:]):
        (-[WKActionSheetAssistant defaultActionsForLinkSheet]):
        (-[WKActionSheetAssistant defaultActionsForImageSheet]):
        Create "Open in Safari" and "Open in 'App'" default actions for AppLinks,
        otherwise add the normal default "Open" action.

2015-07-11  Enrica Casucci  <enrica@apple.com>

        Remove incorrect overriding of inputAssistantItem in WKContentView.
        https://bugs.webkit.org/show_bug.cgi?id=146863
        rdar://problem/21507154

        Reviewed by Sam Weinig.

        Correction to the patch in r186713.
        We need to provide the inputAssistantItem from the responder.

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

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

        Unreviewed, rolling out r186689 and r186710.
        https://bugs.webkit.org/show_bug.cgi?id=146880

        May have caused a PLT regression and broken a layout test
        (Requested by cdumez on #webkit).

        Reverted changesets:

        "[WK2] Increase the QoS of some of our WorkQueues to match the
        one of our processes"
        https://bugs.webkit.org/show_bug.cgi?id=146855
        http://trac.webkit.org/changeset/186689

        "REGRESSION (r186689?): fast/frames/frame-limit.html timeout
        on Mavericks {Release,Debug} WK2 bots"
        https://bugs.webkit.org/show_bug.cgi?id=146876
        http://trac.webkit.org/changeset/186710

2015-07-10  Enrica Casucci  <enrica@apple.com>

        Remove incorrect overriding of inputAssistantItem in WKContentView.
        https://bugs.webkit.org/show_bug.cgi?id=146863
        rdar://problem/21507154

        Reviewed by Dan Bernstein.

        Removing implementation of inputAssistantItem and moving initialization
        of formAccessoryView to inputAccessoryView to avoid interfering with
        the keyboard handling of the assistant bar.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView inputAccessoryView]):
        (-[WKContentView inputAssistantItem]): Deleted.
        (-[WKContentView _inputAssistantItem]): Deleted.

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

        [iOS WK2] Scrolling issues on horizontally scrollable RTL pages
        https://bugs.webkit.org/show_bug.cgi?id=146872
        rdar://problem/7569416

        Reviewed by Sam Weinig.

        Horizontally scrollable RTL pages in WebKit2 had a variety of issues: they had
        a gap down the right edge, and unreachable content on the left side, focussing
        form fields scrolled to the wrong location, and programmatic scrolls scrolled
        to the wrong place.
        
        Fix by plumbing the WebCore notion of scrollOrigin through to the UI process,
        and using it in various places. There are three main aspects to the patch:
        
        1. scroll origin is included in RemoteLayerTreeTransaction, and plumbed through
           to -[WKWebView _scrollToContentOffset:] for correct programmatic scrolling,
           including zooming to focused form elements. The WKContentView's boundsOrigin
           is set to the scroll origin so that the view coordinates match document coordinates.
        2. WebPageProxy::computeCustomFixedPositionRect() uses the actual documentRect()
           rather than just conjuring up a rect with a zero origin, which makes position:fixed
           work correctly.
        3. _interactionViewsContainerView (which hosts tap highlights) is positioned to 
           coincide with the origin of the documentRect (i.e. at the scroll origin, which
           may not be top-left). This allows tap highlights to show in the correct location.
        4. ScrollView::unobscuredContentRect() is fixed to take scroll origin into account;
           if the returned rect is wrong, RenderLayer::hitTest() incorrectly clips the hit
           testing area.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::scrollOrigin):
        (WebKit::RemoteLayerTreeTransaction::setScrollOrigin):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::description): Dump some more info.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:scrollOrigin:]):
        (-[WKWebView _scrollToContentOffset:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::requestScroll):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestScroll):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::requestScroll):
        (WebKit::PageClientImpl::documentRect):
        (WebKit::PageClientImpl::contentsSize): Deleted.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLayerTree:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeCustomFixedPositionRect):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):

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

        [WK2] Diagnostic logging messages are causing too much IPC
        https://bugs.webkit.org/show_bug.cgi?id=146873
        <rdar://problem/21779205>

        Reviewed by Ryosuke Niwa.

        Diagnostic logging messages are causing too much IPC. To address the
        problem, we now do the sampling of the senders' side (WebContent
        process and Networking process) instead of the receiver's side
        (UIProcess).

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::logDiagnosticMessage):
        (WebKit::NetworkProcess::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcess::logDiagnosticMessageWithValue):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::logSampledDiagnosticMessage):
        (WebKit::NetworkProcessProxy::logSampledDiagnosticMessageWithResult):
        (WebKit::NetworkProcessProxy::logSampledDiagnosticMessageWithValue):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::logDiagnosticMessage):
        (WebKit::WebPageProxy::logDiagnosticMessageWithResult):
        (WebKit::WebPageProxy::logDiagnosticMessageWithValue):
        (WebKit::WebPageProxy::logSampledDiagnosticMessage):
        (WebKit::WebPageProxy::logSampledDiagnosticMessageWithResult):
        (WebKit::WebPageProxy::logSampledDiagnosticMessageWithValue):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue):

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

        Airplay button and placeholder are missing in inline controls
        https://bugs.webkit.org/show_bug.cgi?id=146869
        <rdar://problem/21555051>

        Reviewed by Simon Fraser.

        Fix a typo in the ENABLE that was causing the Airplay
        setting (allowsAirPlayForMediaPlayback, which becomes
        webkitWirelessVideoPlaybackDisabled) to default to false.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Change WIRELESS_TARGET_PLAYBACK
        to WIRELESS_PLAYBACK_TARGET.

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

        Use CoreAnimation fences instead of synchronous IPC to synchronize resize
        https://bugs.webkit.org/show_bug.cgi?id=146294
        <rdar://problem/21090193>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::createFenceForGeometryUpdate):
        Tiny followup; don't touch Connection if the connection isn't valid.

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

        [WK2] Increase the QoS of some of our WorkQueues to match the one of our processes
        https://bugs.webkit.org/show_bug.cgi?id=146855

        Reviewed by Anders Carlsson.

        Increase the QoS of some of our WorkQueues to match the one of our processes. For
        e.g., even though the WebContent and the Networking processes have USER_UNITIATED
        QoS, the IPC between them is using a WorkQueue with DEFAULT QoS. Similarly, the
        WorkQueue used for network cache reads has DEFAULT QoS.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::Storage):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):

2015-07-10  Zalan Bujtas  <zalan@apple.com>

        Crash at WebCore::WebPage::innerFrameQuad.
        https://bugs.webkit.org/show_bug.cgi?id=146843
        rdar://problem/21501819

        Reviewed by Andreas Kling.

        We may end up with a null rootEditableElement() after calling Document::updateLayout().

        Speculative fix. Not reproducible.

        * WebProcess/WebPage/WebPage.h: Some const cleanup.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::innerFrameQuad): null check assistedNode.rootEditableElement()
        (WebKit::constrainPoint):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::visiblePositionInFocusedNodeForPoint):
        (WebKit::WebPage::selectPositionAtPoint):
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::WebPage::updateSelectionWithExtentPoint):
        (WebKit::WebPage::getPositionInformation):

2015-07-09  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] Document picker has overlapping icons on iPad
        https://bugs.webkit.org/show_bug.cgi?id=146808
        <rdar://problem/21251875>

        Reviewed by Sam Weinig.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel documentMenu:didPickDocumentPicker:]):
        Don't show this UI as a popover on iPad; the default is a full screen
        form sheet.

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

        WebKit2 part of Track and expose policies for external URL schemes and App Links separately
        https://bugs.webkit.org/show_bug.cgi?id=146822

        Reviewed by Anders Carlsson.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
          Replaced the shouldOpenExternalURLsPolicy boolean member with a
          shouldOpenExternalURLsPolicy member whose type is ShouldOpenExternalURLsPolicy, and
          updated encoding and decoding:

        * UIProcess/API/APINavigationAction.h:
          Added shouldOpenAppLinks boolean to NavigationAction::create and the constructor. It
          augments the policy in the NavigationActionData with a valude decided in the UI process.
          Replaced shouldOpenExternalURLs() with shouldOpenExternalSchemes() and
          shouldOpenAppLinks() which check the policy and the new m_shouldOpenAppLinks boolean.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction _shouldOpenExternalSchemes]): Getter for new property, calls through
          to the NavigationAction.
        (-[WKNavigationAction _shouldOpenAppLinks]): Ditto.
        (-[WKNavigationAction _shouldOpenExternalURLs]): Now deprecated and returns the
          _shouldOpenExternalSchemes value.
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h: Declared new properties for the two
          policies and deprecated old property.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryAppLink): Changed to use NavigationAction::shouldOpenAppLinks, which
          encapsulates logic that used to be here.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage): Allow App Links (if already allowed by policy).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Moved logic from tryAppLink in
          NavigationState.mm here and pass the result to NavigationAction::create.
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction): Allow App Links (if already allowed
          by policy).
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::loadRequest): Changed the default policy to not allow App Links (but
          still allow external schemes).

        * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp:
        (WKBundleNavigationActionGetShouldTryAppLinks): Added this getter.
        * WebProcess/InjectedBundle/API/c/WKBundleNavigationActionPrivate.h:

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
          Added m_shouldTryAppLinks boolean member, initialized from the policy. Updated the
          initialization of m_shouldOpenExternalURLs to account for the new policy.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Pass the policy
          in the navigation data.

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

        Use CoreAnimation fences instead of synchronous IPC to synchronize resize
        https://bugs.webkit.org/show_bug.cgi?id=146294
        <rdar://problem/21090193>

        Reviewed by Anders Carlsson.

        Because of changes in underlying frameworks, we can no longer depend on
        blocking the UI process main thread to be sufficient to synchronize
        UI process CA commits with commits coming from the Web process.

        Instead, we have to use CoreAnimation fences to perform this synchronization.
        Instead of blocking inside waitForAndDispatchImmediately, we'll end up
        blocking during the CA commit.

        * Platform/mac/LayerHostingContext.mm:
        Use HAVE(COREANIMATION_FENCES).

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::installIncomingSyncMessageCallback):
        (IPC::Connection::uninstallIncomingSyncMessageCallback):
        Keep track of a set of incoming sync message callbacks, and fire them
        (on another queue) when a sync message arrives.

        (IPC::Connection::hasIncomingSyncMessage):
        * Platform/IPC/Connection.h:
        Add a way to check if there are any sync messages in the queue.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView forceAsyncDrawingAreaSizeUpdate:]):
        (-[WKView waitForAsyncDrawingAreaSizeUpdate]):
        These are no longer used; do nothing on 10.10+.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateGeometry):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaleViewAndUpdateGeometryFenced):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateGeometry):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        Add a MachSendRight parameter to UpdateGeometry, so that we can send along
        a fence port with the geometry update if needed.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        Apply the incoming fence so that geometry changes will be synchronized between processes.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForPossibleGeometryUpdate):
        Don't wait for DidUpdateGeometry to come in if we're using fences to achieve the same thing.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
        Create and block us on a fence and send it along with the geometry update.
        If a sync message is in the incoming message queue, don't create the fence;
        if a sync message comes in at any point after we've installed the fence (but
        before the relevant commit completes), invalidate the fence, so that we won't
        end up temorarily deadlocked waiting for the fence timeout.

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

        [GTK] Crash when spell checker returns no guesses
        https://bugs.webkit.org/show_bug.cgi?id=146805

        Reviewed by Martin Robinson.

        Properly handle ContextMenuItemTagNoGuessesFound in the switch statement.

        * UIProcess/API/gtk/WebKitContextMenuActions.cpp:
        (webkitContextMenuActionGetForContextMenuItem):

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

        [Content Extensions] Add 3 byte jump size.
        https://bugs.webkit.org/show_bug.cgi?id=146425

        Reviewed by Darin Adler.

        * UIProcess/API/APIUserContentExtensionStore.h:
        Increment CurrentContentExtensionFileVersion because of change in the bytecode.

2015-07-09  Anders Carlsson  <andersca@apple.com>

        SafariViewController loads partial webpage or entirely blank webpage
        https://bugs.webkit.org/show_bug.cgi?id=146815
        rdar://problem/21734757

        Reviewed by Dan Bernstein.

        * Platform/spi/ios/UIKitSPI.h:
        Add _hostProcessIdentifier getter.

        * UIProcess/ApplicationStateTracker.h:
        Change ApplicationStateTracker to hold on to a WKContentView instead of a UIView.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::applicationType):
        Add a helper function that returns the type of application the web view is hosted by (regular
        application, view service or extension).

        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        Register notifications and update m_isInBackground. For regular applications, just listen for UIApplication notifications.
        For view services, walk the view controller hierarchy and find the service view controller and listen for notifications and use
        BKS to find the background state of the host application. For extensions, just use BKSApplicationStateMonitor directly.

        (WebKit::isViewService): Deleted.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView willMoveToWindow:]):
        If we're moving out of a window, null out the state tracker.

        (-[WKContentView didMoveToWindow]):
        If we moved to a window, create a new state tracker.

        (-[WKContentView isBackground]):
        Handle a null application state.

        (-[WKContentView _commonInitializationWithProcessPool:configuration:]): Deleted.
        Don't create the application state here.

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

        [Cocoa] Report the first paint after committing a load as a rendering progress event
        https://bugs.webkit.org/show_bug.cgi?id=146765

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/_WKRenderingProgressEvents.h: Added _WKRenderingProgressEventFirstPaint.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]): If this is the first layer tree commit since the load
        was committed, and the delegate is observing _WKRenderingProgressEventFirstPaint, call
        NavigationState::didFirstPaint.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::didFirstPaint): Added. Calls -_webView:renderingProgressDidChange:
        with _WKRenderingProgressEventFirstPaint.

2015-07-08  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] When closing inspector window, EwkView is not released properly.
        https://bugs.webkit.org/show_bug.cgi?id=146716

        Reviewed by Gyuyoung Kim.

        It's because inspector window could not be deleted by remaining reference
        from inspector view(evas object). This patch deletes the inspector window
        after finishing the evas object smart call.

        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::destroyInspectorWindow):
        (WebKit::WebInspectorProxy::platformDidClose):

2015-07-08  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        Fix ASSERTION FAILED: !m_pendingNavigationID in WebPage::reload().
        https://bugs.webkit.org/show_bug.cgi?id=146546

        Reviewed by Darin Adler.

        We did't reset pendingNavigationID value when request url is empty.
        Hence we need to ignore ASSERT check in this case.

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

2015-07-08  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Use Ref/RefPtr instead of PassRefPtr in WebKit2 - 2
        https://bugs.webkit.org/show_bug.cgi?id=146591

        Reviewed by Darin Adler.

        Following patch in order to reduce use of PassRefPtr.

        * Shared/BlobDataFileReferenceWithSandboxExtension.h:
        * Shared/Cocoa/CompletionHandlerCallChecker.h:
        * Shared/Cocoa/CompletionHandlerCallChecker.mm:
        (WebKit::CompletionHandlerCallChecker::create):
        * Shared/Downloads/DownloadAuthenticationClient.h:
        (WebKit::DownloadAuthenticationClient::create):
        * Shared/SandboxExtension.h:
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::create):
        * Shared/ShareableResource.h:
        * Shared/mac/ObjCObjectGraph.h:
        (WebKit::ObjCObjectGraph::create):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::create):
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (getInjectedBundleInitializationUserData):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::create):
        * UIProcess/WebPreferences.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlayCreate):
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:
        (WKBundlePageBannerCreateBannerWithCALayer):
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        (WebKit::InjectedBundleDOMWindowExtension::create):
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::create):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::create):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        (WebKit::InjectedBundlePageContextMenuClient::getCustomMenuFromDefaultItems):
        (WebKit::InjectedBundlePageContextMenuClient::prepareForImmediateAction):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::InjectedBundleScriptWorld::create):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit::NetworkProcessConnection::create):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::create):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::create):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::create):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        (WebKit::NetscapePluginStream::create):
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::create):
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.h:
        (WebKit::PDFPluginAnnotation::PDFPluginAnnotationEventListener::create):
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.h:
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::create):
        * WebProcess/Plugins/PDF/PDFPluginPasswordField.h:
        * WebProcess/Plugins/PDF/PDFPluginPasswordField.mm:
        (WebKit::PDFPluginPasswordField::create):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.h:
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::create):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (WebKit::PluginProcessConnection::create):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::create):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::create):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::URLRequest::create):
        (WebKit::PluginView::Stream::create):
        (WebKit::PluginView::create):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        (WebKit::RemoteScrollingCoordinator::create):
        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::create):
        * WebProcess/Storage/StorageAreaImpl.h:
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::create):
        * WebProcess/Storage/StorageAreaMap.h:
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::create):
        * WebProcess/WebConnectionToUIProcess.h:
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::create):
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::create):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.h:
        * WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        (WebKit::WebFrameNetworkingContext::create):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
        (WebKit::WebFrameNetworkingContext::create):
        * WebProcess/WebPage/Cocoa/RemoteLayerTreeDisplayRefreshMonitor.h:
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::create):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::create):
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
        (WebKit::ThreadedCoordinatedLayerTreeHost::create):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::create):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/PageBanner.h:
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        (WebKit::WebBackForwardListProxy::create):
        * WebProcess/WebPage/WebContextMenu.h:
        (WebKit::WebContextMenu::create):
        * WebProcess/WebPage/WebDocumentLoader.h:
        (WebKit::WebDocumentLoader::create):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::create):
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::create):
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebOpenPanelResultListener.cpp:
        (WebKit::WebOpenPanelResultListener::create):
        * WebProcess/WebPage/WebOpenPanelResultListener.h:
        * WebProcess/WebPage/WebPageOverlay.cpp:
        (WebKit::WebPageOverlay::create):
        * WebProcess/WebPage/WebPageOverlay.h:
        * WebProcess/WebPage/WebUndoStep.cpp:
        (WebKit::WebUndoStep::create):
        * WebProcess/WebPage/WebUndoStep.h:
        * WebProcess/WebPage/mac/PageBannerMac.mm:
        (WebKit::PageBanner::create):
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::create):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::create):
        * WebProcess/ios/WebVideoFullscreenManager.h:
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::create):

2015-07-08  Anders Carlsson  <andersca@apple.com>

        WKSecurityOrigin.h has wrong availability info
        https://bugs.webkit.org/show_bug.cgi?id=146761
        rdar://problem/21735802

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKSecurityOrigin.h:

2015-07-08  Andreas Kling  <akling@apple.com>

        [iOS] Scrolling is laggy when the keyboard is up and a form element is focused.
        <https://webkit.org/b/146735>
        <rdar://problem/21151033>

        Reviewed by Enrica Casucci.

        Every touch on the page causes us to call elementDidFocus(), since we may need to bring
        up a keyboard if the node had previously been programmatically focused. This was causing
        little lag spikes during scrolling every time you'd put your finger to the screen.

        Have WebPage::elementDidFocus() return early if the node already has focus, and we've
        started an input session in response to non-programmatic focus already.

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

2015-07-08  Matt Rajca  <mrajca@apple.com>

        Media Session: indicate to clients whether a media session has active media elements
        https://bugs.webkit.org/show_bug.cgi?id=146742

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageHasMediaSessionWithActiveMediaElements):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::hasMediaSessionWithActiveMediaElementsDidChange):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::hasMediaSessionWithActiveMediaElementsDidChange):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::hasMediaSessionWithActiveMediaElementsDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2015-07-07  Matt Rajca  <mrajca@apple.com>

        Media Session: propagate artwork URL with metadata to UI clients
        https://bugs.webkit.org/show_bug.cgi?id=146698

        Reviewed by Tim Horton.

        * Shared/WebMediaSessionMetadata.h:
        (WebKit::WebMediaSessionMetadata::artworkURL):
        * UIProcess/API/C/WKMediaSessionMetadata.cpp:
        (WKMediaSessionMetadataCopyArtworkURL):
        * UIProcess/API/C/WKMediaSessionMetadata.h:

2015-07-08  Yongjun Zhang  <yongjun_zhang@apple.com>

        Don't allow page scroll when previewing a link or image.
        https://bugs.webkit.org/show_bug.cgi?id=146741
        rdar://problem/21733053

        Reviewed by Beth Dakin.

        Don't let preview gesture and scroll panning gesture or zooming gesture recognize at the same time.

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

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

        Snapshots can be misplaced when custom swipe views are offset from the window origin
        https://bugs.webkit.org/show_bug.cgi?id=146744
        <rdar://problem/20942120>

        Reviewed by Dean Jackson.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        Keep swipeArea in window coordinates; it was already in window coordinates
        when using custom swipe views, but not in the non-custom case.

        Convert from window coordinates to parent-of-m_swipeLayer coordinates when
        determining m_swipeLayer's frame.

2015-07-07  Andy Estes  <aestes@apple.com>

        [iOS][WK2] Ignore synthetic clicks in subframes initiated on a previous page
        https://bugs.webkit.org/show_bug.cgi?id=146712

        Reviewed by Benjamin Poulain.

        r178980 fixed an issue where, if a main frame navigation occurs in response to a touch event, a synthetic click
        event could fire on the navigated-to page. This change extends this fix to apply to subframes.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::WebFrame):
        * WebProcess/WebPage/WebFrame.h:
        (WebKit::WebFrame::firstLayerTreeTransactionIDAfterDidCommitLoad):
        (WebKit::WebFrame::setFirstLayerTreeTransactionIDAfterDidCommitLoad):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad): Stored the next layer tree transaction ID, and called cancelPotentialTapInFrame(), for the committed frame.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTap): Determined the first post-commit layer tree transaction ID from the tap target node's frame.
        (WebKit::WebPage::commitPotentialTap): Ditto.
        (WebKit::WebPage::cancelPotentialTap): Called cancelPotentialTapInFrame(), passing m_mainFrame.
        (WebKit::WebPage::cancelPotentialTapInFrame): Taught to only cancel a potential tap whose target node is a descendant of the given frame.
        (WebKit::WebPage::updateVisibleContentRects): Updated to use the main frame's first post-commit layer tree transaction ID.

2015-07-08  Brady Eidson  <beidson@apple.com>

        Move PingLoaders to the NetworkingProcess.
        <rdar://problem/18860263> and https://bugs.webkit.org/show_bug.cgi?id=146710

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::loadPing): Create a PingHandle and then return.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createPingHandle): If the Network process is enabled,
          compile the appropriate load parameters and then message to it.
          Otherwise, use the default in-process PingHandle.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2015-07-08  Beth Dakin  <bdakin@apple.com>

        Only support image previews for clients that implement commitPreviewedImageWithURL 
        delegate
        https://bugs.webkit.org/show_bug.cgi?id=146739
        -and corresponding-
        rdar://problem/21692929

        Reviewed by Tim Horton.

        We should only support image previews for clients that implement 
        commitPreviewedImageWithURL delegate since there is no default commit action.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):

2015-07-08  Anders Carlsson  <andersca@apple.com>

        Make ApplicationStateTracker be per view instead of being a singleton
        https://bugs.webkit.org/show_bug.cgi?id=146737

        Reviewed by Andreas Kling.

        * UIProcess/ApplicationStateTracker.h:
        Update to be per view instead of a singleton.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        Change to take a view + selectors.

        (WebKit::ApplicationStateTracker::~ApplicationStateTracker):
        Invalidate the state monitor and remove the listeners.

        (WebKit::ApplicationStateTracker::applicationDidEnterBackground):
        Just call the single background method.

        (WebKit::ApplicationStateTracker::applicationWillEnterForeground):
        Just call the single foreground method.

        (WebKit::ApplicationStateTracker::singleton): Deleted.
        (WebKit::ApplicationStateTracker::addListener): Deleted.
        (WebKit::ApplicationStateTracker::invokeListeners): Deleted.
        (WebKit::ApplicationStateTracker::pruneListeners): Deleted.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        Create the ApplicationStateTracker here.

        (-[WKContentView isBackground]):
        Get the ivar instead of the singleton.

2015-07-08  Beth Dakin  <bdakin@apple.com>

        InteractionInformationAtPosition bounds seem wrong on many sites, affects 
        apple.com
        https://bugs.webkit.org/show_bug.cgi?id=146736
        -and corresponding-
        rdar://problem/21655549

        Reviewed by Tim Horton.

        http://trac.webkit.org/changeset/186132/ changed the bounds for 
        InteractionInformationAtPosition. The image-related changes are good, but the 
        link-related changes feel wrong on many sites. We should revert the change for now 
        and just use the absoluteBoundingBoxRect() for non-images.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2015-07-08  Beth Dakin  <bdakin@apple.com>

        Add actions to image previews
        https://bugs.webkit.org/show_bug.cgi?id=146702
        -and corresponding-
        <rdar://problem/21642654>

        Reviewed by Sam Weinig.

        Add an array of actions and _WKActivatedElementInfo in order to properly invoke 
        the actions.
        * UIProcess/WKImagePreviewViewController.h:
        * UIProcess/WKImagePreviewViewController.mm:
        (-[WKImagePreviewViewController loadView]):
        (-[WKImagePreviewViewController initWithCGImage:defaultActions:elementInfo:]):
        (_scaleSizeWithinSize):
        (-[WKImagePreviewViewController initWithCGImage:]): Deleted.

        Re-factor defaultActionsForImageSheet into a stand-alone function so that it can 
        be invoked for previews as well as for the action sheet.
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant defaultActionsForLinkSheet]):
        (-[WKActionSheetAssistant defaultActionsForImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):

        WKImagePreviewViewController initializer now takes the default actions and 
        _WKActivatedElementInfo.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):

2015-07-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21669397> [iOS] Keyboard shortcuts that take focus away from the web view end up typing a letter into the newly focused field
        https://bugs.webkit.org/show_bug.cgi?id=146732

        Reviewed by Sam Weinig.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]): Bail out if we are no longer the first
        responder.

2015-07-07  Anders Carlsson  <andersca@apple.com>

        Always begin a background task when needed, not just when we go into the background
        https://bugs.webkit.org/show_bug.cgi?id=146704

        Reviewed by Gavin Barraclough.

        The system let background code run for the same amount of time regardless of whether the assertion was grabbed
        when the app is in the foreground or being backgrounded, so remove the background/foreground tracking code.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
        (-[WKProcessAssertionBackgroundTaskManager init]): Deleted.
        (-[WKProcessAssertionBackgroundTaskManager _applicationWillEnterForeground]): Deleted.
        (-[WKProcessAssertionBackgroundTaskManager _applicationDidEnterBackground]): Deleted.

2015-07-08  Antti Koivisto  <antti@apple.com>

        Network Cache: Don't open files in main thread
        https://bugs.webkit.org/show_bug.cgi?id=146722

        Follow-up.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::dispatchReadOperation):

            Accessing m_bodyFilter is technically not thread safe so keep it in main thread.

2015-07-08  Antti Koivisto  <antti@apple.com>

        Network Cache: Don't open files in main thread
        https://bugs.webkit.org/show_bug.cgi?id=146722

        Reviewed by Chris Dumez.

        While we use open() with O_NONBLOCK profiling indicates that we still may block up to 5ms under the syscall in some case.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::dispatchReadOperation):

            Dispatch read operation to a concurrent queue.
            With this we can also eliminate the separate dispatch() for body blob read.

2015-07-08  Sungmann Cho  <sungmann.cho@navercorp.com>

        [Unix] Remove unused local variable from Connection::sendOutgoingMessage().
        https://bugs.webkit.org/show_bug.cgi?id=146713

        Reviewed by Csaba Osztrogonác.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::sendOutgoingMessage):

2015-07-07  Tim Horton  <timothy_horton@apple.com>

        Occasional null deref in the CA callback in flushLayers()
        https://bugs.webkit.org/show_bug.cgi?id=146700
        <rdar://problem/21668754>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Make sure we keep the WebPage alive, and null-check the potentially null
        WebCore objects (Page and Frame).

2015-07-06  Matt Rajca  <mrajca@apple.com>

        Media Session: propagate metadata changes to UI clients
        https://bugs.webkit.org/show_bug.cgi?id=146660

        Reviewed by Tim Horton.

        * CMakeLists.txt: Added WebMediaSessionMetadata and WKMediaSessionMetadata.
        * Shared/API/APIObject.h: Added a media session metadata type.
        * Shared/API/c/WKBase.h:
        * Shared/WebMediaSessionMetadata.cpp: Added API adapter for WebCore::MediaSessionMetadata.
        (WebKit::WebMediaSessionMetadata::create):
        (WebKit::WebMediaSessionMetadata::WebMediaSessionMetadata):
        (WebKit::WebMediaSessionMetadata::~WebMediaSessionMetadata):
        * Shared/WebMediaSessionMetadata.h: Added API adapter for WebCore::MediaSessionMetadata.
        (WebKit::WebMediaSessionMetadata::title):
        (WebKit::WebMediaSessionMetadata::artist):
        (WebKit::WebMediaSessionMetadata::album):
        * UIProcess/API/APIUIClient.h: Added 'mediaSessionMetadataDidChange' interface.
        (API::UIClient::mediaSessionMetadataDidChange):
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKMediaSessionMetadata.cpp: Added C wrapper for WebMediaSessionMetadata.
        (WKMediaSessionMetadataGetTypeID):
        (WKMediaSessionMetadataCopyTitle):
        (WKMediaSessionMetadataCopyArtist):
        (WKMediaSessionMetadataCopyAlbum):
        * UIProcess/API/C/WKMediaSessionMetadata.h: Added C wrapper for WebMediaSessionMetadata.
        * UIProcess/API/C/WKPage.cpp: Forward 'mediaSessionMetadataDidChange' to client.
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h: Added 'mediaSessionMetadataDidChange' callback.
        * UIProcess/WebPageProxy.cpp: Forward 'mediaSessionMetadataDidChange' to UI client.
        (WebKit::WebPageProxy::mediaSessionMetadataDidChange):
        * WebKit2.xcodeproj/project.pbxproj: Added WebMediaSessionMetadata and WKMediaSessionMetadata.

2015-07-07  Brady Eidson  <beidson@apple.com>

        HTTP Auth cached after disabling private browsing/reset.
        <rdar://problem/8293055> and https://bugs.webkit.org/show_bug.cgi?id=146654

        Reviewed by Tim Horton.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::getAuthenticationInfo):

2015-07-07  Anders Carlsson  <andersca@apple.com>

        Make sure to remove the download message receiver before freeing it
        https://bugs.webkit.org/show_bug.cgi?id=146687

        Reviewed by Simon Fraser.

        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::downloadFinished):

2015-07-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed, Fix non-Mac build after r186464.

        * UIProcess/Network/CustomProtocols/soup/CustomProtocolManagerProxySoup.cpp:
        (WebKit::CustomProtocolManagerProxy::~CustomProtocolManagerProxy):

2015-07-06  Anders Carlsson  <andersca@apple.com>

        Make sure to remove message receivers before they are deallocated
        https://bugs.webkit.org/show_bug.cgi?id=146666
        rdar://problem/21331118

        Reviewed by Tim Horton.

        Add code so we can assert that there are no message receiver maps pointing to a message receiver
        when it's being destroyed. Fix all the assertions by calling removeMessageReceiver in the right places.

        * Platform/IPC/MessageReceiver.h:
        (IPC::MessageReceiver::~MessageReceiver):
        (IPC::MessageReceiver::willBeAddedToMessageReceiverMap):
        (IPC::MessageReceiver::willBeRemovedFromMessageReceiverMap):
        * Platform/IPC/MessageReceiverMap.cpp:
        (IPC::MessageReceiverMap::addMessageReceiver):
        (IPC::MessageReceiverMap::removeMessageReceiver):
        (IPC::MessageReceiverMap::invalidate):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::removeMessageReceiver):
        * Shared/ChildProcess.h:
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::removeMessageReceiver):
        * Shared/ChildProcessProxy.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController dealloc]):
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (WebKit::CustomProtocolManagerProxy::~CustomProtocolManagerProxy):
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::~WebUserContentControllerProxy):
        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::invalidate):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController dealloc]):
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::invalidate):

2015-07-06  Brent Fulgham  <bfulgham@apple.com>

        Ensure media playback is stopped during page close
        https://bugs.webkit.org/show_bug.cgi?id=146554
        <rdar://problem/18033944>

        Reviewed by Brady Eidson.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didClose): Make sure to clean up any running media sessions when
        the process is being shut down.

2015-07-06  Commit Queue  <commit-queue@webkit.org>

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

        crashes 3 webaudio tests in debug builds (Requested by
        alexchristensen on #webkit).

        Reverted changeset:

        "Ensure media playback is stopped during page close"
        https://bugs.webkit.org/show_bug.cgi?id=146554
        http://trac.webkit.org/changeset/186385

2015-07-06  Brent Fulgham  <bfulgham@apple.com>

        Ensure media playback is stopped during page close
        https://bugs.webkit.org/show_bug.cgi?id=146554
        <rdar://problem/18033944>

        Reviewed by Brady Eidson.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didClose): Make sure to clean up any running media sessions when
        the process is being shut down.

2015-07-06  Yongjun Zhang  <yongjun_zhang@apple.com>

        Allow UIDelegate to customize link actions in preview.
        https://bugs.webkit.org/show_bug.cgi?id=146567

        Add a new UIDelegate method to pass the defaultActions and elementInfo to client to allow
        the client customize the actions based on the element. Also add a new SPI runActionWithElementInfo:
        to _WKElementAction and make it aware of the WKActionSheetAssistant that creates it, so that
        the client can run the action without knowing WKActionSheetAssistant.

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Add delegate method _webView:previewViewControllerForURL:defaultActions:elementInfo:.
        * UIProcess/API/Cocoa/_WKElementAction.h: Add a SPI runActionWithElementInfo:.
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (-[_WKElementAction _initWithTitle:actionHandler:type:assistant:]): Modified initializer, also initialize _defaultActionSheetAssistant
            iVar if the caller provides that.
        (+[_WKElementAction elementActionWithTitle:actionHandler:]): Use the new initializer.
        (+[_WKElementAction _elementActionWithType:customTitle:assistant:]): A new helper method to create _WKElementAction with assistant.
        (+[_WKElementAction _elementActionWithType:assistant:]):
        (+[_WKElementAction elementActionWithType:customTitle:]):
        (-[_WKElementAction runActionWithElementInfo:]):
        * UIProcess/API/Cocoa/_WKElementActionInternal.h:
        * UIProcess/ios/WKActionSheetAssistant.h: Add a method defaultActionsForLinkSheet.
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant defaultActionsForLinkSheet]): Get default actions for current link that is activated.
        (-[WKActionSheetAssistant showLinkSheet]): Use defaultActionsForLinkSheet.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView previewViewControllerForPosition:inSourceView:]): Pass defaultActions and elementInfo to UIDelegate when querying
            for preview view controller.
        (-[WKContentView didDismissPreviewViewController:committing:]):

2015-07-06  Brady Eidson  <beidson@apple.com>

        ShouldOpenExternalURLsPolicy should default to "Allow" for WK2 API loads.
        <rdar://problem/21640050> and https://bugs.webkit.org/show_bug.cgi?id=146563

        Reviewed by Geoff Garen.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadRequest:]): Move _loadRequest:withOptions: logic back here, just without options.
        (-[WKWebView _loadRequest:withOptions:]): This SPI is now unneeded, but must remain inactive.
        * UIProcess/WebPageProxy.h:

2015-07-06  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r186357 to fix non Cocoa platforms.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):

2015-07-06  Antti Koivisto  <antti@apple.com>

        With multipart/replaced (e.g. motion JPEG), m_bufferedDataForCache grows unbounded in Networking process
        https://bugs.webkit.org/show_bug.cgi?id=146630
        <rdar://problem/21677340>

        Follow-up.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveBuffer):

            Typo 1014 -> 1024

2015-07-06  Commit Queue  <commit-queue@webkit.org>

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

        Caused by a refcounting error in GTK+; it's actually legal for
        the event to be null, just the gi annotations were wrong.
        (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "[GTK] Crash performing drag-and-drop"
        https://bugs.webkit.org/show_bug.cgi?id=146267
        http://trac.webkit.org/changeset/185896

2015-07-06  Anders Carlsson  <andersca@apple.com>

        Provide API to clear the HSTS cache
        https://bugs.webkit.org/show_bug.cgi?id=146565
        rdar://problem/20023805

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearHSTSCache):
        * Shared/WebsiteData/WebsiteDataTypes.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessTypeForDataRemoval):

2015-07-06  Antti Koivisto  <antti@apple.com>

        With multipart/replaced (e.g. motion JPEG), m_bufferedDataForCache grows unbounded in Networking process
        https://bugs.webkit.org/show_bug.cgi?id=146630
        <rdar://problem/21677340>

        Reviewed by Chris Dumez.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):

            Don't buffer multipart/x-mixed-replace. We never want to cache these.

        (WebKit::NetworkResourceLoader::didReceiveBuffer):

            Limit the maximum size of the cache buffer to 10MB. This prevents unbounded memory growth if the resource
            keeps streaming. It also prevents giant entries from pushing other data out of the cache.

        (WebKit::NetworkResourceLoader::didFinishLoading):

2015-07-06  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Guard X11-specific code in webkitWebViewBaseDidRelaunchWebProcess()
        https://bugs.webkit.org/show_bug.cgi?id=146627

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDidRelaunchWebProcess):
        Guard calls to DrawingAreaImpl::setNativeSurfaceHandleForCompositing()
        that pass in an X11 Window ID with the PLATFORM(X11) build guards.

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

        [WK2] Current page's scroll position is lost when transferring sessionState from one view to another
        https://bugs.webkit.org/show_bug.cgi?id=146625
        <rdar://problem/21585268>

        Reviewed by Gavin Barraclough.

        The current page's scroll position was lost when transferring the
        sessionState from one view to another. This is because we only update
        the current WebBackForwardListItem after navigating away.
        However, when the client swaps WebViews for navigating, we don't detect
        this as navigating away and the current WebBackForwardListItem is not
        updated with the current page's state (including the scroll position).
        This means that the information is not transferred via the sessionState
        and the scroll position (among other things) ends up being lost when
        navigating back in the new WebView.

        Retrieving the session state is a synchronous API and we want to avoid
        doing a synchronous IPC between the UIProcess and the WebProcess to
        retrieve the current page's state. Therefore, the approach chosen in
        this patch is to detect when the user is done scrolling the main frame
        (using a HystererisActivity) and then update the scroll position on the
        current HistoryItem. This way, the current WebBackForwardListItem
        normally has an up-to-date scroll position for the main frame when the
        sessionState is queried by the client.

        The solution is not perfect as we don't keep the whole page state
        up-to-date for the current WebBackForwardListItem, only the main frame
        state. However, the proposed solution is cheap, avoid synchronous IPC
        and provides a much better user experience in most cases.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::pageDidScroll):
        (WebKit::WebPage::pageStoppedScrolling):
        * WebProcess/WebPage/WebPage.h:

2015-07-05  Timothy Hatcher  <timothy@apple.com>

        Crash when closing the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=146620

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::closeWindow): Null check the connection, like it is
        in other places where it is used.

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

        Drop RefPtr::clear() method
        https://bugs.webkit.org/show_bug.cgi?id=146556

        Reviewed by Brady Eidson.

        Drop RefPtr::clear() method in favor of "= nullptr;" pattern.        

2015-07-03  Dan Bernstein  <mitz@apple.com>

        [Xcode] Update some build settings as recommended by Xcode 7
        https://bugs.webkit.org/show_bug.cgi?id=146597

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_UNREACHABLE_CODE and
        GCC_NO_COMMON_BLOCKS. Removed GCC_MODEL_TUNING.

        * WebKit2.xcodeproj/project.pbxproj: Updated LastUpgradeCheck.

2015-07-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r186025): [SOUP] NetworkCache gets blocked in traverse since r186025
        https://bugs.webkit.org/show_bug.cgi?id=146545

        Reviewed by Sergio Villar Senin.

        In r186025 the readSync method used when traversing the cache
        files was removed in favor of using parallel async reads to speed
        up the traverse. The approach used doesn't work for soup, because
        the IO operations are async, but run their callbacks in the
        current thread. The network cache now runs up to 5 async reads in
        the io work queue thread, and waits for them to finish, and those
        asycn reads never finish for the soup backend because the thread
        is blocked waiting for them. We need to use a different thread to
        run those reads.

        * NetworkProcess/cache/NetworkCacheIOChannel.h: Add
        readSyncInThread private method.
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::IOChannel::read): When not called in the
        main thread, call readSyncInThread() instead.
        (WebKit::NetworkCache::IOChannel::readSyncInThread): Run the read
        operation synchronously in a different thread, since the current
        thread might be blocked waiting for us.

2015-07-02  Przemek Piorkowski  <piorkowskiprzemyslaw@gmail.com>

        [EFL] test_ewk2_application_cache_manager has been failed since r185527
        https://bugs.webkit.org/show_bug.cgi?id=146016

        Reviewed by Gyuyoung Kim.

        In order to handle properly WebApplicationCacheManagerProxy implementation which use
        WebsiteDataRecord it is necessary to enable PUBLIC_SUFFIX_LIST for EFL.
        Implementation of PUBLIC_SUFFIX_LIST already exists for soup so EFL can use it as well.

        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        (TEST_F): enable ewk_application_cache_manager as it is passing now.

2015-07-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r186247 and r186250.
        https://bugs.webkit.org/show_bug.cgi?id=146572

        Broke the build on Mavericks bots (Requested by cdumez on
        #webkit).

        Reverted changesets:

        "Provide API to clear the HSTS cache"
        https://bugs.webkit.org/show_bug.cgi?id=146565
        http://trac.webkit.org/changeset/186247

        "Unreviewed build fix for non-COCOA ports after r186247."
        http://trac.webkit.org/changeset/186250

2015-07-02  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed build fix for non-COCOA ports after r186247.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData): Add PLATFORM(COCOA) guard.

2015-07-02  Anders Carlsson  <andersca@apple.com>

        Provide API to clear the HSTS cache
        https://bugs.webkit.org/show_bug.cgi?id=146565
        rdar://problem/20023805

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearHSTSCache):
        * Shared/WebsiteData/WebsiteDataTypes.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessTypeForDataRemoval):

2015-07-02  Mark Lam  <mark.lam@apple.com>

        Gardening: fix broken 32-bit build..
        https://bugs.webkit.org/show_bug.cgi?id=146416

        Not reviewed.

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

2015-07-02  Brent Fulgham  <bfulgham@apple.com>

        Correct *another* typo in r186238.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Fix parameter name scrolView -> scrollView.

2015-07-02  Brent Fulgham  <bfulgham@apple.com>

        Correct typo in r186238.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]):

2015-07-02  Brent Fulgham  <bfulgham@apple.com>

        Provide delegate SPI for clients to notify WebKit about content inset changes
        https://bugs.webkit.org/show_bug.cgi?id=146482
        <rdar://problem/21602741>

        Reviewed by Darin Adler.

        Provide a new SPI for WebKit client applications to use to inform WebKit of planned
        adjustments to the edge insets of the view.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Add new optional delegate method.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]): If the new delegate
        method exists, use the specified content insets, rather than the current state of the view.

2015-07-02  Beth Dakin  <bdakin@apple.com>

        Allow the UIDelegate to customize an image preview
        https://bugs.webkit.org/show_bug.cgi?id=146557
        -and corresponding-
        rdar://problem/21657424

        Reviewed by Tim Horton.

        Add imageURL to InteractionInformationAtPosition.
        * Shared/InteractionInformationAtPosition.cpp:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/InteractionInformationAtPosition.h:

        Two new delegate methods.
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        Call the delegate methods at the appropriate time.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):
        (-[WKContentView commitPreviewViewController:]):

        Include the imageURL in InteractionInformationAtPosition.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2015-07-02  Anders Carlsson  <andersca@apple.com>

        Instead of requiring ToT UIKIt, check that UI_WEB_TOUCH_EVENT_HAS_IS_POTENTIAL_TAP is defined to 1
        https://bugs.webkit.org/show_bug.cgi?id=146558

        Reviewed by Beth Dakin.

        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):

2015-07-02  Brady Eidson  <beidson@apple.com>

        Remove change I accidentally committed in r186232

        * UIProcess/WebsiteData/WebsiteDataStore.h:

2015-07-02  Alex Christensen  <achristensen@webkit.org>

        Fix EWS build after r186182.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userMediaPermissionRequestManager):
        Don't export a function defined in a header, or it will generate a weak external symbol.

2015-07-02  Brady Eidson  <beidson@apple.com>

        Add preference to disable all http-equiv.
        <rdar://problem/9091261> and https://bugs.webkit.org/show_bug.cgi?id=146553

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesDefinitions.h:
        
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMetaRefreshEnabled): Still expose this SPI, but have it affect
          the "httpEquivEnabled" setting.
        (WKPreferencesGetMetaRefreshEnabled): Ditto
        (WKPreferencesSetHTTPEquivEnabled):
        (WKPreferencesGetHTTPEquivEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-07-02  Mark Lam  <mark.lam@apple.com>

        WKWebView evaluateJavaScript:completionHandler: should reuse its JSContext instance.
        https://bugs.webkit.org/show_bug.cgi?id=146416

        Reviewed by Anders Carlsson.

        The core issue here is that we need to be able to deserialized an
        API::SerializedScriptValue instance into an ObjC object graph.  We'll solve this
        by introducing a API::SerializedScriptValue::deserialize() functions that does
        the job.  The deserialize() function will will use a SharedJSContext to provide
        the needed JSContext for doing this work.

        Also updated ScriptMessageHandlerDelegate::didPostMessage() to use this new
        deserialize() function.

        * Shared/API/APISerializedScriptValue.h:
        (API::SerializedScriptValue::deserialize):
        (API::SerializedScriptValue::internalRepresentation):
        - Changed to return a WebCore::SerializedScriptValue*.  This makes it friendlier
          to use in the 2 places that need it.

        * UIProcess/API/Cocoa/APISerializedScriptValueCocoa.mm: Added.
        (API::SharedJSContext::SharedJSContext):
        (API::SharedJSContext::ensureContext):
        (API::SharedJSContext::releaseContext):
        (API::SerializedScriptValue::deserialize):
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView evaluateJavaScript:completionHandler:]):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRunJavaScriptCallback):
        - Removed a now unnecessary cast.
        * WebKit2.xcodeproj/project.pbxproj:

2015-07-02  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21429613> [iOS] Stop making symlinks from PrivateFrameworks to Frameworks
        https://bugs.webkit.org/show_bug.cgi?id=146542

        Reviewed by Sam Weinig.

        * WebKit2.xcodeproj/project.pbxproj: Removed the build phase that makes the directory of
        symlinks.

2015-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebSQL doesn't work because openDatabase always fails with DOM Exception 18
        https://bugs.webkit.org/show_bug.cgi?id=146234

        Reviewed by Sergio Villar Senin.

        This is because we don't provide any quota, and 0 is used by
        default, so there's never enough quota and openDatabase fails. We
        should expose this in the API, but for now, we could use a default
        quota of 5MB like WTR does.

        * UIProcess/API/gtk/WebKitUIClient.cpp: Override
        exceededDatabaseQuota and return always the default quota.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::exceededDatabaseQuota): Return the quota based on the
        expected usage and current database usabe like mac does.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Add
        custom UI client to implement exceededDatabaseQuota.

2015-07-02  Commit Queue  <commit-queue@webkit.org>

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

        Didn't fix the problem (Requested by anttik on #webkit).

        Reverted changeset:

        "~4% Membuster regression after WebKit r185452"
        https://bugs.webkit.org/show_bug.cgi?id=146112
        http://trac.webkit.org/changeset/185704

2015-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Accelerated Compositing stops working after a web process crash
        https://bugs.webkit.org/show_bug.cgi?id=146508

        Reviewed by Martin Robinson.

        The problem is that we don't send the window ID again to the new
        web process.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didRelaunchProcess): Call
        webkitWebViewBaseDidRelaunchWebProcess().
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDidRelaunchWebProcess): Set the window ID to
        the new drawing area.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2015-07-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: [Mac] InspectorFrontendHost.beep() doesn't play a sound, sandbox warnings
        https://bugs.webkit.org/show_bug.cgi?id=146525

        Reviewed by Timothy Hatcher.

        * WebProcess/com.apple.WebProcess.sb.in:
        Get NSBeep working without any sandbox warnings.

2015-07-01  Anders Carlsson  <andersca@apple.com>

        Remove code to recompute rounded window corners
        https://bugs.webkit.org/show_bug.cgi?id=146534

        Reviewed by Simon Fraser.

        This code is no longer needed since we're always layer-backed now.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView displayIfNeeded]): Deleted.
        (-[WKView _cacheWindowBottomCornerRect]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:

2015-07-01  Yongjun Zhang  <yongjun_zhang@apple.com>

        Web page doesn't update its loading state when web process becomes suspended if there are pending network requests (XHR).
        https://bugs.webkit.org/show_bug.cgi?id=146439

        When web page is loading, we hold a background activity token in NavigationState and we release the token when the page done
        loading. A web page can start loading subresources (like XHR) after the page is loaded, and WebPageProxy will update its
        _networkRequestsInProgress state which will notify the client there is network actvity on-going. Since we don't hold
        the background activity token after page is loaded, the WebContent process could become suspended without notifying the client
        and the client will lose track of the loading state.

        The first thought was to hold another background activity when _networkRequestsInProgress flag is set in NavigationState.
        However, this could result in side-effect that a WebContent process can stay active for too long if there is a long lasting
        XHR resquest.
        
        This patch fix this by notifying the client that network activity is stopped when WebContent process is going to be suspended.
        We also cache the networkRequestsInProgress state for suspended process, so that when it becomes foreground, we can tell
        the client the correct state of network activity.

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_hasNetworkRequestsOnSuspended.
        (WebKit::WebPageProxy::processWillBecomeSuspended): If there is pending requests on suspend, cache the network activity state
            and notify the client.
        (WebKit::WebPageProxy::processWillBecomeForground): Restore the network activity state when the process becomes foreground. 
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h: Add a data member m_hasNetworkRequestsOnSuspended to cache the network activity state on process
            suspend.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didSetAssertionState):

2015-07-01  Dean Jackson  <dino@apple.com>

        Disable the experimental WebGL2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=146526
        <rdar://problem/21641235>

        Reviewed by Myles Maxfield.

        Add (and disable) an ENABLE_WEBGL2 flag.

        * Configurations/FeatureDefines.xcconfig:

2015-07-01  Brady Eidson  <beidson@apple.com>

        Never try to pass URLs to LaunchServices when they're the same domain as the current URL.
        <rdar://problem/20731429> and https://bugs.webkit.org/show_bug.cgi?id=146521

        Reviewed by Alex Christensen.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryAppLink): Compare the proposed URL to the current URL to see if they’re in the same domain.
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):

2015-07-01  Tim Horton  <timothy_horton@apple.com>

        WKWebView snapshots have the wrong scale after rotation
        https://bugs.webkit.org/show_bug.cgi?id=146476
        <rdar://problem/18345247>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        "Coordinate" -> "Coordinates".

        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        Defer any snapshotting that happens during a resize until after
        the resize completes. This will ensure that (in the case of an IOSurface
        snapshot) the tiles are up to date, and (in the case of a software snapshot)
        that our understanding of the scale and scroll offset of the WKContentView
        are up to date, so that we can correctly convert from view to content coordinates
        in the UI process.

        (-[WKWebView _endAnimatedResize]):
        Perform the deferred snapshotting after the resize completes.

2015-07-01  Beth Dakin  <bdakin@apple.com>

        This is a quick follow-on to http://trac.webkit.org/changeset/186132

        Rubber-stamped by Darin Adler.

        Make this a one-liner.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2015-07-01  Matthew Daiter  <mdaiter@apple.com>

        Enable MEDIA_STREAM flag
        https://bugs.webkit.org/show_bug.cgi?id=145947
        <rdar://problem/21365829>

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Add MEDIA_STREAM flag
        * WebKit2.xcodeproj/project.pbxproj: Changed some project to private
        declarations of headers
        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userMediaPermissionRequestManager):

2015-07-01  Brady Eidson  <beidson@apple.com>

        Check shouldOpenExternalURLs instead of isProcessingUserGesture before passing URL to LaunchServices.
        <rdar://problem/20577859> and https://bugs.webkit.org/show_bug.cgi?id=146513

        Reviewed by Darin Adler.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryAppLink): The expected value of isProcessingUserGesture is lost over redirects.
          shouldOpenExternalURLs actually fits this role perfectly.

2015-07-01  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] [Wayland] Build broken with ENABLE_WAYLAND_TARGET=ON
        https://bugs.webkit.org/show_bug.cgi?id=146512

        Unreviewed, fix build with ENABLE_WAYLAND_TARGET=ON after r185949.

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

2015-06-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] REGRESSION(r183936): Test /webkit2/WebKitWebContext/spell-checker fails since r183936
        https://bugs.webkit.org/show_bug.cgi?id=144828

        Reviewed by Carlos Garcia Campos.

        Instead of setting spell checking languages unconditionally when building int
        developer mode, add some C API that allows setting them in WebKitTestRunner.

        * PlatformGTK.cmake: Add the new C API file to the source list.
        * UIProcess/API/C/gtk/WKTextCheckerGtk.cpp:
        (WKTextCheckerSetSpellCheckingLanguages): Added this function which allows settings
        the spell checking languages from the C API.
        * UIProcess/API/C/gtk/WKTextCheckerGtk.h: Added.
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::enchantTextChecker): Remove the hack which sets the spell checking languages automatically
        for development builds.

2015-07-01  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Numerous CGColor leaks in swipe gestures
        https://bugs.webkit.org/show_bug.cgi?id=146501

        Reviewed by Tim Horton.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):

2015-07-01  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Confusing RetainPtr use in TiledCoreAnimationDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=146503

        Reviewed by Tim Horton.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):
        Simplify adoption into a new RetainPtr.

2015-06-30  Simon Fraser  <simon.fraser@apple.com>

        Fix CoordinatedGraphics.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):

2015-06-30  Simon Fraser  <simon.fraser@apple.com>

        More Gtk/EFL fixing.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::flushPendingLayerChanges):

2015-06-30  Andy VanWagoner  <thetalecrafter@gmail.com>

        Implement ECMAScript Internationalization API
        https://bugs.webkit.org/show_bug.cgi?id=90906

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: add ENABLE_INTL flag

2015-06-30  Simon Fraser  <simon.fraser@apple.com>

        Fix Mac and Windows builds.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2015-06-30  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Missing tiles inside position:fixed on scrolling
        https://bugs.webkit.org/show_bug.cgi?id=146485
        rdar://problem/21226861

        Reviewed by Tim Horton.

        Layer flushing adjusts the coverage rect for tiled layers, but does so at times
        when position:fixed layers are moved around by the scrolling tree. The computed
        coverage rect then doesn't reflect the layer's on-screen position, causing missing
        tiles.

        Fix by pushing the notion of being in a "stable state" onto FrameView, and passing
        that state into the layer flush. When not in a stable state, flushing doesn't change
        the visible and coverage rects for layers that are viewport-constrained.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2015-06-30  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [EFL] Implement ewk_favicon_database_clear() API.
        https://bugs.webkit.org/show_bug.cgi?id=146337

        Reviewed by Gyuyoung Kim.

        We need to provide way to clear favicon data.

        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (EwkFaviconDatabase::getIconSurfaceSynchronously):
        (EwkFaviconDatabase::clearFaviconDatabase):
        (EwkFaviconDatabase::iconDataReadyForPageURL):
        (ewk_favicon_database_icon_change_callback_del):
        (ewk_favicon_database_clear):
        * UIProcess/API/efl/ewk_favicon_database.h:
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:
        (TEST_F):

2015-06-30  Andreas Kling  <akling@apple.com>

        [iOS] Ignore viewport rect changes during zoom bouncing.
        <https://webkit.org/b/146480>

        Reviewed by Benjamin Poulain.

        When the user has pinch-zoomed past the maximum zoom scale and lets go of the screen,
        we animate a bounce back to the maximum scale.

        Suppress viewport rect updates during this bounce animation since we don't need them
        anyway. This fixes an issue where we'd sometimes get a weird rect during the animation
        and if could send that to the web process, causing it to generate tiles for a part of
        the page that's not actually exposed.

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

2015-06-30  Enrica Casucci  <enrica@apple.com>

        <rdar://problem/20655729> WebKit should heuristically exclude scrolling touch events from the user gesture category

        Reviewed by Benjamin Poulain.

        * Platform/spi/ios/UIKitSPI.h:
        * Shared/WebEvent.h:
        (WebKit::WebTouchEvent::WebTouchEvent):
        (WebKit::WebTouchEvent::position):
        (WebKit::WebTouchEvent::isPotentialTap):
        (WebKit::WebTouchEvent::isGesture):
        (WebKit::WebTouchEvent::gestureScale):
        (WebKit::WebTouchEvent::gestureRotation):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/ios/WebTouchEventIOS.cpp:
        (WebKit::WebTouchEvent::encode):
        (WebKit::WebTouchEvent::decode):
        Pipe isPotentialTap through.

2015-06-30  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [EFL] Unreviewed build fix after r186118.

        Add if PLATFORM(COCOA) back.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::nonVisibleProcessCleanupTimerFired):
        * WebProcess/WebProcess.h:

2015-06-30  Simon Fraser  <simon.fraser@apple.com>

        Crash under _layoutForNodeHighlight: when inspecting espn.com
        https://bugs.webkit.org/show_bug.cgi?id=146422

        Reviewed by Joseph Pecoraro.
        
        When inspecting espn.com, MobileSafari sometimes crashes, because
        highlight.quads is empty. I was not able to quickly determine why.

        Fix by bailing in this case.

        * UIProcess/WKInspectorHighlightView.mm:
        (-[WKInspectorHighlightView _layoutForNodeHighlight:]):

2015-06-30  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Reduce rendering frames "Other" time by instrumenting compositing
        https://bugs.webkit.org/show_bug.cgi?id=146168

        Reviewed by Brian Burg.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        Added CA transaction post-commit handlers to instrument end of composite.

2015-06-30  Beth Dakin  <bdakin@apple.com>

        The bounds on InteractionInformationAtPosition should be more precise
        https://bugs.webkit.org/show_bug.cgi?id=146468
        -and corresponding-
        rdar://problem/20739834

        Reviewed by Enrica Casucci and Simon Fraser.

        For links, get the TextQuads from the Range, and for images, look at the 
        absoluteContentQuad(). All other items can continue to use absoluteBoundingBox.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2015-06-30  Anders Carlsson  <andersca@apple.com>

        Disable Spintracer when getting the list of plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=146467
        rdar://problem/21616640

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::populatePluginCache):

2015-06-30  Anders Carlsson  <andersca@apple.com>

        Java Plugin cannot launch JavaUpdater.app after renaming
        https://bugs.webkit.org/show_bug.cgi?id=146464
        rdar://problem/19747153

        Reviewed by Tim Horton.

        Check for both "JavaUpdater.app" and "Java Updater.app".

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::isJavaUpdaterURL):

2015-06-30  Chris Dumez  <cdumez@apple.com>

        [WK2] Avoid taking a useless / blank navigation snapshot when navigating after restoring sessionState
        https://bugs.webkit.org/show_bug.cgi?id=146446
        <rdar://problem/21584231>

        Reviewed by Darin Adler.

        We currently take a useless / blank navigation snapshot when navigating
        after restoring the back / forward list from a sessionState object.
        This is because we get a current HistoryItem from the sessionState
        which we have never really navigated to. We then take a navigation
        snapshot for the current HistoryItem when navigating away as we usually
        do. However, in this case, the HistoryItem was imported and there is
        nothing to snapshot.

        Taking this snapshot is not only wasteful, it can also potentially
        overwrite the snapshot that was set by the client using
        WKWebView._saveBackForwardSnapshotForItem() SPI.

        To address the problem, this patch suppresses navigation snapshotting
        after restoring the back / forward list from a session state and until
        the next load is committed.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::recordNavigationSnapshot):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:

2015-06-29  Anders Carlsson  <andersca@apple.com>

        Get rid of unused WKSI functions
        https://bugs.webkit.org/show_bug.cgi?id=146443

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::nonVisibleProcessCleanupTimerFired):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::destroyRenderingResources):

2015-06-29  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [GTK] Unreviewed GTK build fix since r186088 and r186095.
        https://bugs.webkit.org/show_bug.cgi?id=146449

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/PageClientImpl.h:

2015-06-29  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed EFL build fix since r186088 and r186095.

        * CMakeLists.txt: Remove ConnectionStack.cpp.
        * UIProcess/CoordinatedGraphics/WebView.h: Override virtual didFailLoadForMainFrame().

2015-06-29  Brady Eidson  <beidson@apple.com>

        Flag sync XHRs from the network process so they can be handled appropriately.
        <rdar://problem/21579162> and https://bugs.webkit.org/show_bug.cgi?id=146441

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::loadingSynchronousXHR): Return isSynchronous().

2015-06-29  Anders Carlsson  <andersca@apple.com>

        Remove an empty group from the Xcode project.

        * WebKit2.xcodeproj/project.pbxproj:

2015-06-29  Anders Carlsson  <andersca@apple.com>

        Get rid of ConnectionStack
        https://bugs.webkit.org/show_bug.cgi?id=146437

        Reviewed by Andreas Kling.

        Just use a TemporaryChange and a static variable instead.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::setGlobalException):
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * Shared/ConnectionStack.cpp: Removed.
        (WebKit::ConnectionStack::singleton): Deleted.
        * Shared/ConnectionStack.h: Removed.
        (WebKit::ConnectionStack::current): Deleted.
        (WebKit::ConnectionStack::CurrentConnectionPusher::CurrentConnectionPusher): Deleted.
        (WebKit::ConnectionStack::CurrentConnectionPusher::~CurrentConnectionPusher): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2015-06-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didFailLoadForMainFrame]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didFailLoadForMainFrame):

2015-06-29  Dean Jackson  <dino@apple.com>

        Temporarily disable PICTURE_SIZES
        https://bugs.webkit.org/show_bug.cgi?id=146435
        <rdar://problem/21087013>

        Temporarily disable PICTURE_SIZES because it causes problems with out
        of date <picture> polyfills.

        Temporarily disable PICTURE_SIZES until Safari branches.

        * Configurations/FeatureDefines.xcconfig:

2015-06-29  Anders Carlsson  <andersca@apple.com>

        Don't try to access a possibly deallocated WebFrameProxy object
        https://bugs.webkit.org/show_bug.cgi?id=146428
        rdar://problem/21446364

        Reviewed by Tim Horton.

        Make sure to call isMainFrame before calling out to the client inside
        WebPageProxy::didFailLoadForFrame, matching what we do for WebPageProxy::didFinishLoadForFrame.

        Also, add a ViewGestureController::didFailLoadForMainFrame function and call that instead of
        calling didFinishLoadForMainFrame in the failure case.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didFailLoadForMainFrame]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailLoadForFrame):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::mainFrameLoadDidReachTerminalState):
        (WebKit::ViewGestureController::didFinishLoadForMainFrame): Deleted.
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didFailLoadForMainFrame):
        * UIProcess/mac/ViewGestureController.h:
        (WebKit::ViewGestureController::didFinishLoadForMainFrame):
        (WebKit::ViewGestureController::didFailLoadForMainFrame):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::mainFrameLoadDidReachTerminalState):
        (WebKit::ViewGestureController::didFinishLoadForMainFrame): Deleted.

2015-06-29  Yongjun Zhang  <yongjun_zhang@apple.com>

        Disable default gesture recognizers on preview.
        https://bugs.webkit.org/show_bug.cgi?id=146424
        rdar://problem/21572828

        We should disable default gesture recognizers on preview, to avoid activating links or
        triggering touch events accidentally. We can enable them after preview finishes.

        Reviewed by Beth Dakin.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView willPresentPreviewViewController:forPosition:inSourceView:]):
        (-[WKContentView didDismissPreviewViewController:committing:]):

2015-06-27  Ryosuke Niwa  <rniwa@webkit.org>

        Font panel doesn't get updated when bolding text via cmd+b in Mail on OS X
        https://bugs.webkit.org/show_bug.cgi?id=146379

        Reviewed by Darin Adler.

        Since font panel doesn't open in WebKit2 at the moment, just add an empty implementation of didApplyStyle

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::didApplyStyle):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.h:

2015-06-29  Dean Jackson  <dino@apple.com>

        Setting to enable/disable media controls sizing on page zoom
        https://bugs.webkit.org/show_bug.cgi?id=146423
        <rdar://problem/18379634>

        Reviewed by Eric Carlson.

        Add a new setting "MediaControlsScaleWithPageZoom" that can disable
        the behaviour we currently implement on iOS, where the media controls
        attempt to remain at a fixed size independent of page zoom.

        * Shared/WebPreferencesDefinitions.h: Initialize to false on iOS, true otherwise.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMediaControlsScaleWithPageZoom):
        (WKPreferencesGetMediaControlsScaleWithPageZoom):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-06-29  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Swipe gesture snapshot stays up for 3 seconds when swiping back after top-hit navigation
        https://bugs.webkit.org/show_bug.cgi?id=146415
        <rdar://problem/21595801>

        Reviewed by Tim Horton.

        Swipe gesture snapshot previously stayed up for 3 seconds when swiping
        back after a top-hit navigation. This is because we do not restore the
        scroll position in this case and the ViewGestureController was waiting
        for the scroll position to be restored before taking down the snapshot.

        This patch adds a fail-safe mechanism so that the WebProcess can let
        the UIProcess know (via a CouldNotRestorePageState IPC) that the page
        state (including scroll position) could not be restored so that it can
        let the ViewGestureController it should not wait for the scroll
        position to be restored.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _couldNotRestorePageState]):
        * 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::couldNotRestorePageState):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::couldNotRestorePageState):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::restorePageState):

2015-06-29  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Add WKWebView private API to save a back/forward snapshot
        https://bugs.webkit.org/show_bug.cgi?id=146398
        <rdar://problem/21584231>

        Reviewed by Dan Bernstein.

        Add WKWebView private API to save a back/forward snapshot so that the
        client can make sure a back/forward snapshot is available even when
        swapping WKWebView upon navigation.

        This matches the WKView.saveBackForwardSnapshotForItem API we have on
        Mac.

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

2015-06-29  Anders Carlsson  <andersca@apple.com>

        Use DISPATCH_SOURCE_TYPE_MEMORYPRESSURE instead of DISPATCH_SOURCE_TYPE_MEMORYSTATUS
        https://bugs.webkit.org/show_bug.cgi?id=146413

        Reviewed by Andreas Kling.

        Replace SPI with API.

        * UIProcess/ios/WebMemoryPressureHandlerIOS.mm:
        (WebKit::WebMemoryPressureHandler::WebMemoryPressureHandler):
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.

2015-06-29  Enrica Casucci  <enrica@apple.com>

        [iOS] Hardware Keyboard: All combinations of arrow keys and space key do not scroll the view.
        https://bugs.webkit.org/show_bug.cgi?id=146290
        rdar://problem/18466015

        We don't normally get called by the keyboard to handle the event if we are not
        interacting with editable content. In order to receive all the hardware keyboard events
        we need to implement _handleKeyUIEvent which is called for every key event
        when the view is first responder. This gives us the opportunity to send each keystroke
        to the WebProcess to let any Javascript handler intercept it and then perform the default
        action for the key combination.
        Unfortunately this mechanism does not provide key repeat, which is implemented in the
        keyboard layer. In order to have it at least for the arrow keys, we use the keyCommands
        mechanism only for those.

        Reviewed by Darin Adler.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollByOffset:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView keyCommands]):
        (-[WKContentView _arrowKey:]):
        (-[WKContentView _handleKeyUIEvent:]):
        (-[WKContentView handleKeyEvent:]):
        (-[WKContentView handleKeyWebEvent:]):
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):

2015-06-28  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS 8.x build after r186066.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::create):

2015-06-28  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS build after r186059.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:

2015-06-28  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: Crash at accessibilityObjectForMainFramePlugin()
        https://bugs.webkit.org/show_bug.cgi?id=146399

        Reviewed by Darin Adler.

        Could not reproduce issue, but the invalid address seems to indicate this is a nullptr access is happening when we try to get the plugin of the m_page variable when
        it has not been initialized.

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

2015-06-28  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Use Ref/RefPtr instead of PassRefPtr in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=146190

        Reviewed by Darin Adler.

        As a step to remove PassRefPtr, this patch reduces use of PassRefPtr in WebKit2.

        * Shared/API/c/WKContextMenuItem.cpp:
        (WKContextMenuItemCreateAsAction):
        (WKContextMenuItemCreateAsCheckableAction):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::create):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp:
        (WebKit::ThreadSafeCoordinatedSurface::create):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::create):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::create):
        * Shared/Plugins/NPRemoteObjectMap.h:
        * Shared/WebBatteryStatus.h:
        (WebKit::WebBatteryStatus::create):
        * Shared/WebCertificateInfo.h:
        (WebKit::WebCertificateInfo::create):
        * Shared/WebContextMenuItem.h:
        (WebKit::WebContextMenuItem::create):
        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::create):
        * Shared/WebRenderObject.h:
        (WebKit::WebRenderObject::create):
        * UIProcess/API/APINavigationData.h:
        (API::NavigationData::create):
        * UIProcess/API/APISession.cpp:
        (API::Session::createEphemeral):
        * UIProcess/API/APISession.h:
        * UIProcess/API/APISessionState.cpp:
        (API::SessionState::create):
        * UIProcess/API/APISessionState.h:
        * UIProcess/API/APIUserScript.h:
        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::createNonPersistentDataStore):
        (API::WebsiteDataStore::create):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/C/WKCredential.cpp:
        (WKCredentialCreate):
        (WKCredentialCreateWithCertificateInfo):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):
        (WKPageSetPageContextMenuClient):
        * UIProcess/API/C/WKSessionStateRef.cpp:
        (WKSessionStateCreateFromData):
        * UIProcess/API/C/WKUserScriptRef.cpp:
        (WKUserScriptCreateWithSource):
        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm:
        (-[WKNSURLAuthenticationChallengeSender useCredential:forAuthenticationChallenge:]):
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup _setAllowsSpecificHTTPSCertificate:forHost:]):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setAllowsSpecificHTTPSCertificate:forHost:]):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore nonPersistentDataStore]):
        * UIProcess/API/efl/ewk_auth_request_private.h:
        (EwkAuthRequest::create):
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (EwkBackForwardListItem::create):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::create):
        * UIProcess/API/efl/ewk_context_menu_private.h:
        (EwkContextMenu::create):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (EwkDownloadJob::create):
        * UIProcess/API/efl/ewk_file_chooser_request_private.h:
        (EwkFileChooserRequest::create):
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        (EwkFormSubmissionRequest::create):
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (EwkNavigationData::create):
        * UIProcess/API/efl/ewk_security_origin_private.h:
        (EwkSecurityOrigin::create):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (WebKit::AuthenticationChallengeProxy::create):
        * UIProcess/Authentication/AuthenticationDecisionListener.h:
        (WebKit::AuthenticationDecisionListener::create):
        * UIProcess/Authentication/WebCredential.h:
        (WebKit::WebCredential::create):
        * UIProcess/Authentication/WebProtectionSpace.h:
        (WebKit::WebProtectionSpace::create):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::HistoryClient::didNavigateWithNavigationData):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::create):
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Launcher/ProcessLauncher.h:
        (WebKit::ProcessLauncher::create):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::create):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::create):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::create):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::create):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        * UIProcess/efl/WebPopupMenuListenerEfl.h:
        (WebKit::WebPopupMenuListenerEfl::create):
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebView::create):
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::create):

2015-06-28  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove _WKSecurityOrigin.{h,mm}
        https://bugs.webkit.org/show_bug.cgi?id=146402

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKSecurityOrigin.mm: Declare and define _WKSecurityOrigin here.
        (-[WKSecurityOrigin methodSignatureForSelector:]): Moved into a WKBinaryCompatibility
        category.
        (-[WKSecurityOrigin forwardInvocation:]): Ditto.
        * UIProcess/API/Cocoa/_WKSecurityOrigin.h: Removed.
        * UIProcess/API/Cocoa/_WKSecurityOrigin.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj: Removed references to _WKSecurityOrigin.{h,mm}.

2015-06-28  Dan Bernstein  <mitz@apple.com>

        Tried to fix the EFL buid after r186046.

        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::PageUIClientEfl):

2015-06-28  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21581792> REGRESSION (r185915): Source-incompatible change in WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=146396

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPageUIClient.h: Renamed
        runJavaScript{Alert,Confirm,Prompt}_deprecatedForUseWithV0 back to runJavaScript{Alert,Confirm,Prompt}
        in client versions prior to V5.

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

        REGRESSION: Page footers are displayed above the bottom of the WebView due to tiled scaling
        https://bugs.webkit.org/show_bug.cgi?id=146393
        <rdar://problem/21113217>

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):
        Don't include the top content inset in the layout size.

2015-06-26  Antti Koivisto  <antti@apple.com>

        Make NetworkCache::traverse faster
        https://bugs.webkit.org/show_bug.cgi?id=146354

        Reviewed by Anders Carlsson.

        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        (WebKit::NetworkCache::IOChannel::path):
        (WebKit::NetworkCache::IOChannel::type):
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::open):
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::write):
        (WebKit::NetworkCache::IOChannel::readSync): Deleted.

            Not needed anymore.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::WriteOperation::WriteOperation):
        (WebKit::NetworkCache::Storage::TraverseOperation::TraverseOperation):

            Add TraverseOperation, similar to Read/Write.

        (WebKit::NetworkCache::Storage::open):
        (WebKit::NetworkCache::Storage::traverse):

            Use async I/O.
            Use condition variable to allow maximum 5 parallel file reads.

        * NetworkProcess/cache/NetworkCacheStorage.h:

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

        [SOUP] NetworkCache: Make NetworkProcess::clearDiskCache actually clear the the resources depending on the date
        https://bugs.webkit.org/show_bug.cgi?id=146316

        Reviewed by Sergio Villar Senin.

        And make sure the completion handler is called, as well. This
        functionality is already implemented in Storage::clear(), so we
        just need to pass the time point and completion handler to Cache::clear().

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::clearDiskCache):

2015-06-26  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Tim Horton.

        As Dan pointed out in https://bugs.webkit.org/show_bug.cgi?id=146350 , this way of  
        getting the screen size was problematic on multiple counts. Fixed here by using 
        UIScreen. 
        * UIProcess/WKImagePreviewViewController.mm:
        (-[WKImagePreviewViewController initWithCGImage:]):

2015-06-26  Beth Dakin  <bdakin@apple.com>

        WebPage::getPositionInformation() should not copy an image that is larger than the  
        screen
        https://bugs.webkit.org/show_bug.cgi?id=146367

        Reviewed by Tim Horton.

        Maintain aspectRatio, but scale down the buffer size if the image is larger than 
        the screen.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2015-06-26  Mark Lam  <mark.lam@apple.com>

        Re-instating the #import and assertion removed in r186014.
        https://bugs.webkit.org/show_bug.cgi?id=146358

        Not reviewed.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        - Speculative fix: should have used <wtf/MainThread.h> instead of <WTF/MainThread.h>.

2015-06-26  Mark Lam  <mark.lam@apple.com>

        Gardening: remove an assertion and a #import to green the bot.
        https://bugs.webkit.org/show_bug.cgi?id=146358

        Not reviewed.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        - Not sure why the <WTF/MainThread.h> cannot be found on some bots, but I'm
          removing it (and the assertion that needed it) for now while I investigate
          further.

2015-06-26  Mark Lam  <mark.lam@apple.com>

        ScriptMessageHandlerDelegate::didPostMessage() should reuse its JSContext instance.
        https://bugs.webkit.org/show_bug.cgi?id=146358

        Reviewed by Anders Carlsson.

        Currently, ScriptMessageHandlerDelegate::didPostMessage() creates a new JSContext each
        time it is called.  This JSContext is used only once to deserialized a JSON object
        and then destroyed.  We will change ScriptMessageHandlerDelegate to cache the JSContext
        and reuse it in all subsequent calls to didPostMessage().

        Also added a @autoreleasepool scope in didPostMessage() so that transient ObjC objects
        will be release sooner.

        * UIProcess/API/Cocoa/WKUserContentController.mm:

2015-06-26  Beth Dakin  <bdakin@apple.com>

        Add support for image previews
        https://bugs.webkit.org/show_bug.cgi?id=146350
        -and corresponding-
        rdar://problem/20640234

        Reviewed by Tim Horton.

        For images, use the actual image instead of a snapshot.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

        ViewController for image preview.
        * UIProcess/WKImagePreviewViewController.h: Added.
        * UIProcess/WKImagePreviewViewController.mm: Added.
        (-[WKImagePreviewViewController loadView]):
        (-[WKImagePreviewViewController initWithCGImage:]):
        (-[WKImagePreviewViewController viewDidLayoutSubviews]):
        (_scaleSizeWithinSize):

        New enum and member variable to keep track of preview type.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:

        Only apply the http restriction to non-image links since we can still preview the 
        image of a non-http image link.
        (-[WKContentView gestureRecognizerShouldBegin:]):

        Handle links and images.
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):

        Return early for non-link previews.
        (-[WKContentView commitPreviewViewController:]):

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

        Just use the actual image in the PositionInformation for image elements rather 
        than taking a screen shot.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation):

2015-06-26  Matt Rajca  <mrajca@apple.com>

        Wireless Playback Target-related #import should be a #include
        https://bugs.webkit.org/show_bug.cgi?id=146283

        Reviewed by Eric Carlson.

        * Shared/WebCoreArgumentCoders.cpp:

2015-06-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Support for OS X Full Screen Mode
        https://bugs.webkit.org/show_bug.cgi?id=123510

        Reviewed by Timothy Hatcher.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow):
        Allow full screen.

2015-06-25  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [EFL] Make send / receive messages to communicate the Web and UI Processes using Injected Bundle.
        https://bugs.webkit.org/show_bug.cgi?id=145685

        Reviewed by Gyuyoung Kim.

        To have extensible port specific API facility using Injected Bundle,
        we need to load libewebkit_extension_manager.so in default that is same as what gtk port does.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (EwkContext::findOrCreateWrapper):
        (bundlePathForExtension):
        (EwkContext::create):
        (EwkContext::allowSpecificHTTPSCertificateForHost):
        (EwkContext::isDefaultBundle):
        (ewk_context_default_get):
        * UIProcess/API/efl/ewk_context_private.h:
        * WebProcess/efl/ExtensionManagerEfl.cpp:
        (WebKit::ExtensionManagerEfl::initialize):

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

        [iOS WK2] Swiping back just after scrolling can cause some tiles to disappear
        https://bugs.webkit.org/show_bug.cgi?id=146329
        rdar://problem/21233010

        Reviewed by Tim Horton.
        
        When doing a back swipe, views interposed between the WKWebView and the WKContentView
        get positions and animations for the swipe. This -_updateVisibleContentRects to
        compute bad visible and unobscured rects, so we lose tiles.
        
        Fix by "freezing" the visible and unobscured content rects in the view being
        swiped for the duration of the navigation gesture. When swiping the main view,
        we just plumb through navigationGestureDidEnd(). When Reader is showing and the
        swiped view is different from the navigating view, use the new navigationGestureDidEnd()
        override which takes no arguments.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _navigationGestureDidBegin]):
        (-[WKWebView _navigationGestureDidEnd]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::navigationGestureDidEnd):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::navigationGestureDidEnd):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::navigationGestureDidBegin):
        (WebKit::PageClientImpl::navigationGestureDidEnd):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::navigationGestureDidEnd):

2015-06-25  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Web Inspector: Window dragging on toolbar should behave more like native window dragging
        https://bugs.webkit.org/show_bug.cgi?id=146324

        Reviewed by Timothy Hatcher.

        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _startWindowDrag]):
        Add a way to start a window drag from a WKView using the most
        recent mouse down event.

        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::startWindowDrag):
        Send a message that we should start a window drag.

        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::startWindowDrag):
        (WebKit::WebInspectorProxy::platformStartWindowDrag):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformStartWindowDrag):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformStartWindowDrag):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformStartWindowDrag):
        Let the platform start a window drag. Only implemented by Mac.

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

        [iOS] When using the back swipe gesture in Safari, the previous webpage will flash for a second
        https://bugs.webkit.org/show_bug.cgi?id=146326
        <rdar://problem/17811304>

        Reviewed by Dean Jackson.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::hideContentUntilPendingUpdate):
        (WebKit::DrawingAreaProxy::hideContentUntilAnyUpdate):
        (WebKit::DrawingAreaProxy::hideContentUntilNextUpdate): Deleted.
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::hideContentUntilPendingUpdate):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::hideContentUntilAnyUpdate):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy): Deleted.
        (WebKit::RemoteLayerTreeDrawingAreaProxy::hideContentUntilNextUpdate): Deleted.
        Make it possible to distinguish between hiding the content until *any* commit
        comes in (for example, when we're coming back from being suspended and don't want
        to show anything until we are sure all the layers are valid) and hiding the content
        until the currently pending commit corresponding to the current state in the UI process
        has arrived (which is what we want when e.g. hiding content after a gesture navigation
        and not showing it until the commit including the navigation lands).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _hideContentUntilNextUpdate]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _applicationWillEnterForeground]):
        Make use of "hideContentUntilAnyUpdate".

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        Make use of "hideContentUntilPendingUpdate".

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

        Viewport units are wrong when scaled in 2-up mode, cause content to hop around on apple.com/music
        https://bugs.webkit.org/show_bug.cgi?id=146322
        <rdar://problem/21413884>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):
        Inflate the fixed layout height (by the viewScale) so that it's the size of the view.

2015-06-25  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Drop WebKitNetworkCacheTemporarilyDisabledForTesting NSUserDefaults
        https://bugs.webkit.org/show_bug.cgi?id=146323
        <rdar://problem/21552370>

        Reviewed by Antti Koivisto.

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

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

        Crash in ViewGestureController::didRestoreScrollPosition() running WKWebView.LoadAlternateHTMLStringFromProvisionalLoadError test
        https://bugs.webkit.org/show_bug.cgi?id=146309
        <rdar://problem/21476651>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        Null-check. _gestureController can be null if allowsBackForwardNavigationGestures is NO.

2015-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add initial WebKitWebsiteDataManager API for process configuration options
        https://bugs.webkit.org/show_bug.cgi?id=146149

        Reviewed by Sergio Villar Senin.

        Add WebKitWebsiteDataManager to replace the different ways we have
        to configure data store
        directories. WebKitWebContext:indexed-db-directory property has
        been removed, since it was added only in trunk, and
        WebKitWebContext:local-storage-directory has been deprecated. The
        method webkit_web_context_set_disk_cache_directory() has been
        deprecated too in favor of WebKitWebsiteDataManager.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/WebKitPrivate.h: Move networkCacheSubdirectory
        definition here.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextGetProperty): Replace indexed-db-directory getter
        with website-data-manager one.
        (webkitWebContextSetProperty): Replace indexed-db-directory setter
        with website-data-manager one.
        (webkitWebContextConstructed): Use the user provided
        WebKitWebsiteDataManager to configure the context or create a
        default WebKitWebsiteDataManager if not provided.
        (webkit_web_context_class_init): Replace indexed-db-directory
        property with website-data-manager.
        (webkit_web_context_new_with_website_data_manager):
        (webkit_web_context_get_website_data_manager):
        (webkitWebContextCreatePageForWebView): Get the WebsiteDataStore
        from the WebKitWebsiteDataManager.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/WebKitWebsiteDataManager.cpp: Added.
        (webkitWebsiteDataManagerGetProperty):
        (webkitWebsiteDataManagerSetProperty):
        (webkit_website_data_manager_class_init):
        (webkitWebsiteDataManagerCreate):
        (webkitWebsiteDataManagerGetDataStore):
        (webkit_website_data_manager_new):
        (webkit_website_data_manager_get_local_storage_directory):
        (webkit_website_data_manager_get_disk_cache_directory):
        (webkit_website_data_manager_get_offline_application_cache_directory):
        (webkit_website_data_manager_get_indexeddb_directory):
        (webkit_website_data_manager_get_websql_directory):
        * UIProcess/API/gtk/WebKitWebsiteDataManager.h: Added.
        * UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Add webkit_website_data_manager_get_type.
        * UIProcess/API/gtk/webkit2.h: Include WebKitWebsiteDataManager.h.

2015-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not use legacy data store options in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=146145

        Reviewed by Gustavo Noronha Silva.

        Use a custom WebsiteDataStore in WebKitWebContext, configured with
        the context options, and passed to every page created. This is in
        preparation for exposing WebsiteDataStore in the public API.

        * PlatformGTK.cmake: Add APIWebsiteDataStore.cpp to compilation.
        * UIProcess/API/APIWebsiteDataStore.cpp:
        * UIProcess/API/gtk/APIWebsiteDataStoreGtk.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/gtk/WebKitWebContext.cpp:
        (websiteDataStoreConfigurationForWebProcessPoolConfiguration):
        Helper function to create the WebsiteDataStore configuration with
        the WebProcessPool configuration options.
        (webkitWebContextConstructed): Do not create a
        WebProcessPoolConfiguration with legacy options and create a WebsiteDataStore.
        (webkitWebContextCreatePageForWebView): Set the WebsiteDataStore
        and session ID in web page configuration.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreate): Create a WebPageConfiguration for the
        given options and pass it to webkitWebViewBaseCreateWebPage.
        (webkitWebViewBaseCreateWebPage): It receives now a
        WebPageConfiguration, instead of creating it based on the given parameters.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/WebProcessPoolGtk.cpp: Use WebsiteDataStore default configuration.
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory):

2015-06-24  Anders Carlsson  <andersca@apple.com>

        Detect view services by using the "com.apple.UIKit.vends-view-services" entitlement
        https://bugs.webkit.org/show_bug.cgi?id=146301

        Reviewed by Tim Horton.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::hasEntitlement):
        (WebKit::isViewService):

2015-06-24  Anders Carlsson  <andersca@apple.com>

        WebContent process is unreponsive/idle when WKWebView is inside a view service.
        https://bugs.webkit.org/show_bug.cgi?id=146296

        Reviewed by Tim Horton.

        * Platform/spi/ios/AssertionServicesSPI.h: Renamed from Source/WebKit2/Platform/spi/ios/BKSProcessAssertionSPI.h.
        Rename this and add SPI for BKSApplicationStateMonitor.

        * Platform/spi/ios/UIKitSPI.h:
        Add _UIApplicationIsExtension SPI.

        * UIProcess/ApplicationStateTracker.mm:
        (WebKit::isViewService):
        Return whether we're an extension or the safari view controller service.

        (WebKit::isBackgroundState):
        Helper function that returns whether a given BKSApplicationState is a background state.

        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        If we're a view service, create a BKSApplicationStateMonitor and listen for state changes for our pid.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        Update #import.

        * WebKit2.xcodeproj/project.pbxproj:
        Update for rename.

2015-06-24  Matt Rajca  <mrajca@apple.com>

        MediaSession: propagate MediaSessionMetadata to WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=146282

        Reviewed by Darin Adler and Tim Horton.

        * Shared/WebCoreArgumentCoders.cpp: Added ArgumentEncoder support for MediaSessionMetadata so we can send it
          through the web page proxy.
        (IPC::ArgumentCoder<MediaSessionMetadata>::encode):
        (IPC::ArgumentCoder<MediaSessionMetadata>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::mediaSessionMetadataDidChange):
        * UIProcess/WebPageProxy.h: Receive mediaSessionMetadataDidChange in the web page proxy.
        * UIProcess/WebPageProxy.messages.in: Added a new MediaSessionMetadataDidChange message.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mediaSessionMetadataDidChange): Push a mediaSessionMetadataDidChange message through the web page proxy.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2015-06-24  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [Mac] A checkmark is briefly visible next to the webpage context menu items when they're clicked
        https://bugs.webkit.org/show_bug.cgi?id=146284
        <rdar://problem/20297182>

        Reviewed by Darin Adler.
        
        The default value of [NSPopUpButtonCell altersStateOfSelectedItem] is YES.
        This makes the popup menu items checkable by default. We need to change the
        value of this attribute to NO when creating the popup menu, so the items
        are uncheckable. The value of this property needs to change back to YES
        if context menu is about selecting an option and not executing a command.
        
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::populate):

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

        Update JavaScript dialog delegates to include a WKSecurityOriginRef argument.
        <rdar://problem/21269187> and https://bugs.webkit.org/show_bug.cgi?id=146249

        Reviewed by Alex Christensen.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient): Call the new signature if the client has it set.
          Otherwise fall back to the old signature.
        * UIProcess/API/C/WKPageUIClient.h: Deprecate the old method signature, and add the new
          one to the newest V5 client structure.

2015-06-24  Ryuan Choi  <ryuan.choi@navercorp.com>

        Remove some dead code from Download
        https://bugs.webkit.org/show_bug.cgi?id=146268

        Reviewed by Darin Adler.

        retrieveDestinationWithSuggestedFilename() was introduced for DownloadCFNetWin.cpp since r77585.
        didDecideDestination and others are also introduced for WebKit2 Windows port since r77055.
        Since WebKit2 Windows port is dropped, no one uses them now.

        * Shared/Downloads/Download.cpp:
        (WebKit::Download::decideDestinationWithSuggestedFilename):
        (WebKit::Download::retrieveDestinationWithSuggestedFilename): Deleted.
        * Shared/Downloads/Download.h:
        (WebKit::Download::destination): Deleted.
        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::didDecideDestination): Deleted.
        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::didDecideDestination): Deleted.
        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::didDecideDestination): Deleted.

2015-06-23  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager init]):

2015-06-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Crash performing drag-and-drop
        https://bugs.webkit.org/show_bug.cgi?id=146267

        Reviewed by Darin Adler.

        Return early if gtk_get_current_event() returns null to avoid a crash. Note that this does
        not fix drag-and-drop. Note also this prevents the web process from forcing the UI process
        to crash by sending fake startDrag messages.

        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::startDrag):

2015-06-23  Anders Carlsson  <andersca@apple.com>

        Add a class that tracks whether we're a background or foreground application
        https://bugs.webkit.org/show_bug.cgi?id=146259
        rdar://problem/19833808

        Reviewed by Darin Adler.

        First step towards being able to send out these notifications for view services.

        * UIProcess/ApplicationStateTracker.h: Added.
        (WebKit::ApplicationStateTracker::isInBackground):
        * UIProcess/ApplicationStateTracker.mm: Added.
        (WebKit::ApplicationStateTracker::singleton):
        (WebKit::ApplicationStateTracker::ApplicationStateTracker):
        (WebKit::ApplicationStateTracker::addListener):
        (WebKit::ApplicationStateTracker::applicationDidEnterBackground):
        (WebKit::ApplicationStateTracker::applicationWillEnterForeground):
        (WebKit::ApplicationStateTracker::invokeListeners):
        (WebKit::ApplicationStateTracker::pruneListeners):
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager init]):
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
        (-[WKProcessAssertionBackgroundTaskManager _applicationWillEnterForeground]):
        (-[WKProcessAssertionBackgroundTaskManager _applicationDidEnterBackground]):
        (-[WKProcessAssertionBackgroundTaskManager dealloc]): Deleted.
        (-[WKProcessAssertionBackgroundTaskManager _applicationWillEnterForeground:]): Deleted.
        (-[WKProcessAssertionBackgroundTaskManager _applicationDidEnterBackground:]): Deleted.
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        (-[WKContentView isBackground]):
        (-[WKContentView _applicationDidEnterBackground]):
        (-[WKContentView _applicationWillEnterForeground]):
        (-[WKContentView _applicationDidEnterBackground:]): Deleted.
        (-[WKContentView _applicationWillEnterForeground:]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2015-06-23  Anders Carlsson  <andersca@apple.com>

        Remove windowResizerRect code, nobody is using it anymore
        https://bugs.webkit.org/show_bug.cgi?id=146265

        Reviewed by Beth Dakin.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowResizerRect): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowResizerRect): Deleted.
        * WebProcess/WebPage/WebPage.h:

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

        Restore binary compatibility with iOS 8 Safari after r185877
        https://bugs.webkit.org/show_bug.cgi?id=146263

        Reviewed by Anders Carlsson.

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

        * UIProcess/API/Cocoa/WKSecurityOrigin.mm:
        (-[WKSecurityOrigin methodSignatureForSelector:]): Override to check _WKSecurityOrigin for
        possible category methods with the specified selector.
        (-[WKSecurityOrigin forwardInvocation:]): Invoke using the implementation of the
        _WKSecurityOrigin category method.

        * WebKit2.xcodeproj/project.pbxproj:

2015-06-23  Anders Carlsson  <andersca@apple.com>

        Add operator! and copy/move constructors to WeakObjCPtr
        https://bugs.webkit.org/show_bug.cgi?id=146255

        Reviewed by Andreas Kling.

        * Shared/mac/WeakObjCPtr.h:
        (WebKit::WeakObjCPtr::WeakObjCPtr):
        (WebKit::WeakObjCPtr::operator!):

2015-06-23  Antti Koivisto  <antti@apple.com>

        CrashTracer: com.apple.WebKit.Networking at JavaScriptCore: WTF::String::isolatedCopy const &
        https://bugs.webkit.org/show_bug.cgi?id=146236
        rdar://problem/21380700

        Reviewed by Andreas Kling.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::clear):

            Don't crash if this is called with network cache disabled.

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

        Expose some more rendering progress events, and have MiniBrowser log for each of them
        https://bugs.webkit.org/show_bug.cgi?id=146227

        Reviewed by Darin Adler.

        Add _WKRenderingProgressEventFirstLayoutAfterSuppressedIncrementalRendering and 
        _WKRenderingProgressEventFirstPaintAfterSuppressedIncrementalRendering to the private
        header, and convert them to/from WebCore milestones.

        * Shared/API/Cocoa/_WKRenderingProgressEvents.h:
        * Shared/API/Cocoa/_WKRenderingProgressEventsInternal.h:
        (renderingProgressEvents):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (layoutMilestones):

2015-06-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r185876 and r185877.

        * UIProcess/API/gtk/WebKitUIClient.cpp:
        * UIProcess/API/gtk/WebKitUserContentManager.cpp:
        * UIProcess/API/gtk/WebKitWebView.cpp:

2015-06-23  Anders Carlsson  <andersca@apple.com>

        Get rid of the window resizer size
        https://bugs.webkit.org/show_bug.cgi?id=146240

        Reviewed by Darin Adler.

        This code was only used by older versions of GTK+, so get rid of it.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseNotifyResizerSize): Deleted.
        (toplevelWindowResizeGripVisibilityChanged): Deleted.
        (webkitWebViewBaseSetToplevelOnScreenWindow): Deleted.
        (resizeWebKitWebViewBaseFromAllocation): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setWindowResizerSize): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowResizerRect):
        (WebKit::WebPage::setWindowResizerSize): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-06-23  Brady Eidson  <beidson@apple.com>

        WKFrameInfo should have an accessor for the Frame's current security origin.
        https://bugs.webkit.org/show_bug.cgi?id=146162

        Reviewed by Dan Bernstein.

        This patch:
        - Promotes _WKSecurityOrigin to API.
        - Makes the WKSecurityOrigin Cocoa API object work with API::SecurityOrigin.
        - Adds a WKSecurityOrigin accessor to WKFrameInfo.
        - Changes IPC messaging so every handler that calls out with a WKFrameInfo object
          gets a relevant SecurityOrigin to wrap.

        * Shared/API/APISecurityOrigin.h:
        (API::SecurityOrigin::create):
        (API::SecurityOrigin::SecurityOrigin):

        * Shared/API/Cocoa/WebKit.h:

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toCopiedAPI):

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):

        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::fromFrame):
        * Shared/SecurityOriginData.h:

        * UIProcess/API/APIFrameInfo.cpp:
        (API::FrameInfo::FrameInfo):
        * UIProcess/API/APIFrameInfo.h:

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didFailProvisionalLoadInSubframeWithError):

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::createNewPage):
        (API::UIClient::runJavaScriptAlert):
        (API::UIClient::runJavaScriptConfirm):
        (API::UIClient::runJavaScriptPrompt):

        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetApplicationCacheOrigins):

        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):

        * UIProcess/API/C/WKOriginDataManager.cpp:
        (WKOriginDataManagerGetOrigins):

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        (WKPageSetPageNavigationClient):

        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetCacheOrigins):

        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKFrameInfo.mm:
        (-[WKFrameInfo securityOrigin]):

        * UIProcess/API/Cocoa/WKSecurityOrigin.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKSecurityOrigin.h.
        * UIProcess/API/Cocoa/WKSecurityOrigin.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKSecurityOrigin.mm.
        (-[WKSecurityOrigin dealloc]):
        (-[WKSecurityOrigin description]):
        (-[WKSecurityOrigin protocol]):
        (-[WKSecurityOrigin host]):
        (-[WKSecurityOrigin port]):
        (-[WKSecurityOrigin _apiObject]):
        * UIProcess/API/Cocoa/WKSecurityOriginInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/_WKSecurityOriginInternal.h.
        (API::wrapper):

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

        * UIProcess/API/Cocoa/WKUserContentController.mm:

        * UIProcess/API/Cocoa/_WKSecurityOrigin.h:
        * UIProcess/API/Cocoa/_WKSecurityOrigin.mm:
        (-[_WKSecurityOrigin _initWithSecurityOrigin:]): Deleted.
        (-[_WKSecurityOrigin protocol]): Deleted.
        (-[_WKSecurityOrigin host]): Deleted.
        (-[_WKSecurityOrigin port]): Deleted.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::didFailProvisionalLoadInSubframeWithError):

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert):
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm):
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt):
        (WebKit::UIDelegate::UIClient::exceededDatabaseQuota):
        (WebKit::UIDelegate::UIClient::reachedApplicationCacheOriginQuota):

        * UIProcess/UserContent/WebScriptMessageHandler.h:

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::didPostMessage):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.messages.in:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseSync):
        (WebKit::WebPageProxy::createNewPage):
        (WebKit::WebPageProxy::runJavaScriptAlert):
        (WebKit::WebPageProxy::runJavaScriptConfirm):
        (WebKit::WebPageProxy::runJavaScriptPrompt):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserMessageHandlerDescriptorProxy::didPostMessage):

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

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

        <rdar://problem/21342465> Make -[WKWebView _certificateChain] public.
        https://bugs.webkit.org/show_bug.cgi?id=145886

        Reviewed by Sam Weinig.

        * Shared/WebCertificateInfo.h:
        (WebKit::WebCertificateInfo::create): Changed to return a Ref rather than a PassRefPtr.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm: Added no-op overrides of new
        PageLoadState::Observer functions to PageLoadStateObserver.

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup _setAllowsSpecificHTTPSCertificate:forHost:]): Updated for change to
        WebCertificateInfo::create.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setAllowsSpecificHTTPSCertificate:forHost:]): Ditto.

        * UIProcess/API/Cocoa/WKWebView.h: Declared new certificateChain property on WKWebView.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView certificateChain]): Added. Returns the certificate chain from the page load
        state, or an empty array if there is no certificate chain.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Deprecated _certificateChain.

        * UIProcess/Cocoa/NavigationState.h: Declared overrides of new PageLoadState::Observer
        functions.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::willChangeCertificateInfo): Override to call
        -willChangeValueForKey:.
        (WebKit::NavigationState::didChangeCertificateInfo): Override to call
        -didChangeValueForKey:.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::commitChanges): Call the new observer functions
        willChangeCertificateInfo and didChangeCertificateInfo.
        (WebKit::PageLoadState::didCommitLoad): Added new certificateInfo parameter, which is stored
        in the uncommitted state.
        * UIProcess/PageLoadState.h:
        (WebKit::PageLoadState::certificateInfo): Added this getter.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didCommitLoad): Changed the parameter type from
        WebCore::CertificateInfo to WebCertificateInfo.
        * UIProcess/WebFrameProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame): Pass the certificate info to
        PageLoadState::didCommitLoad.

2015-06-22  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][CustomProtocol] Do not add duplicated custom scheme
        https://bugs.webkit.org/show_bug.cgi?id=146199

        Reviewed by Carlos Garcia Campos.

        WebSoupCustomProtocolRequestManager::registerSchemeForCustomProtocol generates
        a crash when duplicated scheme is registered on debug mode, or just registers it on release mode.
        However application can register duplicate scheme by mistake or on purpose. Thus it would be good
        if we don't register it instead of registering it or generating a crash when trying to regiseter
        duplicated scheme.

        EFL port want to allow user to change registered callback, thus EWK2ContextTest::ewk_context_url_scheme_register()
        is modified to test it.

        Test: ewk_context_url_scheme_register() in test_ewk2_context.cpp.

        * UIProcess/API/efl/ewk_context.h: Added a comment to replace registered callback.
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (EWK2ContextTest::schemeRequestCallback1):
        (EWK2ContextTest::schemeRequestCallback2):
        (TEST_F):
        (EWK2ContextTest::schemeRequestCallback): Deleted.
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp:
        (WebKit::WebSoupCustomProtocolRequestManager::registerSchemeForCustomProtocol):

2015-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.9.3 release.

        * gtk/NEWS: Add release notes for 2.9.3.

2015-06-22  Dan Bernstein  <mitz@apple.com>

        Part 2 of [Xcode] Fold the WebKit2SandboxProfiles-IOSOverride target into the Sandbox Profiles target
        https://bugs.webkit.org/show_bug.cgi?id=146197

        Rubber-stamped by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Deleted the WebKit2SandboxProfiles-IOSOverride target.

2015-06-22  Dean Jackson  <dino@apple.com>

        Rename PlatformCA*Mac to PlatformCA*Cocoa
        https://bugs.webkit.org/show_bug.cgi?id=146224
        <rdar://problem/21497182>

        Reviewed by Simon Fraser.

        Rename PlatformCALayerMac and related files in platform/graphics/ca/mac
        to the more accurate Cocoa suffix.

        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::filtersCanBeComposited):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::create):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):

2015-06-22  Anders Carlsson  <andersca@apple.com>

        Simplify Connection::SyncMessageState
        https://bugs.webkit.org/show_bug.cgi?id=146213

        Reviewed by Andreas Kling.

        Since we no longer support Connections dispatching to multiple threads, we can make SyncMessageState
        into a singleton and get rid of the RunLoop -> SyncMessageState hash map.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::singleton):
        (IPC::Connection::SyncMessageState::SyncMessageState):
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::SyncMessageState::dispatchMessages):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingSyncReply):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::SyncMessageState::syncMessageStateMap): Deleted.
        (IPC::Connection::SyncMessageState::syncMessageStateMapMutex): Deleted.
        (IPC::Connection::SyncMessageState::getOrCreate): Deleted.
        (IPC::Connection::SyncMessageState::~SyncMessageState): Deleted.
        (IPC::Connection::Connection): Deleted.
        * Platform/IPC/Connection.h:

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

        [Content Extensions] Add SPI to reload without content blocking.
        https://bugs.webkit.org/show_bug.cgi?id=146128
        rdar://problem/20351903

        Reviewed by Sam Weinig.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetCustomUserAgent):
        (WKPageSetUserContentExtensionsEnabled):
        (WKPageSupportsTextEncoding):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _customUserAgent]):
        (-[WKWebView _setUserContentExtensionsEnabled:]):
        (-[WKWebView _userContentExtensionsEnabled]):
        (-[WKWebView _setCustomUserAgent:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setShouldScaleViewToFitDocument):
        (WebKit::WebPageProxy::setUserContentExtensionsEnabled):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::userContentExtensionsEnabled):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::setShouldScaleViewToFitDocument):
        (WebKit::WebPage::setUserContentExtensionsEnabled):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Pass a boolean from the API to WebCore.

2015-06-22  Anders Carlsson  <andersca@apple.com>

        Remove m_clientRunLoop from IPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=146212

        Reviewed by Sam Weinig.

        We only ever create connections whose messages are dispatched to the main run loop, so we can 
        vastly simplify the code by only allowing messages to be dispatched there.

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::DatabaseToWebProcessConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::createServerConnection):
        (IPC::Connection::createClientConnection):
        (IPC::Connection::Connection):
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::removeWorkQueueMessageReceiver):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::dispatchDidReceiveInvalidMessage):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::wakeUpRunLoop):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::receiveSourceEventHandler):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::WebProcessConnection):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::initialize):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::WebToDatabaseProcessConnection):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::createInspectorPage):
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::establishConnection):

2015-06-22  Anders Carlsson  <andersca@apple.com>

        Crashes in hit testing under WebPage::acceptsFirstMouse() while handling sync message in plug-in teardown
        https://bugs.webkit.org/show_bug.cgi?id=146211
        rdar://problem/17180615

        Reviewed by Sam Weinig.

        If we're inside a sendSync message when we're being called, just bail.

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

2015-06-22  Dan Bernstein  <mitz@apple.com>

        Part 1 of [Xcode] Fold the WebKit2SandboxProfiles-IOSOverride target into the Sandbox Profiles target
        https://bugs.webkit.org/show_bug.cgi?id=146197

        Reviewed by Anders Carlsson.

        * Configurations/SandboxProfiles.xcconfig: Added. Defines INSTALL_PATH based on the value
        of WK_INSTALL_OVERRIDE_SANDBOX_PROFILES.
        * WebKit2.xcodeproj/project.pbxproj: Use SandboxProfiles.xcconfig for the Sandbox Profiles
        target, and change the destination path in its Copy Files build phase to INSTALL_PATH.

2015-06-22  Antti Koivisto  <antti@apple.com>

        Crash replacing TabDocument in MobileSafari at WebKit: -[WKWebView(WKPrivate) _beginAnimatedResizeWithUpdates:]
        https://bugs.webkit.org/show_bug.cgi?id=146201

        Reviewed by Dan Bernstein.

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

        No repro but if for some reason [_contentView bounds] width is zero we'll compute +Inf targetScale
        and then NaN contentOffset.x. Verified in lldb that this gives the exact crash signature seen.

        Fix by checking that [_contentView bounds] is not empty like is done with other inputs.

2015-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r182303): [GTK] Context menu API is broken since r182303
        https://bugs.webkit.org/show_bug.cgi?id=146202

        Reviewed by Žan Doberšek.

        The problem is that ContextMenuclient API changed in r182303, but
        we didn't notice it either, and the default handler for
        getContextMenuFromProposedMenu was executed. An override keyword
        would have caught this.

        * UIProcess/API/gtk/WebKitContextMenuClient.cpp: Build a Vector of
        WebContextMenuItemData as expected by our API, and add add
        override keyword to ensure this doesn't happen again.

2015-06-22  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] ConnectionUnix should use FastMalloc to allocate on-heap resources
        https://bugs.webkit.org/show_bug.cgi?id=146143

        Reviewed by Carlos Garcia Campos.

        IPC handling in Unix-specific IPC::Connection implementation should use
        FastMalloc to allocate on-heap resources, instead of allocating via the
        system allocator.

        The AttachmentInfo class is marked as allocatable through FastMalloc.
        That way it can be allocated through FastMalloc while still handled
        through std::unique_ptr<>.

        The char[] arrays in readBytesFromSocket() and Connection::sendOutgoingMessage()
        are now handled through a MallocPtr<> object.

        In Connection::sendOutgoingMessage(), both the AttachmentInfo[] and char[]
        arrays are now only allocated if there are actual attachments contained
        in the message. The code that's conditioned with a non-empty attachments
        Vector is now also grouped together, in a single branch.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::readBytesFromSocket):
        (IPC::Connection::sendOutgoingMessage):

2015-06-22  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] test_ewk2_application_cache_manager has been failed since r185527
        https://bugs.webkit.org/show_bug.cgi?id=146016

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        (TEST_F): Disable this test for now. This test will be enabled again.

2015-06-16  Gavin Barraclough  <barraclough@apple.com>

        Page load performance regression due to bugs.webkit.org/show_bug.cgi?id=145542
        https://bugs.webkit.org/show_bug.cgi?id=146198

        Unreviewed rollout.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_prefetch_dns):

2015-06-21  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        WKApplicationCacheManagerDeleteEntriesForOrigin() has wrong WebsiteDataTypes.
        https://bugs.webkit.org/show_bug.cgi?id=146180

        Reviewed by Sam Weinig.

        Modify to use correct WebsiteDataTypes in WKApplicationCacheManagerDeleteEntriesForOrigin()

        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerDeleteEntriesForOrigin):

2015-06-21  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21444762> REGRESSION (r184215): Plug-in services crash on launch on Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=146195

        Reviewed by Sam Weinig.

        * Configurations/PluginService.32.xcconfig: Changed the Yosemite definition of
        INFOPLIST_FILE such that it would also apply to the macosx10.10.internal SDK.
        * Configurations/PluginService.64.xcconfig: Ditto.

2015-06-21  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * Shared/API/Cocoa/WKFoundation.h: Don’t use generics if the SDK doesn’t support them.

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

        [SOUP] Use GTask in WebKitSoupRequestInputStream
        https://bugs.webkit.org/show_bug.cgi?id=146184

        Reviewed by Carlos Garcia Campos.

        Replace deprecated use of GSimpleAsyncResult with GTask.

        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (AsyncReadData::AsyncReadData):
        (webkitSoupRequestInputStreamReadAsyncResultComplete):
        (webkitSoupRequestInputStreamPendingReadAsyncComplete):
        (webkitSoupRequestInputStreamReadAsync):
        (webkitSoupRequestInputStreamReadFinish):

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

        Fix format strings in NetworkCache.cpp and NetworkCacheStatistics.cpp and WebIDBServerConnection.cpp
        https://bugs.webkit.org/show_bug.cgi?id=146172

        Reviewed by Darin Adler.

        Use the correct %"PRIu64" and %"PRIi64" for uint64_t and int64_t, instead of %llu and %lli.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::initialize):
        (WebKit::NetworkCache::Statistics::recordNotUsingCacheForRequest):
        (WebKit::NetworkCache::Statistics::recordRetrievalFailure):
        (WebKit::NetworkCache::Statistics::recordRetrievedCachedEntry):
        (WebKit::NetworkCache::Statistics::recordRevalidationSuccess):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        (WebKit::WebIDBServerConnection::deleteDatabase):
        (WebKit::WebIDBServerConnection::didDeleteDatabase):
        (WebKit::WebIDBServerConnection::getOrEstablishIDBDatabaseMetadata):
        (WebKit::WebIDBServerConnection::didGetOrEstablishIDBDatabaseMetadata):
        (WebKit::WebIDBServerConnection::openTransaction):
        (WebKit::WebIDBServerConnection::didOpenTransaction):
        (WebKit::WebIDBServerConnection::beginTransaction):
        (WebKit::WebIDBServerConnection::didBeginTransaction):
        (WebKit::WebIDBServerConnection::commitTransaction):
        (WebKit::WebIDBServerConnection::didCommitTransaction):
        (WebKit::WebIDBServerConnection::resetTransaction):
        (WebKit::WebIDBServerConnection::didResetTransaction):
        (WebKit::WebIDBServerConnection::rollbackTransaction):
        (WebKit::WebIDBServerConnection::didRollbackTransaction):
        (WebKit::WebIDBServerConnection::createObjectStore):
        (WebKit::WebIDBServerConnection::didCreateObjectStore):
        (WebKit::WebIDBServerConnection::createIndex):
        (WebKit::WebIDBServerConnection::didCreateIndex):
        (WebKit::WebIDBServerConnection::deleteIndex):
        (WebKit::WebIDBServerConnection::didDeleteIndex):
        (WebKit::WebIDBServerConnection::get):
        (WebKit::WebIDBServerConnection::put):
        (WebKit::WebIDBServerConnection::didPutRecord):
        (WebKit::WebIDBServerConnection::didGetRecord):
        (WebKit::WebIDBServerConnection::didOpenCursor):
        (WebKit::WebIDBServerConnection::didAdvanceCursor):
        (WebKit::WebIDBServerConnection::didIterateCursor):
        (WebKit::WebIDBServerConnection::count):
        (WebKit::WebIDBServerConnection::didCount):
        (WebKit::WebIDBServerConnection::deleteRange):
        (WebKit::WebIDBServerConnection::didDeleteRange):
        (WebKit::WebIDBServerConnection::clearObjectStore):
        (WebKit::WebIDBServerConnection::didClearObjectStore):
        (WebKit::WebIDBServerConnection::deleteObjectStore):
        (WebKit::WebIDBServerConnection::didDeleteObjectStore):
        (WebKit::WebIDBServerConnection::changeDatabaseVersion):
        (WebKit::WebIDBServerConnection::didChangeDatabaseVersion):
        (WebKit::WebIDBServerConnection::openCursor):
        (WebKit::WebIDBServerConnection::cursorAdvance):
        (WebKit::WebIDBServerConnection::cursorIterate):

2015-06-20  Tim Horton  <timothy_horton@apple.com>

        Deselection of text causes a noticeable jump on force touch machines
        https://bugs.webkit.org/show_bug.cgi?id=146173
        <rdar://problem/20992842>

        Reviewed by Sam Weinig.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        Encode/decode wantsMargin.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):
        (WebKit::textIndicatorTransitionForImmediateAction): Deleted.
        Get rid of TextIndicatorPresentationTransition::Crossfade.

2015-06-20  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Actually use Objective-C lightweight generics when the compiler supports them
        https://bugs.webkit.org/show_bug.cgi?id=146183

        Reviewed by Sam Weinig.

        * Shared/API/Cocoa/WKFoundation.h: When the compiler supports Objective-C generics, define
        WK_ARRAY and WK_SET to use them. Also added a definition of WK_DICTIONARY.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Use WK_DICTIONARY for the options dictionary of
        -_loadRequest:withOptions:.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]): Made the completion
        halder type match the declaration, now that NSArray and WK_ARRAY(WKWebsiteDataRecord *) are
        not the same.

        * mac/postprocess-framework-headers.sh: Also rewrite WK_DICTIONARY.

2015-06-20  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Avoid synchronous IPC on view state change when the content is not visible
        https://bugs.webkit.org/show_bug.cgi?id=146179
        <rdar://problem/20923432>

        Reviewed by Tim Horton.

        After r170787, viewStateChange() would cause a synchronous IPC between
        the UIProcess and the WebProcess when the view becomes visible. This
        was to avoid painting empty / black tiles when unsuspending the
        WebProcess on tab switch, in the event volatile IOSurfaces were purged.

        However, this sync IPC can have performance implications and is not
        needed when the content is not actually visible yet (e.g.
        hideContentUntilNextUpdate() was called, or the tab was killed).

        This patch avoids the synchronous IPC when the content is hidden and
        exposes a private API on WKWebView so that clients can ask for the
        content to be hidden until the next update. This would allow for
        clients to avoid the synchronous IPC if they don't need the content
        to be displayed synchronously (e.g. the view is obscured).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _hideContentUntilNextUpdate]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::hasVisibleContent):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchViewStateChange):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::isContentHidden):

2015-06-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Check for SHA1 certificates ignores subresources
        https://bugs.webkit.org/show_bug.cgi?id=146159

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame): Call
        PageLoadState::didDisplayOrRunInsecureContent if a certificate chain contains a non-root
        SHA1 certificate when the frame is not the main frame.

2015-06-20  Dan Bernstein  <mitz@apple.com>

        Added availability information to a recently-added delegate method.

        Suggested by Alexey Proskuryakov and Anders Carlsson.

        * UIProcess/API/Cocoa/WKUIDelegate.h: Annotated -webViewDidClose:.

2015-06-20  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Do not consider test directories when DEVELOPER_MODE is OFF
        https://bugs.webkit.org/show_bug.cgi?id=146171

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake:
        Do not define SOURCE_DIR when DEVELOPER_MODE is OFF for seccomp filter
        not to allow jhbuild directory.
        * Shared/efl/ProcessExecutablePathEfl.cpp:
        (WebKit::findProcessPath): Guard test code to ENABLE(DEVELOPER_MODE).

2015-06-18  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r185475): [Mac] ASSERT() when clicking on text using web fonts with force touch trackpad
        https://bugs.webkit.org/show_bug.cgi?id=145890
        <rdar://problem/21390877>

        Reviewed by Darin Adler and Tim Horton.

        The best place to stop the serialization of unserializable fonts is inside WebKit2's IPC code. We want
        this logic to occur when encoding an NSAttributedString, rather than when encoding an NSDictionary,
        because changing the shape of an NSAttributedString is less likely to result in problems rather than
        changing the shape of an NSDictionary.

        * Shared/mac/ArgumentCodersMac.mm:
        (IPC::fontIsSerializable):
        (IPC::filterUnserializableValues):
        (IPC::encode):

2015-06-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Fix return-type-c-linkage warning after r185553
        https://bugs.webkit.org/show_bug.cgi?id=146014

        Reviewed by Martin Robinson.

        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.cpp:
        (WebKit::CustomProtocolManagerImpl::start): webkitSoupRequestGenericGetRequest now returns
        a pointer rather than a reference.

2015-06-19  Brady Eidson  <beidson@apple.com>

        Rename WKSecurityOrigin.h/cpp to WKSecurityOriginRef.h/cpp.
        https://bugs.webkit.org/show_bug.cgi?id=146152

        Reviewed by Dan Bernstein.

        * CMakeLists.txt:

        * Shared/API/c/WKSecurityOriginRef.cpp: Renamed from Source/WebKit2/Shared/API/c/WKSecurityOrigin.cpp.
        * Shared/API/c/WKSecurityOriginRef.h: Renamed from Source/WebKit2/Shared/API/c/WKSecurityOrigin.h.

        * UIProcess/API/efl/ewk_security_origin.cpp:
        * UIProcess/API/efl/ewk_storage_manager.cpp:

        * WebKit2.xcodeproj/project.pbxproj:

2015-06-18  Brent Fulgham  <bfulgham@apple.com>

        [iOS] scrollIntoViewIfNeeded is not working with scroll-snap points
        https://bugs.webkit.org/show_bug.cgi?id=145318
        <rdar://problem/21081501>

        Reviewed by Simon Fraser.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode): Handle scroll snap point offset indices.
        (ArgumentCoder<ScrollingStateScrollingNode>::decode): Ditto.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::currentSnapPointIndicesDidChange): Added. Send message
        to WebProcess when scroll snap indices have changed.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::currentSnapPointIndicesDidChange): Added. Notify the
        RemoteScrollingCoordinatorProxy when scroll snap indices have changed.
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Revised.
        Identify changes in the current scroll snap point offset index (in either the horizontal or vertical
        directions), and send a notification when this happens.
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::currentSnapPointIndicesDidChange): Added. Notify the
        Scrolling Tree when indices changed.
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping): Revised. Always compute
        the new scroll snap offset index (even when we will rubber band).
        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.messages.in: Add a new message to relay changes in scroll
        snap index.
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::currentSnapPointIndicesChangedForNode): Added.

2015-06-19  Jeremy Jones  <jeremyj@apple.com>

        Revert switch to _synchronizedDrawingFence.
        https://bugs.webkit.org/show_bug.cgi?id=146136
        <rdar://problem/21227992>

        Reviewed by Simon Fraser.

        Revert _synchronizedDrawingFence code path that leaks a port.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame):

2015-06-19  Anders Carlsson  <andersca@apple.com>

        Address review feedback from Darin.

        * Shared/mac/HangDetectionDisablerMac.mm:
        (WebKit::clientsMayIgnoreEvents):

2015-06-19  Anders Carlsson  <andersca@apple.com>

        Disable SpinTracer detection while loading sync XHR
        https://bugs.webkit.org/show_bug.cgi?id=146150
        rdar://problem/21462023

        Reviewed by Dan Bernstein.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):

2015-06-19  Anders Carlsson  <andersca@apple.com>

        Spintracer treats the web process as hung when it's showing JavaScript dialogs in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=146124
        rdar://problem/21449395

        Reviewed by Geoffrey Garen.

        Add a HangDetectionDisabler RAII object and use it for JavaScript panels.

        * Shared/HangDetectionDisabler.h: Added.
        (WebKit::HangDetectionDisabler::HangDetectionDisabler):
        (WebKit::HangDetectionDisabler::~HangDetectionDisabler):
        * Shared/mac/HangDetectionDisablerMac.mm: Added.
        (WebKit::clientsMayIgnoreEvents):
        (WebKit::setClientsMayIgnoreEvents):
        (WebKit::HangDetectionDisabler::HangDetectionDisabler):
        (WebKit::HangDetectionDisabler::~HangDetectionDisabler):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):

2015-06-19  Dan Bernstein  <mitz@apple.com>

        Fixed the build for platforms that don’t have SafariServices.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):
        (-[WKContentView commitPreviewViewController:]):
        (-[WKContentView willPresentPreviewViewController:forPosition:inSourceView:]):

2015-06-19  Csaba Osztrogonác  <ossy@webkit.org>

        Remove unnecessary svn:executable flags
        https://bugs.webkit.org/show_bug.cgi?id=146107

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/efl/EwkView.cpp: Removed property svn:executable.

2015-06-19  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] Fix unused-private-field warning in WebProcess/Plugins/PluginView.<h|cpp>
        https://bugs.webkit.org/show_bug.cgi?id=145252

        Reviewed by Tim Horton.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView): Added the necessary ifdef guard.
        * WebProcess/Plugins/PluginView.h: Added the necessary ifdef guard.
        * WebProcess/WebPage/WebPage.h: Moved the definition of ENABLE_PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC to WTF.

2015-06-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Do not store configuration parameters twice in WebProcessPool
        https://bugs.webkit.org/show_bug.cgi?id=146102

        Reviewed by Sam Weinig.

        Since we are copying the given WebProcessPoolConfiguration and
        keeping it as a member, we don't need to keep an additional copy
        of its contents as extra members. This also prevents
        inconsistencies between the values in the configuration and the
        members when any of them are modified by WebProcessPool API.

        * UIProcess/API/APIProcessPoolConfiguration.h: Return a const
        reference instead of a temporary in methods returning a String.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::updateProcessSuppressionState):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setProcessModel):
        (WebKit::WebProcessPool::setMaximumNumberOfProcesses):
        (WebKit::WebProcessPool::networkingProcessConnection):
        (WebKit::WebProcessPool::languageChanged):
        (WebKit::WebProcessPool::setUsesNetworkProcess):
        (WebKit::WebProcessPool::usesNetworkProcess):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::ensureDatabaseProcess):
        (WebKit::WebProcessPool::ensureSharedWebProcess):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::warmInitialProcess):
        (WebKit::WebProcessPool::disconnectProcess):
        (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
        (WebKit::WebProcessPool::createWebPage):
        (WebKit::WebProcessPool::postMessageToInjectedBundle):
        (WebKit::WebProcessPool::setCanHandleHTTPSServerTrustEvaluation):
        (WebKit::WebProcessPool::setCacheModel):
        (WebKit::WebProcessPool::allowSpecificHTTPSCertificateForHost):
        (WebKit::WebProcessPool::requestWebContentStatistics):
        (WebKit::WebProcessPool::requestNetworkingStatistics):
        * UIProcess/WebProcessPool.h:
        (WebKit::WebProcessPool::sendToNetworkingProcess):
        (WebKit::WebProcessPool::sendToNetworkingProcessRelaunchingIfNecessary):
        (WebKit::WebProcessPool::sendToAllProcessesRelaunchingThemIfNecessary):
        (WebKit::WebProcessPool::sendToOneProcess):
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

2015-06-18  Jon Lee  <jonlee@apple.com>

        Update AVKit usage of pip
        https://bugs.webkit.org/show_bug.cgi?id=146095
        <rdar://problem/21386853>

        Reviewed by Eric Carlson.

        - Rename preference key
        - Rename shouldAllowAlternateFullscreen to shouldAllowPictureInPictureMediaPlayback

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp: Remove unused preference calls.
        (WKPreferencesSetAllowsAlternateFullscreen): Deleted.
        (WKPreferencesGetAllowsAlternateFullscreen): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isShowingVideoPictureInPicture]): Renamed.
        (-[WKWebView _isShowingVideoOptimized]): Deleted.
        (-[WKWebView _mayAutomaticallyShowVideoPictureInPicture]): Renamed.
        (-[WKWebView _mayAutomaticallyShowVideoOptimized]): Deleted.
        (shouldAllowPictureInPictureMediaPlayback): Renamed.
        (shouldAllowAlternateFullscreen): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h: Rename local variables.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::mayAutomaticallyShowVideoPictureInPicture): Renamed.
        (WebKit::WebVideoFullscreenManagerProxy::mayAutomaticallyShowVideoOptimized): Deleted.
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/ios/WebVideoFullscreenManager.mm:

2015-06-18  Jeremy Jones  <jeremyj@apple.com>

        Fix crash when entering fullscreen during exit fullscreen animation.
        https://bugs.webkit.org/show_bug.cgi?id=146117

        Reviewed by Simon Fraser.

        A partial teardown left the LayerHostingContext in a bad state when attempting to reuse the model and interface
        objects. Instead, complete the teardown and don't reuse the objects.

        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::didEnterFullscreen): WebThreadRun is a no-op in WK2. Use dispatch_async.
        (WebKit::WebVideoFullscreenManager::didCleanupFullscreen): Do complete teardown before entering fullscreen again.

2015-06-18  Anders Carlsson  <andersca@apple.com>

        Remove shouldInterruptJavaScript
        https://bugs.webkit.org/show_bug.cgi?id=146118

        Reviewed by Antti Koivisto.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::shouldInterruptJavaScript): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient): Deleted.
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::shouldInterruptJavaScript): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldInterruptJavaScript): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2015-06-18  Tim Horton  <timothy_horton@apple.com>

        Use SFSafariViewController for previews
        https://bugs.webkit.org/show_bug.cgi?id=146092

        Reviewed by Darin Adler.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):
        (-[WKContentView commitPreviewViewController:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * Source/WebKit2/Platform/spi/ios/SafariServicesSPI.h:

2015-06-18  Antti Koivisto  <antti@apple.com>

        ~4% Membuster regression after WebKit r185452
        https://bugs.webkit.org/show_bug.cgi?id=146112
        rdar://problem/21406677

        Reviewed by Chris Dumez.

        Clear the cache write queue on critical memory pressure. There can be substantial amount of memory there and we
        don't know how long writing it out will take. System is often under I/O pressure too in low memory situations.

        This also makes sense for process suspension where we send simulated critical memory event.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::handleMemoryPressureNotification):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::clearWriteQueue):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-06-18  Csaba Osztrogonác  <ossy@webkit.org>

        Fix missing braces and deprecated declarations warnings in WebKitNotificationProvider.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145921

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitNotificationProvider.cpp:
        (WebKitNotificationProvider::WebKitNotificationProvider):

2015-06-18  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] test_ewk2_context has been failed since r185529
        https://bugs.webkit.org/show_bug.cgi?id=146046

        Reviewed by Csaba Osztrogonác.

        ewk_context_network_process_model test has been failed since r185529.
        This patch modifies the test which is similar to ewk_context_network_process_model
        based on multiple process model to fix the failure. Besides ewk_context_network_process_model
        seems to be fixed indirectly. So we enable it again.

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

2015-06-17  Yongjun Zhang  <yongjun_zhang@apple.com>

        Also turn off long press on link preview.
        https://bugs.webkit.org/show_bug.cgi?id=146084

        Also turn off long presss gesture when previewing. Turn that back on when preview is completed.

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView willPresentPreviewViewController:forPosition:inSourceView:]):
        (-[WKContentView didDismissPreviewViewController:committing:]):

2015-06-17  Brent Fulgham  <bfulgham@apple.com>

        Overflow regions with scroll snap points are not reliably rubber banding
        https://bugs.webkit.org/show_bug.cgi?id=142522
        <rdar://problem/20100726>

        Reviewed by Darin Adler.

        Make sure we don't block rubberbanding behavior when a scroll gesture should take us past
        the end of the scroll container.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Don't adjust
        target point if we were going to scroll past the edges of the scroll container.

2015-06-17  Anders Carlsson  <andersca@apple.com>

        Would like a way, in the API, to get notified about a web process crash
        https://bugs.webkit.org/show_bug.cgi?id=146085
        rdar://problem/17358828

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::NavigationClient::processDidCrash):

2015-06-17  Tim Horton  <timothy_horton@apple.com>

        Swipe gesture can get stuck, preventing scrolling and other gestures
        https://bugs.webkit.org/show_bug.cgi?id=146088
        <rdar://problem/16056087>

        Reviewed by Darin Adler.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::trackSwipeGesture):
        Ignore mouse events that come in while we're doing a swipe.
        This prevents potentially problematic mouse events (especially context menus)
        won't be processed during a swipe, avoiding situations that can cause
        the swipe gesture to get stuck.

2015-06-17  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove willSendEventToPlugin() from PluginController.h.
        https://bugs.webkit.org/show_bug.cgi?id=146054

        Reviewed by Darin Adler.

        PluginController::willSendEventToPlugin() was introduced by http://webkit.org/b/59124.
        This method had been used only for WebKit2 on Windows, and no one uses it now.
        So we can remove it.

        No new tests, no behavior change.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::willSendEventToPlugin): Deleted.
        * PluginProcess/PluginControllerProxy.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::willSendEventToPlugin): Deleted.
        * WebProcess/Plugins/PluginView.h:

2015-06-17  Tim Horton  <timothy_horton@apple.com>

        Repro crash when swiping back from a NY Times article @ WebPageProxy::navigationGestureDidEnd
        https://bugs.webkit.org/show_bug.cgi?id=146083
        <rdar://problem/20974232>

        Reviewed by Darin Adler.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame):
        (WebKit::ViewGestureController::activeLoadMonitoringTimerFired):
        It is possible to get didSameDocumentNavigationForMainFrame *before*
        endSwipeGesture, while the user is still interactively swiping. We
        cannot remove the snapshot in this case, nor should we start the active
        load monitoring timer; all of these things should happen only after the
        swipe is completed and we've performed the navigation.

        This was particularly bad (a crash instead of just a disappearing snapshot)
        because removing the snapshot also causes m_webPageProxyForBackForwardListForCurrentSwipe
        to be nulled out, but then it is dereferenced during endSwipeGesture.

        Make sure that we never call removeSwipeSnapshotIfReady unless we were actually
        waiting to remove the swipe snapshot (because the gesture had completed).
        Most callers already did ensure this, but these two did not.

2015-06-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve Full Screen support for Web Inspector windows
        https://bugs.webkit.org/show_bug.cgi?id=146036

        Reviewed by Timothy Hatcher.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter windowDidEnterFullScreen:]):
        (-[WKWebInspectorProxyObjCAdapter windowDidExitFullScreen:]):
        (WebKit::WebInspectorProxy::platformCanAttach):
        (WebKit::WebInspectorProxy::windowFullScreenDidChange):
        When entering / leaving full screen update attach availability to
        potentially show / hide the frontend's docking buttons.

        (WebKit::WebInspectorProxy::createInspectorWindow):
        Allow a Web Inspector window to be a full screen auxillary window,
        so that if the application with a WebView opens a detached inspector
        window it can be shown on the same desktop as the full screen app.
        Also, reduce the minimum window size requirements for full screen tiling.

2015-06-17  Tim Horton  <timothy_horton@apple.com>

        Safari tabs still have shrunken content after coming out of fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=146037
        <rdar://problem/21105960>

        Reviewed by Simon Fraser and Darin Adler.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::useFixedLayoutDidChange):
        (WebKit::WebPageProxy::fixedLayoutSizeDidChange):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseFixedLayout):
        (WebKit::WebPage::setFixedLayoutSize):
        Keep the UI process up-to-date when fixed layout is enabled or the size changes.
        This is important because these things can change from the Web process side too,
        and the UI process uses its (potentially stale) version to do some short-circuiting.
        This was causing us to fail to turn off fixed layout when it was turned
        on from the Web process side (by TiledCoreAnimationDrawingArea).

        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy willChangeLayoutStrategy]):
        Reset the view scale, which WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy
        makes heavy use of, just like the others.

2015-06-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose UIDelegate::UIClient::close via WKUIDelegate
        https://bugs.webkit.org/show_bug.cgi?id=145957

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKUIDelegate.h: Added -webViewDidClose: to the protocol.
        * UIProcess/Cocoa/UIDelegate.h: Added a webViewDidClose boolean to the delegate methods struct.
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate): Initialize the webViewDidClose boolean.
        (WebKit::UIDelegate::UIClient::close): Changed to call the new delegate method. Left behind
        code that calls the old private method if it’s implemented.

2015-06-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER doesn't disable memory cache when set before the web process is launched
        https://bugs.webkit.org/show_bug.cgi?id=146053

        Reviewed by Martin Robinson.

        The cache is disabled in WebProcess::platformSetCacheModel() when
        the cache model is CacheModelDocumentViewer, but it's enabled
        again by WebProcess::setMemoryCacheDisabled() when
        memoryCacheDisabled creation parameter is processed. We need to
        make sure the cache model and memoryCacheDisabled parameters are consistent.

        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Initialize
        memoryCacheDisabled parameter to true if memory cache was
        explicitly disabled or cache model is CacheModelDocumentViewer.

2015-06-17  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] valueForKey() shouldn't copy the defaults map
        https://bugs.webkit.org/show_bug.cgi?id=146050

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey): Avoid copying the defaults HashMap by binding the return value to a reference.

2015-06-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Inhibit screen saver when playing full screen video
        https://bugs.webkit.org/show_bug.cgi?id=145795

        Reviewed by Gustavo Noronha Silva.

        Use Freedesktop.org DBus API to inhibit/unhinibit the screen saver
        when entering/leaving fullscreen.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (screenSaverInhibitedCallback):
        (webkitWebViewBaseSendInhibitMessageToScreenSaver):
        (screenSaverProxyCreatedCallback):
        (webkitWebViewBaseInhibitScreenSaver):
        (webkitWebViewBaseUninhibitScreenSaver):
        (webkitWebViewBaseEnterFullScreen):
        (webkitWebViewBaseExitFullScreen):

2015-06-16  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr with Ref or RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=146001

        Reviewed by Darin Adler.

        As step to remove PassRefPtr, this patch reduces use of PassRefPtr in WebKit2.
        If function can't return nullptr, PassRefPtr is changed with Ref. If not, the function
        returns RefPtr.

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::create):
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:
        (WebKit::DatabaseProcessIDBConnection::create):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        (WebKit::UniqueIDBDatabase::create):
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::create):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/RemoteNetworkingContext.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::create):
        * PluginProcess/WebProcessConnection.h:
        * Shared/API/APINumber.h:
        (API::Number::create):
        * Shared/API/APISecurityOrigin.h:
        (API::SecurityOrigin::createFromString):
        (API::SecurityOrigin::create):
        * Shared/API/APISerializedScriptValue.h:
        (API::SerializedScriptValue::create):
        (API::SerializedScriptValue::adopt):
        * Shared/APIWebArchive.h:
        * Shared/APIWebArchive.mm:
        (API::WebArchive::create):
        * Shared/APIWebArchiveResource.h:
        * Shared/APIWebArchiveResource.mm:
        (API::WebArchiveResource::create):
        * Shared/AsyncRequest.h:
        * UIProcess/API/efl/ewk_url_request_private.h:
        (EwkUrlRequest::create):
        * UIProcess/API/efl/ewk_url_response_private.h:
        (EwkUrlResponse::create):
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        (EwkUrlSchemeRequest::create):
        * UIProcess/API/efl/ewk_window_features_private.h:
        (EwkWindowFeatures::create):
        * UIProcess/API/efl/tests/test_ewk2_object.cpp:
        (TestEwkObject1::create):
        (TestEwkObject2::create):
        * UIProcess/API/gtk/WebKitBatteryProvider.cpp:
        (WebKitBatteryProvider::create):
        * UIProcess/API/gtk/WebKitBatteryProvider.h:
        * UIProcess/API/gtk/WebKitColorChooser.cpp:
        (WebKit::WebKitColorChooser::create):
        * UIProcess/API/gtk/WebKitGeolocationProvider.cpp:
        (WebKitGeolocationProvider::create):
        * UIProcess/API/gtk/WebKitNotificationProvider.cpp:
        (WebKitNotificationProvider::create):
        * UIProcess/API/gtk/WebKitNotificationProvider.h:
        * UIProcess/GeolocationPermissionRequestProxy.h:
        (WebKit::GeolocationPermissionRequestProxy::create):
        * UIProcess/InspectorServer/HTTPRequest.h:
        (WebKit::HTTPRequest::create):
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp:
        (WebKit::WebSoupCustomProtocolRequestManager::create):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::create):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Notifications/NotificationPermissionRequest.cpp:
        (WebKit::NotificationPermissionRequest::create):
        * UIProcess/Notifications/NotificationPermissionRequest.h:
        * UIProcess/Notifications/WebNotification.h:
        (WebKit::WebNotification::create):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scriptValueCallback):
        * UIProcess/WebVibrationProxy.cpp:
        (WebKit::WebVibrationProxy::create):
        * UIProcess/WebVibrationProxy.h:
        * UIProcess/WebViewportAttributes.h:
        (WebKit::WebViewportAttributes::create):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::createNonPersistent):
        (WebKit::WebsiteDataStore::create):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * UIProcess/gtk/WebColorPickerGtk.cpp:
        (WebKit::WebColorPickerGtk::create):
        * UIProcess/gtk/WebColorPickerGtk.h:
        * UIProcess/gtk/WebContextMenuProxyGtk.h:
        (WebKit::WebContextMenuProxyGtk::create):
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:
        (WebKit::WebPopupMenuProxyGtk::create):
        * UIProcess/mac/ViewSnapshotStore.h:
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshot::create):
        * UIProcess/mac/WebColorPickerMac.h:
        * UIProcess/mac/WebColorPickerMac.mm:
        (WebKit::WebColorPickerMac::create):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        (WebKit::WebContextMenuProxyMac::create):
        * UIProcess/mac/WebPopupMenuProxyMac.h:
        (WebKit::WebPopupMenuProxyMac::create):
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h:
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        (WebKit::WebToDatabaseProcessConnection::create):
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::create):
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::create):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.h:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.h:
        (WebKit::InjectedBundleBackForwardList::create):

2015-06-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Unreviewed build fix after r185615.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_clear_cache): Comment the call to the code
        removed and write down the bugzilla link for reimplementation.

2015-06-16  Anders Carlsson  <andersca@apple.com>

        Get rid of performAPICallbackWithSecurityOriginDataVector
        https://bugs.webkit.org/show_bug.cgi?id=146039

        Reviewed by Andreas Kling.

        Get rid of performAPICallbackWithSecurityOriginDataVector since it's now no longer used
        and add a bunch of includes to make up for SecurityOriginData.h no longer including GenericCallback.h.
        * DatabaseProcess/DatabaseProcess.cpp:
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * Shared/SecurityOriginData.cpp:
        (WebKit::performAPICallbackWithSecurityOriginDataVector): Deleted.
        * Shared/SecurityOriginData.h:
        * Shared/WebsiteData/WebsiteData.cpp:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:

2015-06-16  Ryuan Choi  <ryuan.choi@navercorp.com>

        Unreviewed build fix attempt on CMake based port after r185623.

        * CMakeLists.txt:

2015-06-16  Anders Carlsson  <andersca@apple.com>

        Move LocalStorageDetails into the local storage database tracker
        https://bugs.webkit.org/show_bug.cgi?id=146034

        Reviewed by Andreas Kling.

        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        (WKKeyValueStorageManagerDeleteAllEntries):
        * UIProcess/LocalStorageDetails.h: Removed.
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::originDetails):
        (WebKit::LocalStorageDatabaseTracker::details): Deleted.
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getLocalStorageOriginDetails):
        (WebKit::StorageManager::getLocalStorageDetailsByOrigin): Deleted.
        (WebKit::StorageManager::deleteAllLocalStorageEntries): Deleted.
        * UIProcess/Storage/StorageManager.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-06-16  Dan Bernstein  <mitz@apple.com>

        Removed the WebKit2SandboxProfiles target.

        Rubber-stamped by Anders Carlsson.

        WebKit2SandboxProfiles was just an alias for the Sandbox Profiles target, and it’s not
        needed anymore.

        * WebKit2.xcodeproj/project.pbxproj:

2015-06-16  Anders Carlsson  <andersca@apple.com>

        Fold WebKeyValueStorageManager into WKKeyValueStorageManager
        https://bugs.webkit.org/show_bug.cgi?id=146030

        Reviewed by Andreas Kling.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetKeyValueStorageManager):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetTypeID):
        (WKKeyValueStorageManagerGetOriginKey):
        (WKKeyValueStorageManagerGetCreationTimeKey):
        (WKKeyValueStorageManagerGetModificationTimeKey):
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        (WKKeyValueStorageManagerDeleteEntriesForOrigin):
        (WKKeyValueStorageManagerDeleteAllEntries):
        * UIProcess/WebKeyValueStorageManager.cpp: Removed.
        (WebKit::WebKeyValueStorageManager::supplementName): Deleted.
        (WebKit::WebKeyValueStorageManager::originKey): Deleted.
        (WebKit::WebKeyValueStorageManager::creationTimeKey): Deleted.
        (WebKit::WebKeyValueStorageManager::modificationTimeKey): Deleted.
        (WebKit::WebKeyValueStorageManager::create): Deleted.
        (WebKit::WebKeyValueStorageManager::WebKeyValueStorageManager): Deleted.
        (WebKit::WebKeyValueStorageManager::~WebKeyValueStorageManager): Deleted.
        (WebKit::WebKeyValueStorageManager::refWebContextSupplement): Deleted.
        (WebKit::WebKeyValueStorageManager::derefWebContextSupplement): Deleted.
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins): Deleted.
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin): Deleted.
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin): Deleted.
        (WebKit::WebKeyValueStorageManager::deleteAllEntries): Deleted.
        * UIProcess/WebKeyValueStorageManager.h: Removed.
        * UIProcess/WebProcessPool.cpp:
        * WebKit2.xcodeproj/project.pbxproj:

2015-06-16  Alex Christensen  <achristensen@webkit.org>

        CMake build fix after r185615.

        * CMakeLists.txt:
        Remove WebResourceCacheManager from CMake build system.

2015-06-16  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Implement branch compaction for DFA bytecode.
        https://bugs.webkit.org/show_bug.cgi?id=145619

        Reviewed by Benjamin Poulain.

        * UIProcess/API/APIUserContentExtensionStore.h:
        Increment version number to reflect changes to bytecode.

2015-06-16  Anders Carlsson  <andersca@apple.com>

        WebResourceCacheManager is unused, get rid of it
        https://bugs.webkit.org/show_bug.cgi?id=146027

        Reviewed by Sam Weinig.

        * DerivedSources.make:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/WebResourceCacheManagerProxy.cpp: Removed.
        (WebKit::WebResourceCacheManagerProxy::supplementName): Deleted.
        (WebKit::WebResourceCacheManagerProxy::create): Deleted.
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy): Deleted.
        (WebKit::WebResourceCacheManagerProxy::~WebResourceCacheManagerProxy): Deleted.
        (WebKit::WebResourceCacheManagerProxy::processPoolDestroyed): Deleted.
        (WebKit::WebResourceCacheManagerProxy::processDidClose): Deleted.
        (WebKit::WebResourceCacheManagerProxy::shouldTerminate): Deleted.
        (WebKit::WebResourceCacheManagerProxy::refWebContextSupplement): Deleted.
        (WebKit::WebResourceCacheManagerProxy::derefWebContextSupplement): Deleted.
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins): Deleted.
        (WebKit::WebResourceCacheManagerProxy::didGetCacheOrigins): Deleted.
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin): Deleted.
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins): Deleted.
        * UIProcess/WebResourceCacheManagerProxy.h: Removed.
        * UIProcess/WebResourceCacheManagerProxy.messages.in: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp: Removed.
        (WebKit::WebResourceCacheManager::supplementName): Deleted.
        (WebKit::WebResourceCacheManager::WebResourceCacheManager): Deleted.
        (WebKit::WebResourceCacheManager::getCacheOrigins): Deleted.
        (WebKit::WebResourceCacheManager::returnCacheOrigins): Deleted.
        (WebKit::WebResourceCacheManager::clearCacheForOrigin): Deleted.
        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins): Deleted.
        * WebProcess/ResourceCache/WebResourceCacheManager.h: Removed.
        * WebProcess/ResourceCache/WebResourceCacheManager.messages.in: Removed.
        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.mm: Removed.
        (WebKit::partitionName): Deleted.
        (WebKit::WebResourceCacheManager::cfURLCacheHostNamesWithCallback): Deleted.
        (WebKit::WebResourceCacheManager::clearCFURLCacheForHostNames): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Deleted.

2015-06-16  Alex Christensen  <achristensen@webkit.org>

        CMake build fix after r185601.

        * CMakeLists.txt:
        Remove application cache manager classes.

2015-06-16  Anders Carlsson  <andersca@apple.com>

        Stop calling into WebResourceCacheManager
        https://bugs.webkit.org/show_bug.cgi?id=146026

        Reviewed by Andreas Kling.

        Copy the cache clearing code into NetworkProcessCocoa in preparation of getting rid of
        the WebResourceCacheManager code.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::clearDiskCacheEntries):
        (WebKit::cfURLCacheOrigins): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::partitionName):
        (WebKit::NetworkProcess::cfURLCacheOrigins):
        (WebKit::NetworkProcess::clearCFURLCacheForOrigins):

2015-06-16  Anders Carlsson  <andersca@apple.com>

        Get rid of the application cache manager classes, they are no longer used
        https://bugs.webkit.org/show_bug.cgi?id=146024

        Reviewed by Sam Weinig.

        * DerivedSources.make:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/WebApplicationCacheManagerProxy.cpp: Removed.
        (WebKit::WebApplicationCacheManagerProxy::supplementName): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::create): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::~WebApplicationCacheManagerProxy): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::processPoolDestroyed): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::processDidClose): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::shouldTerminate): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::refWebContextSupplement): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::derefWebContextSupplement): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::didGetApplicationCacheOrigins): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin): Deleted.
        (WebKit::WebApplicationCacheManagerProxy::deleteAllEntries): Deleted.
        * UIProcess/WebApplicationCacheManagerProxy.h: Removed.
        * UIProcess/WebApplicationCacheManagerProxy.messages.in: Removed.
        * UIProcess/WebProcessPool.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp: Removed.
        (WebKit::WebApplicationCacheManager::supplementName): Deleted.
        (WebKit::WebApplicationCacheManager::WebApplicationCacheManager): Deleted.
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins): Deleted.
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin): Deleted.
        (WebKit::WebApplicationCacheManager::deleteAllEntries): Deleted.
        (WebKit::WebApplicationCacheManager::setAppCacheMaximumSize): Deleted.
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h: Removed.
        * WebProcess/ApplicationCache/WebApplicationCacheManager.messages.in: Removed.
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearApplicationCache):
        (WebKit::InjectedBundle::setAppCacheMaximumSize):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Deleted.

2015-06-16  Brady Eidson  <beidson@apple.com>

        IDB: Records table migration doesn't work with all versions of SQLite.
        https://bugs.webkit.org/show_bug.cgi?id=145993

        Reviewed by Darin Adler, provisionally reviewed by Jon Lee.

        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::v1RecordsTableSchema):
        (WebKit::v1RecordsTableSchemaAlternate):
        (WebKit::v2RecordsTableSchema):
        (WebKit::v2RecordsTableSchemaAlternate):
        (WebKit::createOrMigrateRecordsTableIfNecessary): Check both v1 and v1 Alternate whenever we check for the v1 schema.
          Ditto for the v2 schema. Crash all builds if the current schema is none of these.

2015-06-16  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * mac/postprocess-framework-headers.sh:

2015-06-16  Commit Queue  <commit-queue@webkit.org>

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

         It broke some WK2 API tests on EFL bots (Requested by
        gyuyoung on #webkit).

        Reverted changeset:

        "[EFL] Make send/receive messages to communicate the Web and
        UI Processes using Injected Bundle."
        https://bugs.webkit.org/show_bug.cgi?id=145685
        http://trac.webkit.org/changeset/185552

2015-06-16  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Add API tests for ewk_page
        https://bugs.webkit.org/show_bug.cgi?id=146004

        Reviewed by Gyuyoung Kim.

        Add unit test for load_started/load_finished callbacks of ewk_page.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/extensions/extension_sample.cpp:
        * UIProcess/API/efl/tests/test_ewk2_page.cpp: Added.
        (EWK2PageTest::messageReceivedCallback):
        (EWK2PageTest::EWK2PageTest):
        (TEST_F):

2015-06-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] position:fixed elements sometimes truncated on scroll view bouncing
        https://bugs.webkit.org/show_bug.cgi?id=146000
        rdar://problem/19448439

        Reviewed by Benjamin Poulain.
        
        When in the middle of a rubber-band (UIScrollView bounce), we could send a bad 
        fixed position rect down to WebCore, causing 100% height elements to get laid out
        at the wrong height, possible too short. This occurred when -_updateVisibleContentRects
        said we were in a stable state, but the rubber-band offset caused WebPageProxy::computeCustomFixedPositionRect()
        to compute a bad rect via constrainedUnobscuredRect.intersect(documentRect).
        
        Fix by not claiming to be in a stable state during rubber-banding. Added _scrollViewIsRubberBanding
        to compute that, taking care with floating point comparisons for 3x devices.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (isGreaterInDevicePixels):
        (-[WKWebView _scrollViewIsRubberBanding]):
        (-[WKWebView _updateVisibleContentRects]):

2015-06-15  Ryuan Choi  <ryuan.choi@navercorp.com>

        Fix build break when ENABLE_SECCOMP_FILTERS is ON
        https://bugs.webkit.org/show_bug.cgi?id=145967

        Reviewed by Carlos Garcia Campos.

        Since r183189, ArgumentEncoder::addAttachment requires rvalue reference.

        * Shared/linux/SeccompFilters/OpenSyscall.cpp:
        (WebKit::OpenSyscallResult::encode): Use WTF::move().

2015-06-15  Chris Dumez  <cdumez@apple.com>

        [WK2] BrowsingContextController.loadData API is leaking Navigation objects
        https://bugs.webkit.org/show_bug.cgi?id=145977
        <rdar://problem/21305706>

        Reviewed by Darin Adler.

        BrowsingContextController.loadData API was leaking Navigation objects.
        The issue was due to WebPageProxy::loadData() creating a Navigation
        object but not passing along the navigationID to the WebProcess when
        sending the Messages::WebPage::LoadData IPC. As a result, the
        WebProcess would use 0 as navigationID and we would end up creating a
        new Navigation object later on for the same navigation.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadData):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadData):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-06-15  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r185298): Databases service has Web Content service’s entitlements
        https://bugs.webkit.org/show_bug.cgi?id=145980

        Reviewed by Darin Adler.

        * Configurations/DatabaseService.xcconfig: Set WK_XPC_SERVICE_IOS_ENTITLEMENTS_BASE to
        Databases-iOS.

2015-06-11  Jon Lee  <jonlee@apple.com>

        [WK2] Add allowsPictureInPictureMediaPlayback
        https://bugs.webkit.org/show_bug.cgi?id=145901
        rdar://problem/21349851

        Reviewed by Anders Carlsson.

        Replace _allowsAlternateFullscreen with allowsPictureInPictureMediaPlayback.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h: Add allowsPictureInPictureMediaPlayback.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Remove _allowsAlternateFullscreen.
        (-[WKWebViewConfiguration copyWithZone:]): Replace the variable.
        (-[WKWebViewConfiguration _allowsAlternateFullscreen]): Deleted.
        (-[WKWebViewConfiguration _setAllowsAlternateFullscreen:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Remove the SPI.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Update to use the new API.

2015-06-12  Alexey Proskuryakov  <ap@apple.com>

        -[WKWebView evaluateJavaScript] provides a misleading error when the return cannot be serialized
        https://bugs.webkit.org/show_bug.cgi?id=145900

        Reviewed by Sam Weinig.

        We used to conflate to cases: (1) when there was a JavaScript exception, and
        (2) when the result could not be serialized for IPC. Turns out that it was quite
        misleading!

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame):
        * UIProcess/API/Cocoa/WKError.h:
        * UIProcess/API/Cocoa/WKError.mm:
        (localizedDescriptionForErrorCode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView evaluateJavaScript:completionHandler:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::scriptValueCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_run_javascript):
        (resourcesStreamReadCallback):

2015-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Custom URI schemes don't work for requests containing a fragment identifier
        https://bugs.webkit.org/show_bug.cgi?id=145969

        Reviewed by Sergio Villar Senin.

        Use the WebKitSoupRequestGeneric request instead of creating a new one
        from the SoupRequest URI, since that is the network one and doesn't
        contain the fragment identifier part.

        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.cpp:
        (WebKit::CustomProtocolManagerImpl::start):

2015-06-15  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [EFL] Make send/receive messages to communicate the Web and UI Processes using Injected Bundle.
        https://bugs.webkit.org/show_bug.cgi?id=145685

        Reviewed by Gyuyoung Kim.

        To have extensible port specific API facility using Injected Bundle,
        we need to load libewebkit_extension_manager.so in default that is same as what gtk port does.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (EwkContext::~EwkContext):
        (EwkContext::findOrCreateWrapper):
        (bundlePathForExtension):
        (EwkContext::create): Deleted.
        * UIProcess/API/efl/ewk_context_private.h:
        * WebProcess/efl/ExtensionManagerEfl.cpp:
        (WebKit::ExtensionManagerEfl::initialize):

2015-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move WebKitSoupRequestGeneric to platform layer
        https://bugs.webkit.org/show_bug.cgi?id=145968

        Reviewed by Sergio Villar Senin.

        * PlatformEfl.cmake: Remove WebKitSoupRequestGeneric.
        * PlatformGTK.cmake: Ditto.
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.cpp:
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.h:

2015-06-15  Csaba Osztrogonác  <ossy@webkit.org>

        Fix unused private field warning in PageBanner.h
        https://bugs.webkit.org/show_bug.cgi?id=145925

        Reviewed by Darin Adler.

        * WebProcess/WebPage/PageBanner.cpp:
        (WebKit::PageBanner::~PageBanner):
        * WebProcess/WebPage/PageBanner.h: Initialize m_type, m_webPage, m_mouseDownInBanner, and m_isHidden here instead of in the constructor.
        * WebProcess/WebPage/mac/PageBannerMac.mm: Use PLATFORM(MAC) instead of !PLATFORM(IOS), they are same in objc files.

2015-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Make WebKitSoupRequestGeneric independent from CustomProtocolManagerImpl
        https://bugs.webkit.org/show_bug.cgi?id=145966

        Reviewed by Sergio Villar Senin.

        Add WebKitSoupRequestGenericClient with start and finish methods,
        that are implemented by WebKitSoupRequestGeneric.
        This allows us to move WebKitSoupRequestGeneric to platform layer.

        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.cpp:
        (WebKit::CustomProtocolManagerImpl::registerScheme):
        (WebKit::CustomProtocolManagerImpl::start):
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.h:
        * WebProcess/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericSendAsync):
        (webkitSoupRequestGenericSendFinish):
        * WebProcess/soup/WebKitSoupRequestGeneric.h:
        * WebProcess/soup/WebKitSoupRequestGenericClient.h: Added.

2015-06-14  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * mac/postprocess-framework-headers.sh:

2015-06-14  Michael Catanzaro  <mcatanzaro@igalia.com>

        Format string misuse in DatabaseProcessIDBConnection.cpp and UniqueIDBDatabaseBackingStoreSQLite.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145960

        Reviewed by Darin Adler.

        Use PRIu64 and PRIi64 to print uint64_t and int64_t, respectively. These things are
        different types on x86_64 Linux (unsigned long) and on Mac (unsigned long long).

        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp:
        (WebKit::DatabaseProcessIDBConnection::getOrEstablishIDBDatabaseMetadata):
        (WebKit::DatabaseProcessIDBConnection::deleteDatabase):
        (WebKit::DatabaseProcessIDBConnection::openTransaction):
        (WebKit::DatabaseProcessIDBConnection::beginTransaction):
        (WebKit::DatabaseProcessIDBConnection::commitTransaction):
        (WebKit::DatabaseProcessIDBConnection::resetTransaction):
        (WebKit::DatabaseProcessIDBConnection::rollbackTransaction):
        (WebKit::DatabaseProcessIDBConnection::changeDatabaseVersion):
        (WebKit::DatabaseProcessIDBConnection::createObjectStore):
        (WebKit::DatabaseProcessIDBConnection::deleteObjectStore):
        (WebKit::DatabaseProcessIDBConnection::clearObjectStore):
        (WebKit::DatabaseProcessIDBConnection::createIndex):
        (WebKit::DatabaseProcessIDBConnection::deleteIndex):
        (WebKit::DatabaseProcessIDBConnection::putRecord):
        (WebKit::DatabaseProcessIDBConnection::getRecord):
        (WebKit::DatabaseProcessIDBConnection::count):
        (WebKit::DatabaseProcessIDBConnection::deleteRange):
        (WebKit::DatabaseProcessIDBConnection::openCursor):
        (WebKit::DatabaseProcessIDBConnection::cursorAdvance):
        (WebKit::DatabaseProcessIDBConnection::cursorIterate):
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::deleteObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::clearObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::deleteIndex):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::generateKeyNumber):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::keyExistsInObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::putRecord):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::uncheckedPutIndexRecord):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::deleteRecord):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::getKeyRecordFromObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::getKeyRangeRecordFromObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::advanceCursor):

2015-06-14  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Clean up postprocess-framework-headers.sh
        https://bugs.webkit.org/show_bug.cgi?id=145962

        Reviewed by Darin Adler.

        * mac/postprocess-framework-headers.sh: Gather all the sed options in a variable, and then
        run sed only once on each header. Also, correctly exit with the sed return value if it
        fails.

2015-06-13  Chris Dumez  <cdumez@apple.com>

        [WK2] API::Navigation objects are leaked on history navigation to HistoryItems in PageCache
        https://bugs.webkit.org/show_bug.cgi?id=145948

        Reviewed by Darin Adler.

        API::Navigation objects were leaked on history navigation to
        HistoryItems in PageCache. In such case, we would create 2 Navigation
        objects instead of 1 and the first one would be leaked. The reason
        we create the second one is because we fail to pass along the
        navigationID from the UIProcess to the WebProcess and then back to the
        UIProcess. On the IPC back to the UIProcess, the navigationID ends up
        being 0 so the UIProcess creates a new Navigation object, thinking that
        the load was triggered by the WebContent process.

        We now pass along the navigationID, even if the HistoryItem is in the
        PageCache and we end up reusing the cached DocumentLoader, instead of
        creating a new one. A new updateCachedDocumentLoader() delegate is
        added to the FrameLoaderClient, similarly to the pre-existing
        createDocumentLoader() but for the case where the DocumentLoader gets
        reused.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateCachedDocumentLoader):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goForward):
        (WebKit::WebPage::goBack):
        (WebKit::WebPage::goToBackForwardItem):
        (WebKit::WebPage::updateCachedDocumentLoader):
        * WebProcess/WebPage/WebPage.h:

2015-06-12  Gavin Barraclough  <barraclough@apple.com>

        Add private API to force page to always run at foreground priority
        https://bugs.webkit.org/show_bug.cgi?id=145946
        <rdar://problem/21267221>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
            - copy _alwaysRunsAtForegroundPriority to WebPageConfiguration.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _alwaysRunsAtForegroundPriority]):
        (-[WKWebViewConfiguration _setAlwaysRunsAtForegroundPriority:]):
            - added _alwaysRunsAtForegroundPriority.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
            - added _alwaysRunsAtForegroundPriority.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
            - initialize m_alwaysRunsAtForegroundPriority.
        (WebKit::WebPageProxy::updateActivityToken):
            - if m_alwaysRunsAtForegroundPriority is set always take the foreground activity token.
        * UIProcess/WebPageProxy.h:
            - added m_alwaysRunsAtForegroundPriority, alwaysRunsAtForegroundPriority.

2015-06-12  Anders Carlsson  <andersca@apple.com>

        Reimplement WKResourceCacheManagerRef on top of WKWebsiteDataStoreRef
        https://bugs.webkit.org/show_bug.cgi?id=145951

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetResourceCacheManager):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetTypeID):
        (toWebsiteDataTypes):
        (WKResourceCacheManagerGetCacheOrigins):
        (WKResourceCacheManagerClearCacheForOrigin):
        (WKResourceCacheManagerClearCacheForAllOrigins):

2015-06-12  Anders Carlsson  <andersca@apple.com>

        Reimplement WKApplicationCacheManagerRef as WKWebsiteDataStoreRef
        https://bugs.webkit.org/show_bug.cgi?id=145950

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetTypeID):
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        (WKApplicationCacheManagerDeleteEntriesForOrigin):
        (WKApplicationCacheManagerDeleteAllEntries):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetApplicationCacheManager):
        (WKContextGetPluginSiteDataManager):

2015-06-12  Anders Carlsson  <andersca@apple.com>

        Clean up IndexedDB website data retrieval and removal
        https://bugs.webkit.org/show_bug.cgi?id=145941

        Reviewed by Andreas Kling.

        - Use SecurityOrigin instead of SecurityOriginData; It's not possible to pass SecurityOriginData
        safely between threads.
        
        - Use std::chrono instead of double for modification times.
        
        - Get rid of endTime since it's not used.
        
        - Change deleteIndexedDatabaseEntriesForOrigin to deleteIndexedDatabaseEntriesForOrigins and make it take
        a vector of origins instead of a single one.

        - Get rid of deleteAllIndexedDatabaseEntries.

        - Change SecurityOriginData::securityOrigin to call isolatedCopy on the origin components, since it's common
        to pass origins to other threads and we want that to be safe.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::fetchWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
        (WebKit::DatabaseProcess::indexedDatabaseOrigins):
        (WebKit::removeAllDatabasesForOriginPath):
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesForOrigins):
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesModifiedSince):
        (WebKit::DatabaseProcess::getIndexedDatabaseOrigins): Deleted.
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesForOrigin): Deleted.
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesModifiedBetweenDates): Deleted.
        (WebKit::DatabaseProcess::deleteAllIndexedDatabaseEntries): Deleted.
        * DatabaseProcess/DatabaseProcess.h:
        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::securityOrigin):

2015-06-12  Antti Koivisto  <antti@apple.com>

        Network Cache: Use SHA1 for header checksum
        https://bugs.webkit.org/show_bug.cgi?id=145928

        Reviewed by Chris Dumez.

        Use SHA1 everywhere for consistency and robustness.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::bodyPathForKey):
        (WebKit::NetworkCache::RecordMetaData::RecordMetaData):
        (WebKit::NetworkCache::decodeRecordMetaData):
        (WebKit::NetworkCache::decodeRecordHeader):
        (WebKit::NetworkCache::encodeRecordMetaData):
        (WebKit::NetworkCache::Storage::encodeRecord):
        (WebKit::NetworkCache::hashData): Deleted.

            This was the last user of 32 bit hashes in cache code.

        * NetworkProcess/cache/NetworkCacheStorage.h:

            Also bump the cache version number as recent changes have changed the format.
            Old caches would transition fine but this makes it easier to identify which version user has.

2015-06-12  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Video with reflection crashes WebKit and Safari
        https://bugs.webkit.org/show_bug.cgi?id=145905
        rdar://problem/18364939

        Reviewed by Anders Carlsson.
        
        On iOS, AVPlayerLayers are contained inside a WebVideoContainerLayer, but
        the layer type is still LayerTypeAVPlayerLayer.
        
        Avoid throwing exceptions when cloning such layers by checking the layer class.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::clone):

2015-06-12  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix unused private field warning in WebContextMenuProxyEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145911

        Reviewed by Darin Adler.

        * UIProcess/efl/WebContextMenuProxyEfl.cpp:
        (WebKit::WebContextMenuProxyEfl::WebContextMenuProxyEfl): Deleted.
        * UIProcess/efl/WebContextMenuProxyEfl.h:

2015-06-12  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix after r185502.

        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:
        GRefPtr.h header has been moved to a different place.

2015-06-12  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] Move files under Source/WTF/wtf/gobject to Source/WTF/wtf/glib
        https://bugs.webkit.org/show_bug.cgi?id=145799

        Reviewed by Carlos Garcia Campos.

        Update header inclusions for headers that have been moved
        to Source/WTF/wtf/glib/.

        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h:
        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Shared/Downloads/soup/DownloadSoup.cpp:
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.h:
        * Shared/PrintInfo.h:
        * Shared/gtk/ArgumentCodersGtk.cpp:
        * Shared/gtk/ArgumentCodersGtk.h:
        * Shared/gtk/KeyedDecoder.h:
        * Shared/gtk/KeyedEncoder.h:
        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp:
        * UIProcess/API/gtk/WebKitColorChooser.h:
        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        * UIProcess/API/gtk/WebKitDownload.cpp:
        * UIProcess/API/gtk/WebKitDownloadClient.cpp:
        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        * UIProcess/API/gtk/WebKitFindController.cpp:
        * UIProcess/API/gtk/WebKitFormClient.cpp:
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp:
        * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp:
        * UIProcess/API/gtk/WebKitJavascriptResult.cpp:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        * UIProcess/API/gtk/WebKitMimeInfo.cpp:
        * UIProcess/API/gtk/WebKitNavigationAction.cpp:
        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitPolicyClient.cpp:
        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        * UIProcess/API/gtk/WebKitUserContentManager.cpp:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/InspectorServer/WebSocketServer.h:
        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
        * UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp:
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        * UIProcess/Plugins/gtk/PluginInfoCache.h:
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        * UIProcess/gtk/DragAndDropHandler.cpp:
        * UIProcess/gtk/GestureController.h:
        * UIProcess/gtk/InputMethodFilter.cpp:
        * UIProcess/gtk/InputMethodFilter.h:
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        * UIProcess/gtk/WebPopupMenuProxyGtk.h:
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResult.cpp:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        * WebProcess/WebPage/gtk/PrinterListGtk.h:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.h:
        * WebProcess/gtk/WebGtkExtensionManager.h:
        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        * WebProcess/soup/WebProcessSoup.cpp:
        * WebProcess/soup/WebSoupRequestManager.h:

2015-06-12  Antti Koivisto  <antti@apple.com>

        Network Cache: Use SHA1 for key hash
        https://bugs.webkit.org/show_bug.cgi?id=143829

        Reviewed by Anders Carlsson.

        For consistency with blobs, use SHA1 instead of MD5.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCache::Coder<MD5::Digest>::encode): Deleted.
        (WebKit::NetworkCache::Coder<MD5::Digest>::decode): Deleted.

            No longer needed.

        * NetworkProcess/cache/NetworkCacheCoders.h:
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::hashString):
        (WebKit::NetworkCache::Key::computeHash):
        * NetworkProcess/cache/NetworkCacheKey.h:

2015-06-12  Csaba Osztrogonác  <ossy@webkit.org>

        Fix mismatched-tags warning in Source/WebKit2/UIProcess/gtk/InputMethodFilter.h
        https://bugs.webkit.org/show_bug.cgi?id=145923

        Reviewed by Carlos Garcia Campos.

        * UIProcess/gtk/InputMethodFilter.h:

2015-06-12  Antti Koivisto  <antti@apple.com>

        Use SHA1 for cache coder checksums
        https://bugs.webkit.org/show_bug.cgi?id=145880

        Reviewed by Anders Carlsson.

        Make cache data error detection more robust by using SHA1 for checksums.

        * NetworkProcess/cache/NetworkCacheDecoder.cpp:
        (WebKit::NetworkCache::Decoder::Decoder):
        (WebKit::NetworkCache::Decoder::decodeFixedLengthData):
        (WebKit::NetworkCache::Decoder::decodeNumber):
        (WebKit::NetworkCache::Decoder::verifyChecksum):
        * NetworkProcess/cache/NetworkCacheDecoder.h:
        * NetworkProcess/cache/NetworkCacheEncoder.cpp:
        (WebKit::NetworkCache::Encoder::Encoder):
        (WebKit::NetworkCache::Encoder::grow):
        (WebKit::NetworkCache::Encoder::updateChecksumForData):
        (WebKit::NetworkCache::Encoder::encodeFixedLengthData):
        (WebKit::NetworkCache::Encoder::encodeNumber):
        (WebKit::NetworkCache::Encoder::encodeChecksum):
        * NetworkProcess/cache/NetworkCacheEncoder.h:
        (WebKit::NetworkCache::Encoder::buffer):
        (WebKit::NetworkCache::Encoder::bufferSize):
        (WebKit::NetworkCache::Encoder::updateChecksumForNumber):

2015-06-12  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix deprecated declarations warnings related to WK2 versioned structs
        https://bugs.webkit.org/show_bug.cgi?id=145913

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (EwkFaviconDatabase::EwkFaviconDatabase):
        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::ContextHistoryClientEfl):
        * UIProcess/efl/ContextMenuClientEfl.cpp:
        (ContextMenuClientEfl::ContextMenuClientEfl):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
        * UIProcess/efl/FindClientEfl.cpp:
        (WebKit::FindClientEfl::FindClientEfl):
        * UIProcess/efl/FormClientEfl.cpp:
        (WebKit::FormClientEfl::FormClientEfl):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::PageUIClientEfl):

2015-06-11  Mark Lam  <mark.lam@apple.com>

        WebCore::reportException() needs to be able to accept a raw thrown value in addition to Exception objects.
        https://bugs.webkit.org/show_bug.cgi?id=145872

        Reviewed by Michael Saboff.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::reportException):
        - Don't assume we have an Exception object.  Let WebCore::reportException() take
          care of it.

2015-06-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake] Unreviewed build fix after r185479.

        * CMakeLists.txt: Unlist the files that r185479 deleted.

2015-06-11  Anders Carlsson  <andersca@apple.com>

        Get rid of WebOriginDataManager
        https://bugs.webkit.org/show_bug.cgi?id=145896

        Reviewed by Andreas Kling.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::DatabaseProcess): Deleted.
        (WebKit::DatabaseProcess::getOrigins): Deleted.
        (WebKit::DatabaseProcess::deleteEntriesForOrigin): Deleted.
        (WebKit::DatabaseProcess::deleteEntriesModifiedBetweenDates): Deleted.
        (WebKit::DatabaseProcess::deleteAllEntries): Deleted.
        * DatabaseProcess/DatabaseProcess.h:
        * DerivedSources.make:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::didReceiveMessage): Deleted.
        * UIProcess/WebOriginDataManagerProxy.cpp: Removed.
        (WebKit::WebOriginDataManagerProxy::supplementName): Deleted.
        (WebKit::WebOriginDataManagerProxy::create): Deleted.
        (WebKit::WebOriginDataManagerProxy::WebOriginDataManagerProxy): Deleted.
        (WebKit::WebOriginDataManagerProxy::~WebOriginDataManagerProxy): Deleted.
        (WebKit::WebOriginDataManagerProxy::processPoolDestroyed): Deleted.
        (WebKit::WebOriginDataManagerProxy::processDidClose): Deleted.
        (WebKit::WebOriginDataManagerProxy::shouldTerminate): Deleted.
        (WebKit::WebOriginDataManagerProxy::refWebContextSupplement): Deleted.
        (WebKit::WebOriginDataManagerProxy::derefWebContextSupplement): Deleted.
        (WebKit::CallbackSynchronizer::create): Deleted.
        (WebKit::CallbackSynchronizer::~CallbackSynchronizer): Deleted.
        (WebKit::CallbackSynchronizer::taskStarted): Deleted.
        (WebKit::CallbackSynchronizer::taskCompleted): Deleted.
        (WebKit::CallbackSynchronizer::CallbackSynchronizer): Deleted.
        (WebKit::createSynchronizedCallback): Deleted.
        (WebKit::sendMessageToAllProcessesInProcessPool): Deleted.
        (WebKit::WebOriginDataManagerProxy::getOrigins): Deleted.
        (WebKit::WebOriginDataManagerProxy::didGetOrigins): Deleted.
        (WebKit::WebOriginDataManagerProxy::deleteEntriesForOrigin): Deleted.
        (WebKit::WebOriginDataManagerProxy::deleteEntriesModifiedBetweenDates): Deleted.
        (WebKit::WebOriginDataManagerProxy::didDeleteEntries): Deleted.
        (WebKit::WebOriginDataManagerProxy::deleteAllEntries): Deleted.
        (WebKit::WebOriginDataManagerProxy::didDeleteAllEntries): Deleted.
        * UIProcess/WebOriginDataManagerProxy.h: Removed.
        * UIProcess/WebOriginDataManagerProxy.messages.in: Removed.
        * UIProcess/WebProcessPool.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/OriginData/WebOriginDataManager.cpp: Removed.
        (WebKit::WebOriginDataManager::WebOriginDataManager): Deleted.
        (WebKit::WebOriginDataManager::getOrigins): Deleted.
        (WebKit::WebOriginDataManager::deleteEntriesForOrigin): Deleted.
        (WebKit::WebOriginDataManager::deleteEntriesModifiedBetweenDates): Deleted.
        (WebKit::WebOriginDataManager::deleteAllEntries): Deleted.
        * WebProcess/OriginData/WebOriginDataManager.h: Removed.
        * WebProcess/OriginData/WebOriginDataManager.messages.in: Removed.
        * WebProcess/OriginData/WebOriginDataManagerSupplement.h: Removed.
        (WebKit::WebOriginDataManagerSupplement::WebOriginDataManagerSupplement): Deleted.
        (WebKit::WebOriginDataManagerSupplement::~WebOriginDataManagerSupplement): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::~WebProcess):
        (WebKit::WebProcess::WebProcess): Deleted.
        (WebKit::WebProcess::getOrigins): Deleted.
        (WebKit::WebProcess::deleteEntriesForOrigin): Deleted.
        (WebKit::WebProcess::deleteEntriesModifiedBetweenDates): Deleted.
        (WebKit::WebProcess::deleteAllEntries): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:

2015-06-11  Matt Rajca  <mrajca@apple.com>

        Media Session: Add plumbing for media control event delivery.
        https://bugs.webkit.org/show_bug.cgi?id=145859

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageHandleMediaEvent):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleMediaEvent):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::handleMediaEvent):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-06-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Decoding fonts may return nil when using force click
        https://bugs.webkit.org/show_bug.cgi?id=145890

        Reviewed by Beth Dakin.

        [NSFontDescriptor fontDescriptorWithFontAttributes] might return nil, which
        causes the encoding of an NSFont to erroneously return true.

        * Shared/mac/ArgumentCodersMac.mm:
        (IPC::decode):

2015-06-11  Anders Carlsson  <andersca@apple.com>

        Reimplement WKOriginDataManager in terms of API::WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=145889

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetOriginDataManager):
        * UIProcess/API/C/WKOriginDataManager.cpp:
        (WKOriginDataManagerGetTypeID):
        (WKOriginDataManagerGetOrigins):
        (WKOriginDataManagerDeleteEntriesForOrigin):
        (WKOriginDataManagerDeleteEntriesModifiedBetweenDates):
        (WKOriginDataManagerDeleteAllEntries):

2015-06-11  Brent Fulgham  <bfulgham@apple.com>

        Full screen video space can be resized to 1pt wide
        https://bugs.webkit.org/show_bug.cgi?id=145895
        <rdar://problem/20907914>

        Reviewed by Simon Fraser.

        Prior to the upcoming OS X, full screen mode was not resizable. Now that it is,
        we need to set a minimum window width that is large enough to hold the media
        controls. This makes our full-screen video behave the same as the QuickTimeX player.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Active that new
        kWKLayoutModeDynamicSizeWithMinimumViewSize style, and set the minimum view size to
        be the width of our media controls, with 20 pixels of padding on either side.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Set the layout
        mode back to the default style.

2015-06-11  Jon Lee  <jonlee@apple.com>

        Update media controls JS and CSS to use picture-in-picture
        https://bugs.webkit.org/show_bug.cgi?id=145827
        <rdar://problem/21311576>

        Reviewed by Dean Jackson.

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

2015-06-11  Alex Christensen  <achristensen@webkit.org>

        Speculative build fix for GTK after r185463.

        * CMakeLists.txt:
        Remove WebPluginSiteDataManager.cpp from CMake build.

2015-06-11  Anders Carlsson  <andersca@apple.com>

        Remove WebPluginSiteDataManager
        https://bugs.webkit.org/show_bug.cgi?id=145884

        Reviewed by Andreas Kling.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::clearSiteData): Deleted.
        * PluginProcess/PluginProcess.h:
        * PluginProcess/PluginProcess.messages.in:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::clearSiteData): Deleted.
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::clearSiteData): Deleted.
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch): Deleted.
        (WebKit::PluginProcessProxy::didFinishLaunching): Deleted.
        (WebKit::PluginProcessProxy::didClearSiteData): Deleted.
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp: Removed.
        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::GetSitesWithDataState): Deleted.
        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::getSitesWithDataForNextPlugin): Deleted.
        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::didGetSitesWithDataForSinglePlugin): Deleted.
        (WebKit::WebPluginSiteDataManager::ClearSiteDataState::ClearSiteDataState): Deleted.
        (WebKit::WebPluginSiteDataManager::ClearSiteDataState::clearSiteDataForNextPlugin): Deleted.
        (WebKit::WebPluginSiteDataManager::ClearSiteDataState::didClearSiteDataForSinglePlugin): Deleted.
        (WebKit::WebPluginSiteDataManager::create): Deleted.
        (WebKit::WebPluginSiteDataManager::WebPluginSiteDataManager): Deleted.
        (WebKit::WebPluginSiteDataManager::~WebPluginSiteDataManager): Deleted.
        (WebKit::WebPluginSiteDataManager::invalidate): Deleted.
        (WebKit::WebPluginSiteDataManager::getSitesWithData): Deleted.
        (WebKit::WebPluginSiteDataManager::didGetSitesWithData): Deleted.
        (WebKit::WebPluginSiteDataManager::clearSiteData): Deleted.
        (WebKit::WebPluginSiteDataManager::didClearSiteData): Deleted.
        (WebKit::WebPluginSiteDataManager::didGetSitesWithDataForSinglePlugin): Deleted.
        (WebKit::WebPluginSiteDataManager::didGetSitesWithDataForAllPlugins): Deleted.
        (WebKit::WebPluginSiteDataManager::didClearSiteDataForSinglePlugin): Deleted.
        (WebKit::WebPluginSiteDataManager::didClearSiteDataForAllPlugins): Deleted.
        * UIProcess/Plugins/WebPluginSiteDataManager.h: Removed.
        (WebKit::WebPluginSiteDataManager::processPool): Deleted.
        (WebKit::WebPluginSiteDataManager::clearProcessPool): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        * WebKit2.xcodeproj/project.pbxproj:

2015-06-11  Anders Carlsson  <andersca@apple.com>

        Make WKWebsiteDataStoreRef backed by an API::WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=145882

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetPluginSiteDataManager):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerGetTypeID):
        (WKPluginSiteDataManagerGetSitesWithData):
        (WKPluginSiteDataManagerClearSiteData):
        (WKPluginSiteDataManagerClearAllSiteData):

2015-06-11  Antti Koivisto  <antti@apple.com>

        Network process crashes decoding invalid cache entry on 32bit system
        https://bugs.webkit.org/show_bug.cgi?id=145842
        rdar://problem/21228334

        Reviewed by Anders Carlsson.

        After cache scheme changes we may end up decoding invalid cache entries. This is by design,
        we should just fail decoding and delete these entries.

        However Decoder::bufferIsLargeEnoughToContain test in some cases would allow corrupted large
        sizes due to overflow in 32bit pointer math and we would crash when allocating a string.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCache::Coder<CString>::decode):
        (WebKit::NetworkCache::decodeStringText):
        (WebKit::NetworkCache::Coder<WebCore::CertificateInfo>::decode):
        (WebKit::NetworkCache::Coder<MD5::Digest>::encode):
        * NetworkProcess/cache/NetworkCacheCoders.h:
        * NetworkProcess/cache/NetworkCacheDecoder.cpp:
        (WebKit::NetworkCache::Decoder::Decoder):
        (WebKit::NetworkCache::Decoder::bufferIsLargeEnoughToContain):

            Reshuffle to avoid sum.

        (WebKit::NetworkCache::Decoder::decodeFixedLengthData):
        * NetworkProcess/cache/NetworkCacheDecoder.h:
        (WebKit::NetworkCache::Decoder::bufferSize):
        (WebKit::NetworkCache::Decoder::currentOffset):
        (WebKit::NetworkCache::Decoder::length): Deleted.
        (WebKit::NetworkCache::Decoder::isInvalid): Deleted.
        (WebKit::NetworkCache::Decoder::markInvalid): Deleted.

            Remove these, they are not really used or needed.

2015-06-10  Anders Carlsson  <andersca@apple.com>

        Rewrite WKPluginSiteDataManager using WebsiteDataStore functions
        https://bugs.webkit.org/show_bug.cgi?id=145868

        Reviewed by Antti Koivisto.

        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerGetSitesWithData):
        (WKPluginSiteDataManagerClearSiteData):
        (WKPluginSiteDataManagerClearAllSiteData):
        (toNPClearSiteDataFlags): Deleted.
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        (WebKit::WebPluginSiteDataManager::processPool):

2015-06-11  Antti Koivisto  <antti@apple.com>

        3% cold PLT regression from network cache on iOS
        https://bugs.webkit.org/show_bug.cgi?id=145694
        rdar://problem/21158245

        Reviewed by Chris Dumez.

        Cache does not help in cold page loads but it shouldn't' be hurting either. Write I/O needs to be toned down a bit.

        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::IOChannel):
        (WebKit::NetworkCache::IOChannel::open):

            Dispatch channels inherit their I/O priority from the target queue. Use background queue for write I/O.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::dispatchPendingReadOperations):
        (WebKit::NetworkCache::Storage::dispatchPendingWriteOperations):

            Only write one file at a time instead of maximum of three.

        (WebKit::NetworkCache::Storage::retrieve):

            For consistency with store prepend new entries here too.

        (WebKit::NetworkCache::Storage::store):

            Delay start of the first write operation by 1s.
            Prepend instead of append to the pending write deque so retrieveFromMemory lookup finds newest entries first in case of duplicates

        (WebKit::NetworkCache::Storage::traverse):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-06-10  Yongjun Zhang  <yongjun_zhang@apple.com>

        Don't send touch events on link preview.
        https://bugs.webkit.org/show_bug.cgi?id=145863

        Disable web touch event recognizer on link preview. We do the same when finding nodes in inspector or when long press gesture
        is recognized (by _cancelAllTouches). 

        Reviewed by Beth Dakin.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView willPresentPreviewViewController:forPosition:inSourceView:]): Remove touch event gesture recognizer on preview start.
        (-[WKContentView didDismissPreviewViewController:committing:]): Add the gesture recognizer back on dismiss.

2015-06-10  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore should handle removing plug-in data for individual records
        https://bugs.webkit.org/show_bug.cgi?id=145864

        Reviewed by Beth Dakin.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::deleteWebsiteDataForHostNames):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/PluginProcess.messages.in:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::deleteWebsiteDataForHostNames):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::deleteWebsiteDataForHostNames):
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didFinishLaunching):
        (WebKit::PluginProcessProxy::didDeleteWebsiteDataForHostNames):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):

2015-06-10  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore should handle removing plug-in data
        https://bugs.webkit.org/show_bug.cgi?id=145862

        Reviewed by Sam Weinig.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::deleteWebsiteData):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/PluginProcess.messages.in:
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::deleteWebsiteData):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::~PluginProcessProxy):
        (WebKit::PluginProcessProxy::deleteWebsiteData):
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didFinishLaunching):
        (WebKit::PluginProcessProxy::didDeleteWebsiteData):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):

2015-06-10  Brent Fulgham  <bfulgham@apple.com>

        [WK2] Do not indicate Media Keys are present when they are not
        https://bugs.webkit.org/show_bug.cgi?id=145713
        <rdar://problem/19752566>

        Reviewed by Dean Jackson.

        Correct the reporting of Media Key presence by checking for the actual
        media key file, not just the directory. Sometimes the directory will exist
        with no media key files (e.g., if a user navigates to the directory using
        the Finder).

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeMediaKeyFile): Moved earlier in file so it could be used by
        the 'mediaKeyOrigins' method.
        (WebKit::WebsiteDataStore::mediaKeyOrigins): Only indicate we have a media key
        origin if the folder actually contains the media key file.
        (WebKit::WebsiteDataStore::removeMediaKeys): Use the existing 'computeMediaKeyFile',
        rather than manually building the file from strings.

2015-06-09  Anders Carlsson  <andersca@apple.com>

        Support fetching website data
        https://bugs.webkit.org/show_bug.cgi?id=145828

        Reviewed by Darin Adler.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::plugins):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2015-06-10  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing the build for the GTK port with Clang.

        * UIProcess/gtk/InputMethodFilter.h: Add the <functional> header inclusion
        to avoid compilation errors due to missing std::function<>.

2015-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move KeyBindingTranslator from platform to WebKit2 layer
        https://bugs.webkit.org/show_bug.cgi?id=145840

        Reviewed by Martin Robinson.

        It's currently used only by WebKit2 in the UI process and it's
        another file built twice because of the GTK2 plugin process.

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        * UIProcess/gtk/KeyBindingTranslator.cpp: Renamed from Source/WebCore/platform/gtk/KeyBindingTranslator.cpp.
        (WebKit::backspaceCallback):
        (WebKit::selectAllCallback):
        (WebKit::cutClipboardCallback):
        (WebKit::copyClipboardCallback):
        (WebKit::pasteClipboardCallback):
        (WebKit::toggleOverwriteCallback):
        (WebKit::popupMenuCallback):
        (WebKit::showHelpCallback):
        (WebKit::deleteFromCursorCallback):
        (WebKit::moveCursorCallback):
        (WebKit::KeyBindingTranslator::KeyBindingTranslator):
        (WebKit::KeyBindingTranslator::commandsForKeyEvent):
        * UIProcess/gtk/KeyBindingTranslator.h: Renamed from Source/WebCore/platform/gtk/KeyBindingTranslator.h.
        (WebKit::KeyBindingTranslator::addPendingEditorCommand):

2015-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Get rid of GetEditorCommandsForKeyEvent sync message
        https://bugs.webkit.org/show_bug.cgi?id=145598

        Reviewed by Žan Doberšek.

        We are sending GetEditorCommandsForKeyEvent sync message from web
        process to the UI process for every key pressed. And if the
        keydown event doesn't handle the key, the message is sent again
        for the keypress event, so in many cases it happens twice per
        keypress. We can get the list of commands when the key press event
        happens in the web view, and send it to the web process as part of
        the keyboard event like mac port does. In the web process,
        commands not inserting text will be handled by keydown and the
        rest in keypress without having to use any other IPC message for that.

        * Shared/NativeWebKeyboardEvent.h: Add command list parameter to
        the constructor.
        * Shared/WebEvent.h: Add GTK specific constructor that receives a
        list of commands and whether the event was handled by input methods.
        (WebKit::WebKeyboardEvent::commands): Returns the list of commands.
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        Also copy the commands and handledByInputMethod member.
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent): Implement GTK
        specific constructor that receives a list of commands and whether
        the event was handled by input methods.
        (WebKit::WebKeyboardEvent::encode): Encode commands and handledByInputMethod.
        (WebKit::WebKeyboardEvent::decode): Decode commands and handledByInputMethod.
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent): Add
        command list parameter to the constructor.
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent): Use the new
        WebKeyboardEvent constructor and simplify the code. We don't need
        to explicitly set VK_PROCESSKEY as windows virtual key code when
        the event was handled by input methods. The WebCore event handler
        already does that.
        * Shared/gtk/WebEventFactory.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::getEditorCommandsForKeyEvent): Deleted.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp: Add a
        KeyBindingTranslator member.
        (webkitWebViewBaseKeyPressEvent): Use the new
        InputMethodFilter::filterKeyEvent() API and get the list of
        commands for the key when events was not handled by input methods.
        (webkitWebViewBaseKeyReleaseEvent): Use the new
        InputMethodFilter::filterKeyEvent() API.
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.messages.in: Remove GetEditorCommandsForKeyEvent message.
        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::handleKeyboardEvent): Call the
        completation handler.
        (WebKit::InputMethodFilter::handleKeyboardEventWithCompositionResults): Ditto.
        (WebKit::InputMethodFilter::filterKeyEvent): Use a completion
        handler for the task, so that the caller (the web view) can handle
        the keyboard event.
        * UIProcess/gtk/InputMethodFilter.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getEditorCommandsForKeyEvent): Deleted.
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::handleKeyboardEvent): Return earlier if
        the event was handled by input methods. And get the list of
        commands from the PlatformKeyboardEvent instead of sending a sync
        message to the UI process.
        (WebKit::WebEditorClient::handleInputMethodKeydown): If the event
        was handled by inpout methods, set the event as default handled so
        that the WebCore event handler sets VK_PROCESSKEY as windows
        virtual key code.
        (WebKit::WebEditorClient::getEditorCommandsForKeyEvent): Deleted.

2015-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK build after r185412.

        Add missing include.

        * NetworkProcess/cache/NetworkCacheFileSystem.cpp:

2015-06-10  Antti Koivisto  <antti@apple.com>

        NetworkCache: Delete old cache versions
        https://bugs.webkit.org/show_bug.cgi?id=145800

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::synchronize):
        * NetworkProcess/cache/NetworkCacheFileSystem.cpp: Added.
        (WebKit::NetworkCache::directoryEntryType):
        (WebKit::NetworkCache::traverseDirectory):

            Pass entry type as callback argument.

        (WebKit::NetworkCache::deleteDirectoryRecursively):

            Add helper.

        (WebKit::NetworkCache::fileTimes):
        (WebKit::NetworkCache::updateFileModificationTimeIfNeeded):
        * NetworkProcess/cache/NetworkCacheFileSystem.h: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheFileSystemPosix.h.

            Move code to cpp.

        (WebKit::NetworkCache::traverseDirectory): Deleted.
        (WebKit::NetworkCache::traverseCacheFiles): Deleted.
        (WebKit::NetworkCache::fileTimes): Deleted.
        (WebKit::NetworkCache::updateFileModificationTimeIfNeeded): Deleted.
        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h: Removed.
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::bootstrapFromNetworkCache):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::makeBlobDirectoryPath):
        (WebKit::NetworkCache::traverseRecordsFiles):

            Move cache hierarchy aware traversal code here from NetworkCacheFileSystem (for better layering).
            Rename for clarity.

        (WebKit::NetworkCache::deleteEmptyRecordsDirectories):

            Factor to a function.

        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):

            Use traverseRecordsFiles for traversal.

        (WebKit::NetworkCache::Storage::shrink):
        (WebKit::NetworkCache::Storage::deleteOldVersions):

            Delete version subdirectories with version number less than the current version.
            Remove code for clearing unversioned V1 caches. No one should have them.

        * NetworkProcess/cache/NetworkCacheStorage.h:
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        * WebKit2.xcodeproj/project.pbxproj:

2015-06-10  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Web Inspector is broken
        https://bugs.webkit.org/show_bug.cgi?id=145836

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: Thread the InspectorBackendCommands.js file as a separate
        dependency of InspectorGResourceBundle.xml. It can't be listed under the InspectorFiles
        variable and then searched via the CMake glob command because it probably won't exist
        at the time the command is run (since it's copied into the specified path), so it won't
        be listed among the dependencies at all.

2015-06-09  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::getSitesWithDataForNextPlugin):

2015-06-09  Anders Carlsson  <andersca@apple.com>

        Change the PluginProcessManager data fetching function to take a completion handler
        https://bugs.webkit.org/show_bug.cgi?id=145821

        Reviewed by Sam Weinig.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::fetchWebsiteData):
        (WebKit::PluginProcessManager::getSitesWithData): Deleted.
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::generateCallbackID):
        (WebKit::PluginProcessProxy::~PluginProcessProxy):
        (WebKit::PluginProcessProxy::fetchWebsiteData):
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        (WebKit::PluginProcessProxy::didFinishLaunching):
        (WebKit::PluginProcessProxy::didGetSitesWithData):
        (WebKit::PluginProcessProxy::getSitesWithData): Deleted.
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::getSitesWithDataForNextPlugin):

2015-06-09  Anders Carlsson  <andersca@apple.com>

        Add code to keep track of plug-in data host names in website data records
        https://bugs.webkit.org/show_bug.cgi?id=145818

        Reviewed by Andreas Kling.

        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::encode):
        (WebKit::WebsiteData::decode):
        * Shared/WebsiteData/WebsiteData.h:
        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::displayNameForPluginDataHostName):
        (WebKit::WebsiteDataRecord::addPluginDataHostName):
        (WebKit::WebsiteDataRecord::displayNameForCookieHostName): Deleted.
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):

2015-06-09  Anders Carlsson  <andersca@apple.com>

        Add Plug-in type declarations to WKWebsiteDataRecord and friends
        https://bugs.webkit.org/show_bug.cgi?id=145816

        Reviewed by Andreas Kling.

        * Shared/WebsiteData/WebsiteDataTypes.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h:

2015-06-09  Antti Koivisto  <antti@apple.com>

        REGRESSION(r185262): NetworkCache is in wrong location on OS X
        https://bugs.webkit.org/show_bug.cgi?id=145812

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
        (WebKit::WebProcessPool::isNetworkCacheEnabled):

            Make sure static functions that use NSUserDefaults call registerUserDefaultsIfNeeded() first.

2015-06-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Crash when passing Symbol to NPAPI plugin objects
        https://bugs.webkit.org/show_bug.cgi?id=145798

        Reviewed by Darin Adler.

        When the symbol is passed, `propertyName.publicName()` becomes nullptr.
        So dereferencing it causes null dereference errors.
        At first, this bug appears in the https://bugs.webkit.org/show_bug.cgi?id=145556,
        plugin[@@toStringTag] ("string" + plugin) causes SEGV in plugins/embed-inside-object.html test.

        This patch avoids it by early returning when the symbols are passed.
        Methods for symbols are not implemented in the NPObject side, so it works correctly.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::npIdentifierFromIdentifier):
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::deleteProperty):
        (WebKit::JSNPObject::propertyGetter):
        (WebKit::JSNPObject::methodGetter):

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

        [SOUP] Network Cache: Give more priority to reads over writes in IO WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=145791

        Reviewed by Sergio Villar Senin.

        Keep using G_PRIORITY_DEFAULT for reads, but use
        G_PRIORITY_DEFAULT_IDLE for writes now.

        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::outputStreamWriteReadyCallback): Use
        G_PRIORITY_DEFAULT_IDLE for write async operations.
        (WebKit::NetworkCache::IOChannel::write): Pass
        G_PRIORITY_DEFAULT_IDLE to runTaskInQueue().

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

        [SOUP] Network Cache: run the IO completion handler in the given queue instead of the whole operation
        https://bugs.webkit.org/show_bug.cgi?id=145797

        Reviewed by Žan Doberšek.

        I misunderstood what the WorkQueue parameter meant in the IO
        channel operations. It's the queue where the completion handler
        should be run, not the whole operation. Since our operations are
        already non-blocking, we can just run the read/writes in the main
        thread, and schedule the completion handler in the given work
        queue when the operation finishes.

        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::inputStreamReadReadyCallback):
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::readSync):
        (WebKit::NetworkCache::outputStreamWriteReadyCallback):
        (WebKit::NetworkCache::IOChannel::write):

2015-06-09  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r185357): Fix build for iOS 8.x

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (fallbackIconForFile): Add cast prior to iOS 9.

2015-06-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Fix a crash on MiniBrowser when running on debug mode
        https://bugs.webkit.org/show_bug.cgi?id=145793

        Reviewed by Carlos Garcia Campos.

        r185314 missed to initialize parameters.diskCacheDirectory with configuration's one.

        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess):

2015-06-09  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Fix the style issues in cmake project files
        https://bugs.webkit.org/show_bug.cgi?id=145755

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:

2015-06-02  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] UI process memory spike, hang when uploading a very large JPEG

        <https://bugs.webkit.org/show_bug.cgi?id=145567>
        <rdar://problem/21206699>

        When uploading an image, we generate a thumbnail to use for an icon
        that sits next to the control. To do this, we load the image and draw
        it into a thumbnail-sized canvas. This can be very expensive for large
        images.

        To fix this, we'll use CGImageSource API, which will allow us to get
        any existing thumbnail that exists in the source file.

        Reviewed by Darin Adler.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (squareCropRectForSize):
        Use std::round, based on Darin's review feedback that a) rintf is
        incorrect in 64-bit systems where CGFloat is a double, b) rintf uses a
        variable rounding mode, which is undesirable.
        (squareImage):
        Changed to take a CGImageRef.
        Use RetainPtr and +[UIImage imageWithCGImage:] to match other code in
        this file.
        (thumbnailSizedImageForImage):
        Changed to take a CGImageRef and to use iconSideLength.
        (iconForImageFile):
        Create an image source for the file, then use CGImageSource API to
        generate a thumbnail.
        (-[_WKImageFileUploadItem initWithFileURL:originalImage:]): Deleted.
        (-[_WKImageFileUploadItem displayImage]):
        Use iconForImageFile() rather than trying to generate an icon from the
        UIImage.
        (-[WKFileUploadPanel _uploadItemForImageData:imageName:successBlock:failureBlock:]):
        Removed originalImage parameter; _WKImageFileUploadItem no longer uses
        it.
        (-[WKFileUploadPanel _uploadItemForJPEGRepresentationOfImage:successBlock:failureBlock:]):
        (-[WKFileUploadPanel _uploadItemForImage:withAssetURL:successBlock:failureBlock:]):

2015-06-08  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Use generics in framework headers
        https://bugs.webkit.org/show_bug.cgi?id=145781

        Reviewed by Sam Weinig.

        * mac/postprocess-framework-headers.sh: Use the parameter to WK_ARRAY and WK_SET.

2015-06-08  Chris Dumez  <cdumez@apple.com>

        Access GCController instance via GCController::singleton() instead of a free function
        https://bugs.webkit.org/show_bug.cgi?id=145776

        Reviewed by Darin Adler.

        Access GCController instance via GCController::singleton() instead of a
        free function as per coding style and for consistency with other
        singleton classes in the codebase.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::garbageCollectJavaScriptObjects):
        (WebKit::InjectedBundle::garbageCollectJavaScriptObjectsOnAlternateThreadForDebugging):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::terminate):
        (WebKit::WebProcess::didClose):
        (WebKit::WebProcess::garbageCollectJavaScriptObjects):
        (WebKit::WebProcess::setJavaScriptGarbageCollectorTimerEnabled):

2015-06-08  Anders Carlsson  <andersca@apple.com>

        Include IndexedDB databases in -[WKWebsiteDataStore allWebsiteDataTypes]
        https://bugs.webkit.org/show_bug.cgi?id=145775

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore allWebsiteDataTypes]):

2015-06-08  Anders Carlsson  <andersca@apple.com>

        Move the snapshot layer contents SPI to the web view
        https://bugs.webkit.org/show_bug.cgi?id=145771

        Reviewed by Geoffrey Garen.

        We need to potentially ask the web page to take a snapshot of the current item,
        so move the SPI to WKWebView and name it appropriately.

        * UIProcess/API/Cocoa/WKBackForwardListItem.mm:
        (-[WKBackForwardListItem _snapshotLayerContents]): Deleted.
        * UIProcess/API/Cocoa/WKBackForwardListItemPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotLayerContentsForBackForwardListItem:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-06-08  Brady Eidson  <beidson@apple.com>

        Completely remove all IDB properties/constructors when it is disabled at runtime.
        rdar://problem/18429374 and https://bugs.webkit.org/show_bug.cgi?id=137034

        Reviewed by Geoffrey Garen.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Enable IDB at runtime if it's enabled at compile time.

2015-06-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Performs DNS prefetch when a proxy is configured (information leak)
        https://bugs.webkit.org/show_bug.cgi?id=145542

        Reviewed by Alexey Proskuryakov.

        Add documentation to webkit_web_context_prefetch_dns to indicate that the function does
        nothing if the system configuration indicates we should use a proxy to resolve the host.

        * UIProcess/API/gtk/WebKitWebContext.cpp:

2015-06-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r185251): [GTK] webkit_web_context_set_disk_cache_directory() doesn't work when using shared secondary process model after r185251
        https://bugs.webkit.org/show_bug.cgi?id=145751

        Reviewed by Darin Adler.

        In r185251 the CFNetwork cache was disabled in the web process,
        but it also removed the disk cache directory web process
        initialization parameter. While we support networking in the web
        process when shared secondary process model is used, the network
        cache should still work. We can remove this if we eventually
        switch to use the network process unconditionally.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Encode disk cache directory.
        (WebKit::WebProcessCreationParameters::decode): Decode disk cache directory.
        * Shared/WebProcessCreationParameters.h: Bring back disk cache directory only for soup.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Initialize disk cache directory parameter.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Use the disck cache directory parameter again.

2015-06-08  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Remove the unused scroll function from WebPageGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145756

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::scroll): Deleted.

2015-06-08  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        REGRESSION(r185262): [EFL] Modify legacyPlatformDefaultNetworkCacheDirectory() according to network cache
        https://bugs.webkit.org/show_bug.cgi?id=145752

        Reviewed by Carlos Garcia Campos.

        EFL port needs to add different prefix for network cache directory since r185262.
        Modify it basedon GTK port fix.

        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory):

2015-06-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r185262): [GTK] webkit_web_context_set_disk_cache_directory() doesn't work after r185262
        https://bugs.webkit.org/show_bug.cgi?id=145735

        Reviewed by Darin Adler.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess): Use
        the directory name to clear the old cache, since the disk cache
        subdirectory is now added in the UI process.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_disk_cache_directory): Update the
        WebProcessPool configuration to override the disk cache directory.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess): Use the
        configuration to get the disk cache directory.
        (WebKit::WebProcessPool::WebProcessPool): Remove
        m_diskCacheDirectory member initialization.
        * UIProcess/WebProcessPool.h: Remove m_diskCacheDirectory member.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory):
        Append the disk cache subdirectory.

2015-06-07  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][GTK] Fix build  break since r185262
        https://bugs.webkit.org/show_bug.cgi?id=145724

        Unreviewed, fix build break for EFL and GTK ports.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultLocalStorageDirectory):
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::defaultNetworkCacheDirectory):
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory):
        (WebKit::WebProcessPool::platformDefaultDiskCacheDirectory): Deleted.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2015-06-06  Dan Bernstein  <mitz@apple.com>

        Don’t enable manual sandboxing in the iOS Simulator. This should fix all the tests timing out.

        * Configurations/DebugRelease.xcconfig:

2015-06-06  Dan Bernstein  <mitz@apple.com>

        [iOS] Can’t debug with Development XPC services due to automatic sandboxing
        https://bugs.webkit.org/show_bug.cgi?id=145731

        Rubber-stamped by Darin Adler.

        In iOS, the XPC services are automatically sandboxed based on their entitlements. The
        sandbox doesn’t allow them to re-exec, which is necessary for linking against engineering
        builds of the WebKit frameworks placed in a non-system location.

        The solution is to opt Engineering builds into manual sandboxing.

        * Configurations/BaseTarget.xcconfig:
        - Add ENABLE_MANUAL_SANDBOXING to
          GCC_PREPROCESSOR_DEFINITIONS when WK_MANUAL_SANDBOXING_ENABLED is YES.
        - Set WK_MANUAL_SANDBOXING_ENABLED to YES for OS X, because we always use manual
          sandboxing on that platform.

        * Configurations/DebugRelease.xcconfig: Removed unused definition of DEBUG_OR_RELEASE. Set
          WK_MANUAL_SANDBOXING_ENABLED to YES for all engineering builds.

        * Configurations/BaseXPCService.xcconfig: Define CODE_SIGN_ENTITLEMENTS for iOS to be empty
          if the service is not installed; to use the base entitlements file from Configurations if
          manual sandboxing is not enabled; and to use a derived entitlements file, which doesn’t
          specify a sandbox profile, if manual sandboxing is enabled.

        * Configurations/DatabaseService.Development.xcconfig: Define
          WK_XPC_SERVICE_IOS_ENTITLEMENTS_BASE and let BaseXPCService.xcconfig define
          CODE_SIGN_ENTITLEMENTS for iOS.

        * Configurations/DatabaseService.xcconfig: Ditto.
        * Configurations/NetworkService.Development.xcconfig: Ditto.
        * Configurations/NetworkService.xcconfig: Ditto.
        * Configurations/WebContentService.Development.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Ditto.

        * WebKit2.xcodeproj/project.pbxproj:
        - In the Derived Sources target, added a Derive Entitlements for Manual Sandboxing script
          build phase. When building for iOS with manual sandboxing enabled, it creates copies of
          the iOS entitlements files with a -no-sandbox suffix and the seatbelt-profiles key
          removed.
        - In the WebKit target, added a Copy iOS Sandbox Profiles for Manual Sandboxing script build
          phase. When building for iOS with manual sandboxing enabled, it copies the iOS sandbox
          profiles into the framework, so that the services can apply them to themselves at runtime.

        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::initializeSandbox): Use ENABLE(MANUAL_SANDBOXING) and don’t define it
        here.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox): Use ENABLE(MANUAL_SANDBOXING) instead of defining
        and using ENABLE_MANUAL_WEBPROCESS_SANDBOXING here.

2015-06-06  Anders Carlsson  <andersca@apple.com>

        Remove support from getting plug-in information from Carbon resources
        https://bugs.webkit.org/show_bug.cgi?id=145730

        Reviewed by Dan Bernstein.

        No current plug-in versions use this feature, and both Chrome and Mozilla for
        Mac stopped looking at Carbon resources years ago.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        (WebKit::ResourceMap::ResourceMap): Deleted.
        (WebKit::ResourceMap::~ResourceMap): Deleted.
        (WebKit::ResourceMap::isValid): Deleted.
        (WebKit::getStringListResource): Deleted.
        (WebKit::getPluginInfoFromCarbonResources): Deleted.

2015-06-05  Anders Carlsson  <andersca@apple.com>

        Only allow plug-ins to create custom MIME property lists on older versions of OS X
        https://bugs.webkit.org/show_bug.cgi?id=145716

        Reviewed by Dan Bernstein.

        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getMIMETypesFromPluginBundle):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:

2015-06-05  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Limit the number of vnodes used by the WebContent processes
        https://bugs.webkit.org/show_bug.cgi?id=145672
        <rdar://problem/21126637>

        Reviewed by Antti Koivisto.

        Have the WebContent process register a vnode pressure handler on iOS,
        which calls the memory pressure handler.

        On non-critical pressure, it will prune dead resources from the memory
        cache, which should free up some vnodes. On critical pressure, the
        handler will clear the PageCache and do a JS GC, which should free even
        more vnodes.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2015-06-05  Anders Carlsson  <andersca@apple.com>

        Fix refacto, don't put IndexedDB databases in the cache directory
        https://bugs.webkit.org/show_bug.cgi?id=145714

        Reviewed by Antti Koivisto.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):

2015-06-05  Anders Carlsson  <andersca@apple.com>

        Make the network cache directory part of WKContextConfigurationRef
        https://bugs.webkit.org/show_bug.cgi?id=145711

        Reviewed by Antti Koivisto.

        Also, make the UI process be in control of where we place the new network cache.
        When using the Modern WebKit API, put the cache in ~/Library/Caches/<Bundle ID>/WebKit/NetworkCache,
        and put the cache in ~/Library/Caches/<Bundle ID>/WebKitCache otherwise (this is just for Safari).

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::open):
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDiskCacheDirectory): Deleted.
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCopyDiskCacheDirectory):
        (WKContextConfigurationSetDiskCacheDirectory):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::WebProcessPool::legacyPlatformDefaultNetworkCacheDirectory):
        (WebKit::WebProcessPool::isNetworkCacheEnabled):
        (WebKit::WebProcessPool::platformDefaultDiskCacheDirectory): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::diskCacheDirectory): Deleted.
        * UIProcess/WebProcessPool.h:

2015-06-05  Anders Carlsson  <andersca@apple.com>

        Make the application cache directory part of WKContextConfigurationRef
        https://bugs.webkit.org/show_bug.cgi?id=145704

        Reviewed by Geoffrey Garen.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetApplicationCacheDirectory): Deleted.
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCopyApplicationCacheDirectory):
        (WKContextConfigurationSetApplicationCacheDirectory):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::applicationCacheDirectory): Deleted.
        * UIProcess/WebProcessPool.h:

2015-06-05  Mark Lam  <mark.lam@apple.com>

        finally blocks should not set the exception stack trace when re-throwing the exception.
        https://bugs.webkit.org/show_bug.cgi?id=145525

        Reviewed by Geoffrey Garen.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::reportException):
        - Changed to use the new Exception object.

2015-06-05  Anders Carlsson  <andersca@apple.com>

        Disable the CFNetwork cache in the web process
        https://bugs.webkit.org/show_bug.cgi?id=145700
        rdar://problem/20243343

        Reviewed by Geoffrey Garen.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::open):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters): Deleted.
        (WebKit::WebProcessCreationParameters::encode): Deleted.
        (WebKit::WebProcessCreationParameters::decode): Deleted.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Deleted.
        (WebKit::WebProcess::initializeWebProcess): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformClearResourceCaches):
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::platformSetCacheModel): Deleted.
        (WebKit::WebProcess::platformTerminate): Deleted.

2015-06-05  Anders Carlsson  <andersca@apple.com>

        Consolidate default website data directory computations
        https://bugs.webkit.org/show_bug.cgi?id=145698

        Reviewed by Andreas Kling.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultApplicationCacheDirectory):
        (API::WebsiteDataStore::defaultNetworkCacheDirectory):
        (API::WebsiteDataStore::defaultIndexedDBDatabaseDirectory):
        (API::WebsiteDataStore::defaultLocalStorageDirectory):
        (API::WebsiteDataStore::defaultMediaKeysStorageDirectory):
        (API::WebsiteDataStore::defaultWebSQLDatabaseDirectory):
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        (API::applicationCacheDirectory): Deleted.

2015-06-01  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] Uploading an animated GIF from the photo library uploads a JPEG

        <https://bugs.webkit.org/show_bug.cgi?id=145539>
        <rdar://problem/19760877

        Selecting a photo from the photo library using UIImagePickerController
        results in an NSDictionary with image info and a UIImage with the
        image. It's not possible to get the original image data from the
        UIImage, only a PNG or JPEG representation, so we were getting a JPEG
        representation and uploading that to the server. For animated GIFs,
        this meant a JPEG representation of the first frame.

        To fix this, we'll get the asset URL, if available, and use the Photos
        API to query for the original image data.

        Reviewed by Andy Estes and Joe Pecoraro.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        Soft link the Photos framework.

        (-[WKFileUploadPanel _uploadItemForImageData:originalImage:imageName:successBlock:failureBlock:]):
        Save the image's data to a temporary location, and create a
        _WKImageFileUploadItem. Code moved from
        -_uploadItemFromMediaInfo:successBlock:failureBlock:.

        (-[WKFileUploadPanel _uploadItemForJPEGRepresentationOfImage:successBlock:failureBlock:]):
        Get a JPEG representation of the UIImage, and create an upload item
        from that data.

        (uploadImageNameFromUTI):
        Return a filename for the uploaded image based on the UTI.

        (-[WKFileUploadPanel _uploadItemForImage:withAssetURL:successBlock:failureBlock:]):
        Fetch the photo asset with the given asset URL. Create an image manager
        object, and request the image data for the photo asset. Create an
        upload item from that data. If we fail, fall back to a JPEG
        representation.

        (-[WKFileUploadPanel _uploadItemFromMediaInfo:successBlock:failureBlock:]):
        Return early if the media item is not an image type. If it is, and we
        have an asset URL, try to create an upload item for the native image.
        If we don't have an asset URL, use a JPEG representation of the image.

2015-06-04  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        REGRESSION(r185091): Crash happens on indexdb tests
        https://bugs.webkit.org/show_bug.cgi?id=145549

        Reviewed by Darin Adler.

        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp: Remove leakRef() use.
        (WebKit::WebIDBServerConnection::didCreateObjectStore):
        (WebKit::WebIDBServerConnection::didCreateIndex):
        (WebKit::WebIDBServerConnection::didDeleteIndex):
        (WebKit::WebIDBServerConnection::didPutRecord):
        (WebKit::WebIDBServerConnection::didGetRecord):
        (WebKit::WebIDBServerConnection::didOpenCursor):
        (WebKit::WebIDBServerConnection::didAdvanceCursor):
        (WebKit::WebIDBServerConnection::didIterateCursor):
        (WebKit::WebIDBServerConnection::didCount):
        (WebKit::WebIDBServerConnection::didDeleteRange):
        (WebKit::WebIDBServerConnection::didClearObjectStore):
        (WebKit::WebIDBServerConnection::didDeleteObjectStore):
        (WebKit::WebIDBServerConnection::didChangeDatabaseVersion):

2015-06-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION: dragged node in the DOM Tree isn't positioned correctly
        https://bugs.webkit.org/show_bug.cgi?id=143912

        Reviewed by Simon Fraser.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage):
        When using the WKWebView, convert the position from the WKView's
        coordinate system to the WKWebView's.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView draggingUpdated:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dragImageForView:withImage:at:linkDrag:]):
        Whitespace cleanup in original drag code.

2015-06-04  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * UIProcess/API/Cocoa/WKErrorPrivate.h:

2015-06-04  Dan Bernstein  <mitz@apple.com>

        Renamed the WebKit2SandboxProfiles target to Sandbox Profiles.

        Rubber-stamped by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Renamed the target. For now, added an aggregate
        target with the old name that depends on the renamed target. We can remove it once the build
        system doesn’t reference to old name.

2015-06-03  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose interruptedForPolicyChangeError
        https://bugs.webkit.org/show_bug.cgi?id=145627

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKErrorPrivate.h: Added WKErrorCodeFrameLoadInterruptedByPolicyChange with the same value as
        kWKErrorCodeFrameLoadInterruptedByPolicyChange.

2015-06-04  Chris Dumez  <cdumez@apple.com>

        [WK2] Prune more resources from the MemoryCache before process suspension
        https://bugs.webkit.org/show_bug.cgi?id=145633

        Reviewed by Andreas Kling.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::processWillSuspendImminently):
        (WebKit::NetworkProcess::prepareToSuspend):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformLowMemoryHandler):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializeProcess):

        Update low memory handler prototype to match WebCore changes.

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

        Pass Synchronous::Yes argument to MemoryPressureHandler::releaseMemory()
        to request that the memory is free up synchronously (e.g. synchronous
        JS garbage collection) as the process is about to be suspended.
        Previously, the memory pressure handler was trying to detect this case
        by checking if the system was really under memory pressure but this was
        a bit hackish and it wouldn't work if the process happened to get
        suspended while the system was under memory pressure.

2015-06-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [Wayland] Build is broken on trunk
        https://bugs.webkit.org/show_bug.cgi?id=142879

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::makeContextCurrent): When Wayland target
        is enabled GLNativeWindowType is not an u_int64 type.
        Cast contextID to avoid a build failure.

2015-06-03  Dan Bernstein  <mitz@apple.com>

        Made WKBackForwardListItemPrivate.h a private header after it was added as internal in r185183.

        * WebKit2.xcodeproj/project.pbxproj:

2015-06-03  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [EFL] Implement window_object_cleared callback in EwkPageClient.
        https://bugs.webkit.org/show_bug.cgi?id=145603

        Reviewed by Gyuyoung Kim.

        We need to provide right timing for custom JS API that may need to work at the beginning of the page.

        * UIProcess/API/efl/tests/extensions/extension_sample.cpp:
        * WebProcess/InjectedBundle/API/efl/ewk_page.cpp:
        (EwkPage::EwkPage):
        (EwkPage::didStartProvisionalLoadForFrame):
        (EwkPage::didClearWindowObjectForFrame):
        (EwkPage::didFinishDocumentLoadForFrame):
        * WebProcess/InjectedBundle/API/efl/ewk_page.h:
        * WebProcess/InjectedBundle/API/efl/ewk_page_private.h:

2015-06-03  Anders Carlsson  <andersca@apple.com>

        Add SPI that returns the snapshot layer contents for a given back/forward list item
        https://bugs.webkit.org/show_bug.cgi?id=145621

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKBackForwardListItem.mm:
        (-[WKBackForwardListItem _snapshotLayerContents]):
        * UIProcess/API/Cocoa/WKBackForwardListItemInternal.h:
        * UIProcess/API/Cocoa/WKBackForwardListItemPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKBackForwardListItemInternal.h.
        * WebKit2.xcodeproj/project.pbxproj:

2015-06-02  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [EFL] Implement load_started callback in EwkPageClient.
        https://bugs.webkit.org/show_bug.cgi?id=145545

        Reviewed by Gyuyoung Kim.

        We need to provide load_started callback to web extension module.

        * UIProcess/API/efl/tests/extensions/extension_sample.cpp:
        * WebProcess/InjectedBundle/API/efl/ewk_page.cpp:
        (EwkPage::EwkPage):
        (EwkPage::remove):
        (EwkPage::didStartProvisionalLoadForFrame):
        (EwkPage::didFinishDocumentLoadForFrame):
        * WebProcess/InjectedBundle/API/efl/ewk_page.h:
        * WebProcess/InjectedBundle/API/efl/ewk_page_private.h:

2015-06-02  Gavin Barraclough  <barraclough@apple.com>

        PDFs always think they're visible on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=145493
        <rdar://problem/19668879>

        Reviewed by Andreas Kling & Sam Weinig.

        The problem here is that WKContentView is currently responsible for notifying the WebPageProxy
        that the visibility may have changed, but when a PDF isn't showing the WKContentView isn't in
        the view hierarchy and doesn't receive the didMoveToWindow notifications – and the WKPDFView
        (which is in the view hierarchy) does not listen for these events.

        Visibility of the page should really just track the visibility of the WKWebView (and when
        actually assessing the visibility it largely does - the page client checks the web view's
        visibility, bar a FIXME, and the foreground/background check, which needs to change).
        So notifications should really just come from the WKWebView.

        The WKWebView already listens for the didMoveToWindow notification, it just was only updating
        the IsInWindow flag. Instead just update all flags, and the call to viewStateDidChange from
        WKContentView can just be removed.

        There is one problem with this in that it would reverse the order of the calls to
        viewStateDidChange & _updateForScreen:, which would mean the the view would become visible before
        updating the screen pixel density. To fix this, moving the call to _updateForScreen:
        to willMoveToWindow:, to ensure it occurs before the page becomes visible.

        This will also change behavior on Mac for WKWebView clients, in coalescing all view state changes
        within the didMoveToWindow call. This is the direction we intended to go in anyway (the plan is
        to remove the mayHaveChanged argument from viewStateDidChange - we're currently adding unnecessary
        IPC traffic).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView didMoveToWindow]):
            - should update all view state flags.
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView didMoveToWindow]):
            - added to match WKWebView.mm, for WebKitTestRunner.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView willMoveToWindow:]):
            - should _updateForScreen:
        (-[WKContentView didMoveToWindow]): Deleted.
            - functionality moved to -[WKWebView didMoveToWindow], -[WKContentView didMoveToWindow].

2015-06-02  Chris Dumez  <cdumez@apple.com>

        [iOS][WK2] Always mark layers as volatile for background pages
        https://bugs.webkit.org/show_bug.cgi?id=145547
        <rdar://problem/20663184>

        Reviewed by Simon Fraser.

        We previously marked layers as volatile when the WebProcess was about
        to be suspended. Most of the time the WebProcess gets suspended when a
        page goes into the background. However, it is not always true (see
        radar), in which case the layers won't be marked as volatile and use
        memory even though they are not visible.

        We now mark layers as volatile as soon as the page goes into the
        background, instead of relying on the WebProcess suspension mechanism
        to do so.

        A new ApplicationDidEnterBackground IPC message from the UIProcess to
        the WebProcess is added (in addition to the pre-existing
        ApplicationWillEnterForeground one). When the WebProcess receives this
        message, it will freeze the layer tree state and mark the layers as
        volatile (with a timer to keep retrying if needed), similarly to what
        is already done in WebProcess::actualPrepareToSuspend().
        When the ApplicationWillEnterForeground is received, we unfreeze the
        layer tree state. The layers' volatile state will be automatically
        updated when they are displayed (see setBufferVolatility() call in
        RemoteLayerBackingStore::display()).

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _applicationDidEnterBackground:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackground):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setLayerTreeStateIsFrozen):
        (WebKit::WebPage::markLayersVolatileImmediatelyIfPossible):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::volatilityTimerFired):
        (WebKit::WebPage::applicationDidEnterBackground):
        (WebKit::WebPage::applicationWillEnterForeground):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::markAllLayersVolatileIfPossible):
        (WebKit::WebProcess::setAllLayerTreeStatesFrozen):

2015-06-02  Brady Eidson  <beidson@apple.com>

        WebKit policy delegate should suggest if a navigation should be allowed to open URLs externally.
        rdar://problem/21025301 and https://bugs.webkit.org/show_bug.cgi?id=145280
        
        Reviewed by Alex Christensen.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::clickedLink):
        
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        (WebKit::PluginView::loadURL):
        
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle):
        
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchCreatePage):
        
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openInNewTab):
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLInFrame):
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::navigateToPDFLinkWithSimulatedClick):

2015-06-02  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        REGRESSION(r185091): Crash happens on indexdb tests
        https://bugs.webkit.org/show_bug.cgi?id=145549

        Reviewed by Csaba Osztrogonác.

        r185091 caused crash on some indexeddb tests. The crash happens because IDBDatabaseError::create() doesn't
        dereference count by using ptr(). It makes a crash when dereferencing on ~Ref() destructor. To fix this issue,
        this patch uses leakRef() instead of ptr().

        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        (WebKit::WebIDBServerConnection::didCreateObjectStore):
        (WebKit::WebIDBServerConnection::didCreateIndex):
        (WebKit::WebIDBServerConnection::didDeleteIndex):
        (WebKit::WebIDBServerConnection::didPutRecord):
        (WebKit::WebIDBServerConnection::didGetRecord):
        (WebKit::WebIDBServerConnection::didOpenCursor):
        (WebKit::WebIDBServerConnection::didAdvanceCursor):
        (WebKit::WebIDBServerConnection::didIterateCursor):
        (WebKit::WebIDBServerConnection::didCount):
        (WebKit::WebIDBServerConnection::didDeleteRange):
        (WebKit::WebIDBServerConnection::didClearObjectStore):
        (WebKit::WebIDBServerConnection::didDeleteObjectStore):
        (WebKit::WebIDBServerConnection::didChangeDatabaseVersion):

2015-06-01  Enrica Casucci  <enrica@apple.com>

        [iOS] Hardware Keyboard: All combinations for arrow keys with Shift do not extend the selection.
        https://bugs.webkit.org/show_bug.cgi?id=145538
        rdar://problem/18504199

        Reviewed by Darin Adler.

        The extend parameter was ignored in all the functions below.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _moveUp:withHistory:]):
        (-[WKContentView _moveDown:withHistory:]):
        (-[WKContentView _moveLeft:withHistory:]):
        (-[WKContentView _moveRight:withHistory:]):
        (-[WKContentView _moveToStartOfWord:withHistory:]):
        (-[WKContentView _moveToStartOfParagraph:withHistory:]):
        (-[WKContentView _moveToStartOfLine:withHistory:]):
        (-[WKContentView _moveToStartOfDocument:withHistory:]):
        (-[WKContentView _moveToEndOfWord:withHistory:]):
        (-[WKContentView _moveToEndOfParagraph:withHistory:]):
        (-[WKContentView _moveToEndOfLine:withHistory:]):
        (-[WKContentView _moveToEndOfDocument:withHistory:]):

2015-06-01  Anders Carlsson  <andersca@apple.com>

        Use xpc_connection_set_oneshot_instance where possible
        https://bugs.webkit.org/show_bug.cgi?id=145535
        rdar://problem/21109994

        Reviewed by Sam Weinig.

        Use xpc_connection_set_oneshot_instance where possible; this will make sure that the 
        web process instances go away when the web process exits.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        (WebKit::connectToReExecService):

2015-06-01  Enrica Casucci  <enrica@apple.com>

        [iOS] Hardware Keyboard: Command + left arrow does not work.
        https://bugs.webkit.org/show_bug.cgi?id=145531
        rdar://problem/18576402

        Reviewed by Anders Carlsson.

        We were calling a non existent command (moveToStartOfLine) instead of
        moveToBeginningOfLine.

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

2015-06-01  Brady Eidson  <beidson@apple.com>

        Add WKTR support for "should open external URLs".
        https://bugs.webkit.org/show_bug.cgi?id=145505

        Reviewed by Darin Adler.

        Expose C-spi to allow WKTR to set this bit on new loads:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURLWithShouldOpenExternalURLsPolicy):
        * UIProcess/API/C/WKPagePrivate.h:
        
        Expose the bit on NavigationAction for the policy delegate:        
        * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp:
        (WKBundleNavigationActionGetShouldOpenExternalURLs):
        * WebProcess/InjectedBundle/API/c/WKBundleNavigationActionPrivate.h: Copied from Tools/WebKitTestRunner/WorkQueueManager.h.

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
        (WebKit::InjectedBundleNavigationAction::shouldOpenExternalURLs):
    
        * WebKit2.xcodeproj/project.pbxproj:

2015-06-01  Gavin Barraclough  <barraclough@apple.com>

        PDFs always think they're visible on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=145493
        <rdar://problem/19668879>

        Unreviewed roll-out.

        Temporarily reverting this change – will need a workaround for test harness craziness.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView didMoveToWindow]):
        (-[WKWebView setOpaque:]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView willMoveToWindow:]):
        (-[WKContentView didMoveToWindow]):
        (-[WKContentView browsingContextController]):

2015-06-01  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Remove unused const variable from EwkView.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145512

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/EwkView.cpp:

2015-06-01  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Suppress unused parameter warnings in WebKit2 and TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=145264

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt: Use COMPILE_FLAGS instead of CMAKE_<C|CXX>_FLAGS to put -Wno-unused-parameter after -Wextra.

2015-05-31  Gavin Barraclough  <barraclough@apple.com>

        PDFs always think they're visible on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=145493
        <rdar://problem/19668879>

        Reviewed by Andreas Kling.

        The problem here is that WKContentView is currently responsible for notifying the WebPageProxy
        that the visibility may have changed, but when a PDF isn't showing the WKContentView isn't in
        the view hierarchy and doesn't receive the didMoveToWindow notifications – and the WKPDFView
        (which is in the view hierarchy) does not listen for these events.

        Visibility of the page should really just track the visibility of the WKWebView (and when
        actually assessing the visibility it largely does - the page client checks the web view's
        visibility, bar a FIXME, and the foreground/background check, which needs to change).
        So notifications should really just come from the WKWebView.

        The WKWebView already listens for the didMoveToWindow notification, it just was only updating
        the IsInWindow flag. Instead just update all flags, and the call to viewStateDidChange from
        WKContentView can just be removed.

        There is one problem with this in that it would reverse the order of the calls to
        viewStateDidChange & _updateForScreen:, which would mean the the view would become visible before
        updating the screen pixel density. To fix this, move the call to _updateForScreen: to
        willMoveToWindow:, to ensure it occurs before the page becomes visible.

        This will also change behavior on Mac for WKWebView clients, in coalescing all view state changes
        within the didMoveToWindow call. This is the direction we intended to go in anyway (the plan is
        to remove the mayHaveChanged argument from viewStateDidChange - we're currently adding unnecessary
        IPC traffic).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView didMoveToWindow]):
            - should update all view state flags.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView willMoveToWindow:]):
            - should _updateForScreen:
        (-[WKContentView didMoveToWindow]): Deleted.
            - functionality moved to -[WKWebView didMoveToWindow], -[WKContentView didMoveToWindow].

2015-05-30  Brady Eidson  <beidson@apple.com>

        Make FrameLoader methods that take PassRefPtr<Event> take raw pointers instead.
        https://bugs.webkit.org/show_bug.cgi?id=145495

        Reviewed by Alexey Proskuryakov.

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

2015-05-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crash closing a related tab with Web Inspector open while page is refreshing
        https://bugs.webkit.org/show_bug.cgi?id=145488

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::~WebInspector):
        Ensure, no matter how we close, that we have invalidated the
        frontend connection of which we are the client.

        (WebKit::WebInspector::createInspectorPage):
        This member variable will never be null.

2015-05-29  Andreas Kling  <akling@apple.com>

        [iOS] When bouncing back from max pinch zoom scale, scaleChangeRate should be 0.
        <https://webkit.org/b/145487>
        <rdar://problem/20989389>

        Reviewed by Benjamin Poulain.

        Make sure we don't send WebCore some velocity data with non-zero scaleChangeRate
        when we bounce back from being pinch-zoomed past the maximum scale.

        This fixes an issue where the bounce-back animation would cause a burst of
        unnecessary tile generation.

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

2015-05-29  Jon Lee  <jonlee@apple.com>

        Fix preferences for wireless playback
        https://bugs.webkit.org/show_bug.cgi?id=145477
        rdar://problem/21166767

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPreferences.cpp: Add missing preference calls in C API.
        * UIProcess/API/C/WKPreferencesRef.h:

2015-05-29  Enrica Casucci  <enrica@apple.com>

        [iOS] Cursor hidden in text area once it scrolls.
        https://bugs.webkit.org/show_bug.cgi?id=145451
        rdar://problem/20356413

        Reviewed by Simon Fraser.

        This patch fixes both the touch scrolling inside the
        overflow area as well as the programmatic scroll that
        occurs when inserting a new line. The first issue is fixed by
        implementing the chrome client methods didLayout,
        didStartOverflowScroll and didEndOverflowScroll. The second
        required changing the implementation of notifyRevealedSelectionByScrollingFrame.
        We not only need to notify the client to redraw the selection,
        but we also need to recompute the editorState, because scrolling
        might have occurred.
        I've removed the NotifyRevealedSelection message that was not needed
        any longer, since EditorStateChanged will do exactly what we want.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::editorStateChanged):
        (WebKit::WebPageProxy::notifyRevealedSelection): Deleted.
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::notifyRevealedSelectionByScrollingFrame):
        (WebKit::WebChromeClient::didLayout):
        (WebKit::WebChromeClient::didStartOverflowScroll):
        (WebKit::WebChromeClient::didEndOverflowScroll):

2015-05-29  Chris Dumez  <cdumez@apple.com>

        [iOS] Update WebContent process sandbox profile for AWD logging
        https://bugs.webkit.org/show_bug.cgi?id=145473
        <rdar://problem/20543269>

        Reviewed by Darin Adler.

        Update WebContent process sandbox profile for AWD logging.

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

2015-05-29  Anders Carlsson  <andersca@apple.com>

        WebKit.framework installs or references Mac-only headers on iOS
        https://bugs.webkit.org/show_bug.cgi?id=145471
        rdar://problem/21161459

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/mac/WKInspectorPrivateMac.h:
        Add an #if !TARGET_OS_IPHONE guard around the entire header.

2015-05-29  Anders Carlsson  <andersca@apple.com>

        WKScriptMessageInternal.h should be a project header, not a private header
        https://bugs.webkit.org/show_bug.cgi?id=145464
        rdar://problem/21161639

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:

2015-05-28  Alexey Proskuryakov  <ap@apple.com>

        Clean up VisitedLinkProvider teardown
        https://bugs.webkit.org/show_bug.cgi?id=145450
        rdar://problem/20244726

        Reviewed by Brady Eidson.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider):

2015-05-28  Brady Eidson  <beidson@apple.com>

        Change method of signaling "should open external urls" to WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=145454

        Reviewed by Dan Bernstein.

        Making this a property on the request was never a good idea.

        Adding a new extensible load SPI seems much better.

        * Shared/API/Cocoa/_WKNSURLRequestExtras.h: Removed.
        * Shared/API/Cocoa/_WKNSURLRequestExtras.mm: Removed.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadRequest:userData:]): Since this API is deprecated,
          it always gets the default restrictive behavior.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadRequest:]):
        (-[WKWebView loadRequest:withOptions:]): Take an options dictionary that, for now, 
          only supports one option.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * WebKit2.xcodeproj/project.pbxproj:

2015-05-28  Anders Carlsson  <andersca@apple.com>

        Make sure that we create the private WebKit.framework symlinks last
        https://bugs.webkit.org/show_bug.cgi?id=145442
        <rdar://problem/21142213>

        Reviewed by Dan Bernstein.

        Move the "Add Symlinks in /System/Library/PrivateFrameworks/WebKit.framework" build phase to
        the "All" aggregate target. Also update the script now that INSTALL_PATH is different.

        * WebKit2.xcodeproj/project.pbxproj:

2015-05-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Code clean up for extracting information from the mix of WritingMode and TextDirection
        https://bugs.webkit.org/show_bug.cgi?id=143399

        Reviewed by Darin Adler.

        * Shared/WebPopupItem.h:
        * UIProcess/API/C/efl/WKAPICastEfl.h:
        * UIProcess/WebPopupMenuProxy.h:
        enum TextDirection is moved from TextFlags.h to WritingMode.h. So include
        WritingMode.h instead of including TextFlags.h.

2015-05-28  Antti Koivisto  <antti@apple.com>

        Disable network cache for old clients
        https://bugs.webkit.org/show_bug.cgi?id=145418

        Reviewed by Andreas Kling.

        Follow-up: Don't do linked-on-or-after checks for iOS Safari.

        * UIProcess/Cocoa/VersionChecks.mm:
        (WebKit::linkTimeVersion):
        (WebKit::linkedOnOrAfter):

2015-05-28  Matt Rajca  <mrajca@apple.com>

        Add ENABLE_MEDIA_SESSION feature flag (which is off by default).
        https://bugs.webkit.org/show_bug.cgi?id=145415

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2015-05-28  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed, Fix build break since r184930.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createTransientLocalStorageMap): Pass a pointer of SecurityOrigin
        in isSameSchemeHostPort().

2015-05-28  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing the build after r184950.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageMap): getOrCreateStorageArea()
        now expects a Ref<WebCore::SecurityOrigin> object.

2015-05-28  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Handle WebCore::SecurityOrigin objects through Ref<> where possible
        https://bugs.webkit.org/show_bug.cgi?id=145373

        Reviewed by Andreas Kling.

        WebCore::SecurityOrigin creation functions in most cases return a
        Ref<WebCore::SecurityOrigin> object. In the WebKit2 layer, those objects
        were still largely converted to RefPtr<>s.

        This patch switches to using Ref<> where possible. The remaining uses of
        RefPtr<WebCore::SecurityOrigin> are present due to HashTables, to-be-copied
        Vectors, WebCore::DatabaseManager::origins() API and code where non-null
        WebCore::SecurityOrigin can't be guaranteed.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesForOrigin):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::cfURLCacheOrigins):
        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        (WebKit::LocalStorageDatabase::openDatabase):
        (WebKit::LocalStorageDatabase::close):
        * UIProcess/Storage/LocalStorageDatabase.h:
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::origins):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::securityOrigin):
        (WebKit::StorageManager::TransientLocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::TransientLocalStorageNamespace::origins):
        (WebKit::StorageManager::TransientLocalStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::StorageManager::StorageArea::create):
        (WebKit::StorageManager::StorageArea::StorageArea):
        (WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded):
        (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::LocalStorageNamespace::didDestroyStorageArea):
        (WebKit::StorageManager::SessionStorageNamespace::origins):
        (WebKit::StorageManager::SessionStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reachedApplicationCacheOriginQuota):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setApplicationCacheOriginQuota):
        (WebKit::InjectedBundle::resetApplicationCacheOriginQuota):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::returnCacheOrigins):
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):

2015-05-19  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] When viewing an MJPEG stream as the main resource, only the first
        frame paints

        <https://bugs.webkit.org/show_bug.cgi?id=145185>
        <rdar://problem/20124694>

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::willReplaceMultipartContent):
        Tell the WebPage that we will replace multipart content.

        (WebKit::WebFrameLoaderClient::didReplaceMultipartContent):
        Tell the WebPage that we did replace multipart content.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/DrawingArea.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willReplaceMultipartContent):
        Save the exposed content rect.
        (WebKit::WebPage::didReplaceMultipartContent):
        Restore the exposed content rect that was saved before this load. This
        fixes the issue for WK2.

        * WebProcess/WebPage/WebPage.h:

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::exposedContentRect):

2015-05-22  Jon Lee  <jonlee@apple.com>

        Fix macros for wireless playback
        https://bugs.webkit.org/show_bug.cgi?id=145239
        rdar://problem/21049541

        Reviewed by Anders Carlsson.

        Encompass the logic within ENABLE(WIRELESS_TARGET_PLAYBACK). Update property name.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h: Update names. Add a WKDeprecated
        category section.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]): Update name of variables to reflect new property names.
        (-[WKWebViewConfiguration copyWithZone:]): Ditto.
        (-[WKWebViewConfiguration mediaPlaybackAllowsAirPlay]): Get and set off of the new
        variable.
        (-[WKWebViewConfiguration setMediaPlaybackAllowsAirPlay:]): Ditto.
        (-[WKWebViewConfiguration mediaPlaybackRequiresUserAction]): Ditto.
        (-[WKWebViewConfiguration setMediaPlaybackRequiresUserAction:]): Ditto.

2015-05-27  Brady Eidson  <beidson@apple.com>

        Add a "should open urls externally" flag to DocumentLoader.
        rdar://problem/21025301 and https://bugs.webkit.org/show_bug.cgi?id=145417

        Reviewed by Geoff Garen.

        Rename "user initiated" to "should open external URLs":
        * Shared/API/Cocoa/_WKNSURLRequestExtras.h:
        * Shared/API/Cocoa/_WKNSURLRequestExtras.mm:
        (-[NSURLRequest _web_shouldOpenExternalURLs]):
        (-[NSMutableURLRequest _web_setShouldOpenExternalURLs:]):
        (-[NSURLRequest _web_isUserInitiated]): Deleted.
        (-[NSMutableURLRequest _web_setIsUserInitiated:]): Deleted.
        
        Hold the new flag as a bool, and encode/decode it across IPC:
        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::encode):
        (WebKit::NavigationActionData::decode):
        (WebKit::NavigationActionData::NavigationActionData): Deleted.
        * Shared/NavigationActionData.h:

        * UIProcess/API/APINavigationAction.h: Add accessor for the bool flag.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURLWithUserData): Use "ShouldNotAllow" in the legacy C API for now.
        (WKPageLoadURLRequestWithUserData): Ditto.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadRequest:userData:]): Set the value of the flag
          based on whether or not the initiating NSURLRequest was user initiated.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction _shouldOpenExternalURLs]): Add accessor for the bool flag.
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadRequest:]): Set the value of the flag based on whether or not the
          initiating NSURLRequest was user initiated.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequest): Pass the value down to the WebProcess to load.
        (WebKit::WebPageProxy::loadFile): Ditto, but always with "ShouldNotAllow".
        * UIProcess/WebPageProxy.h:

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Translate 
          the NavigationAction flag to a bool in the NavigationActionData object.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest): Set the value of the flag in the FrameLoadRequest that
          will be loaded.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-05-27  Anders Carlsson  <andersca@apple.com>

        Can't load local files in WKWebView from containerized app
        https://bugs.webkit.org/show_bug.cgi?id=145424
        rdar://problem/20831176

        Reviewed by Dan Bernstein.

        Allow the network process to load local files from its bundle as long as it has
        the sandbox extensions to do so.

        This was originally added to only allow SSO to read the Info.plist inside its own application
        bundle, but being able to read the application bundle from within the network process should be OK.

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

2015-05-27  Andreas Kling  <akling@apple.com>

        [WK2] Local storage areas should get torn down when they have no remaining references.
        <https://webkit.org/b/143339>
        <rdar://problem/20156436>

        Reviewed by Darin Adler.

        Let StorageNamespaceImpl own its StorageAreaMaps weakly instead of through RefPtr.
        Ownership is flipped so that StorageAreaMap refs the StorageNamespaceImpl instead.
        This allows the StorageAreaMaps to get destroyed once all of its clients are gone.

        Practically speaking, this means that the garbage collector now decides when local
        storage databases can be closed, instead of us keeping them open for the lifetime
        of the web process.

        For session storage, it works a bit differently. In the web process, they get torn
        down when their last client disappears, but they stay alive in the UI process.
        If/when the web process asks the UI process to open session storage for an origin,
        the UI process checks if one already exists, and if so, just updates the ID of the
        old storage with the new one provided by the web process.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::isSessionStorage):
        (WebKit::StorageManager::createTransientLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::securityOrigin):
        * WebProcess/Storage/StorageAreaImpl.h:
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::~StorageAreaMap):
        * WebProcess/Storage/StorageAreaMap.h:
        (WebKit::StorageAreaMap::securityOrigin):
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::didDestroyStorageAreaMap):
        (WebKit::StorageNamespaceImpl::storageArea):
        * WebProcess/Storage/StorageNamespaceImpl.h:

2015-05-27  Antti Koivisto  <antti@apple.com>

        Disable network cache for old clients
        https://bugs.webkit.org/show_bug.cgi?id=145418
        rdar://problem/21126587

        Reviewed by Andy Estes.

        Old clients might use NSURLCache API to clear the cache. New cache requires use of new APIs.

        * UIProcess/Cocoa/VersionChecks.h: Added.
        * UIProcess/Cocoa/VersionChecks.mm: Added.

            Add linked-on-or-after check mechanism similar to WebKit1.

        (WebKit::linkTimeVersion):
        (WebKit::linkedOnOrAfter):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

            Use it when deciding whether to enable the cache.

        * WebKit2.xcodeproj/project.pbxproj:

2015-05-27  Dean Jackson  <dino@apple.com>

        img.currentSrc problem in strict mode with old picturefill
        https://bugs.webkit.org/show_bug.cgi?id=144095
        <rdar://problem/21087013>

        Reviewed by Simon Fraser.

        Add a PICTURE_SIZES flag.

        * Configurations/FeatureDefines.xcconfig:

2015-05-27  Chris Dumez  <cdumez@apple.com>

        Assertion hit in WebPage::didChangeSelection()
        https://bugs.webkit.org/show_bug.cgi?id=145413
        <rdar://problem/21001129>

        Reviewed by Ryosuke Niwa.

        We sometimes hit the "ASSERT(layoutCount == view->layoutCount())"
        assertion in WebPage::didChangeSelection(). We manage to prevent
        synchronous layouts in most cases when calling editorState(). However,
        it seems it can still happen in some cases. Crashing in this case seems
        overkill and can be annoying to other developers, especially
        considering the implications are only on performance.

        This patch drops the assertion.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection): Deleted.

2015-05-27  Anders Carlsson  <andersca@apple.com>

        Address a follow-up review comment from Darin.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeMediaKeys):

2015-05-26  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore should handle media keys
        https://bugs.webkit.org/show_bug.cgi?id=145394
        rdar://problem/20617794.

        Reviewed by Darin Adler.

        * Shared/WebsiteData/WebsiteDataTypes.h:
        Add WebsiteDataTypeMediaKeys enum.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        Set up mediaKeysStorageDirectory.

        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordPrivate.h: Added.
        Add _WKWebsiteDataTypeMediaKeys.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):
        Set up mediaKeysStorageDirectory.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        Set m_mediaKeysStorageDirectory.

        (WebKit::WebsiteDataStore::fetchData):
        Make CallbackAggregator ThreadSafeRefCounted.
        Handle WebsiteDataTypeMediaKeys by calling mediaKeyOrigins on our background queue.

        (WebKit::WebsiteDataStore::removeData):
        Make CallbackAggregator ThreadSafeRefCounted.
        Handle WebsiteDataTypeMediaKeys by calling removeMediaKeys on our background queue.

        (WebKit::WebsiteDataStore::mediaKeyOrigins):
        Compute the origins.

        (WebKit::computeMediaKeyFile):
        Add helper function that returns the media key given a containing directory.

        (WebKit::WebsiteDataStore::removeMediaKeys):
        Remove media key files.

        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Add new members.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

2015-05-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.9.2 release.

        * gtk/NEWS: Add release notes for 2.9.2.

2015-05-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Network Cache: Handle the case when we fail to create the IO stream
        https://bugs.webkit.org/show_bug.cgi?id=145406

        Reviewed by Sergio Villar Senin.

        We were asserting in that case, but it can happen that we
        fail to create the stream. It happened to me after r184690, that
        changed the NetworkCache::Key hash. Since this was not expected to
        happen, the async operation never finished and the completion
        handler never called, leaving resources loading forever. We
        should make sure we call the completion handler with an error
        code, so that the load finishes and the entry is silently removed
        from the cache.

        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::readSync):
        (WebKit::NetworkCache::IOChannel::write):

2015-05-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Network Cache: Add cache capacity to the totals of JSON file
        https://bugs.webkit.org/show_bug.cgi?id=145246

        Reviewed by Antti Koivisto.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::dumpContentsToFile):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::capacity):

2015-05-26  Anders Carlsson  <andersca@apple.com>

        Add a symlink for every file inside /S/L/F/WebKit.framework to the PrivateFrameworks mirror.

        rdar://problem/21111232.

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:

2015-05-26  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] webview should be updated from (0,0) when using the evasGL.
        https://bugs.webkit.org/show_bug.cgi?id=137948

        Reviewed by Gyuyoung Kim.

        Changed the point of the start position to update the evasObject
        correctly when using the evasGL for graphics backend.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::displayTimerFired):

2015-05-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21104551> Update build settings

        Reviewed by Anders Carlsson.

        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebContentService.Development.xcconfig:
        * Configurations/WebContentService.xcconfig:

2015-05-26  Milan Crha  <mcrha@redhat.com>

        [GTK] Expand wildcards inside generate-inspector-gresource-manifest.py
        https://bugs.webkit.org/show_bug.cgi?id=138134

        Reviewed by Žan Doberšek.

        * PlatformGTK.cmake: Command line with expanded resources exceeds 32KB, which
        is a limit on Windows. It's better to expand wildcards inside the python script.

2015-05-25  Dan Bernstein  <mitz@apple.com>

        ASSERT_MAIN_THREAD and DOM_ASSERT_MAIN_THREAD are unnecessary no-ops
        https://bugs.webkit.org/show_bug.cgi?id=145372

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Removed DISABLE_THREAD_CHECK from DEBUG_DEFINES.

2015-05-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add construct property to WebKitWebContext to set the IndexedDB database directory
        https://bugs.webkit.org/show_bug.cgi?id=140882

        Reviewed by Gustavo Noronha Silva.

        Add WebKitWebContext:indexed-db-database-directory construct only property.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextGetProperty):
        (webkitWebContextSetProperty):
        (webkitWebContextConstructed):
        (webkit_web_context_class_init):

2015-05-24  Sam Weinig  <sam@webkit.org>

        Crash when using a removed ScriptMessageHandler
        <rdar://problem/20888499>
        https://bugs.webkit.org/show_bug.cgi?id=145359

        Reviewed by Dan Bernstein.

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserMessageHandlerDescriptorProxy::~WebUserMessageHandlerDescriptorProxy):
        Invalidate the descriptor when the message handler client (as implemented by WebUserMessageHandlerDescriptorProxy)
        goes away. This will happen if a script message handler is removed at the API level or the WebUserContentController
        is destroyed (which will happen if all the pages get destroyed).

2015-05-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21090327> /S/L/PrivateFrameworks/WebKit.framework is missing Headers and PrivateHeaders symlinks
        https://bugs.webkit.org/show_bug.cgi?id=145354

        Reviewed by David Kilzer.

        * WebKit2.xcodeproj/project.pbxproj: Create Headers and PrivateHeaders symlinks alongside
        the dylib symlink.

2015-05-23  Sungmann Cho  <sungmann.cho@navercorp.com>

        Rename ShareableResource::create(Handle&) to map(Handle&) to match SharedMemory.
        https://bugs.webkit.org/show_bug.cgi?id=145288

        Reviewed by Sam Weinig.

        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::Handle::tryWrapInSharedBuffer):
        (WebKit::ShareableResource::map):
        (WebKit::ShareableResource::create): Deleted.
        * Shared/ShareableResource.h:

2015-05-22  Jon Lee  <jonlee@apple.com>

        Rename MediaPlaybackAllowsInline
        https://bugs.webkit.org/show_bug.cgi?id=145315

        Reviewed by Eric Carlson.

        Our API uses allowsInlineMediaPlayback. Our symbols should reflect the same.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMediaPlaybackAllowsInline): Update the call to preferences.
        The C API will not change in a future patch.
        (WKPreferencesGetMediaPlaybackAllowsInline): Ditto.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Update the name of the key.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Ditto.

        * UIProcess/API/gtk/WebKitSettings.cpp: Update the call.
        (webkit_settings_get_media_playback_allows_inline):
        (webkit_settings_set_media_playback_allows_inline):

2015-05-22  Jon Lee  <jonlee@apple.com>

        Rename MediaPlaybackAllowsAirPlay
        https://bugs.webkit.org/show_bug.cgi?id=145316

        Reviewed by Eric Carlson.

        In preparation for an API rename, update internal symbols from mediaPlaybackAllowsAirPlay
        to allowsAirPlayForMediaPlayback.

        * Shared/WebPreferencesDefinitions.h: Update the name.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Update the call to settings.

2015-05-22  Jon Lee  <jonlee@apple.com>

        Unreviewed GTK fix after r184802.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_get_media_playback_requires_user_gesture):
        (webkit_settings_set_media_playback_requires_user_gesture):

2015-05-22  Jon Lee  <jonlee@apple.com>

        Rename MediaPlaybackRequiresUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=145314

        Reviewed by Anders Carlsson.

        In preparation for an API rename, update internal symbols from mediaPlaybackRequiresUserGesture
        to requiresUserGestureForMediaPlayback.

        No changes are being made to the API in this patch.

        * Shared/WebPreferencesDefinitions.h: Update the name of the macro and the setting.
        * UIProcess/API/C/WKPreferences.cpp: The C API will not change in a future patch.
        (WKPreferencesSetMediaPlaybackRequiresUserGesture): Update the call to preferences.
        (WKPreferencesGetMediaPlaybackRequiresUserGesture): Ditto.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Update the name of the key.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Ditto.

2015-05-22  Commit Queue  <commit-queue@webkit.org>

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

        broke some toolbar blurring behavior (Requested by thorton on
        #webkit).

        Reverted changeset:

        "Asynchronous (or timed-out synchronous) resize flashes white
        instead of page background color"
        https://bugs.webkit.org/show_bug.cgi?id=144468
        http://trac.webkit.org/changeset/183647

2015-05-22  Yongjun Zhang  <yongjun_zhang@apple.com>

        Image link doesn't create a preview view controller.
        https://bugs.webkit.org/show_bug.cgi?id=145320

        Also try to create the preview view controller if the hit-tested node
        is a image link.

        Reviewed by Beth Dakin.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):

2015-05-22  Tim Horton  <timothy_horton@apple.com>

        Avoid doing an extra layout in some cases while doing scale-to-fit
        https://bugs.webkit.org/show_bug.cgi?id=145321
        <rdar://problem/21051165>

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):
        If we make it to scaleViewToFitDocumentIfNeeded with valid layout,
        the view width is still less than the last-known minimum document size,
        and the document size hasn't changed, update the view scale without
        doing an extra layout, keeping the fixed layout size at the previously
        computed minimum document size.

2015-05-22  Beth Dakin  <bdakin@apple.com>

        Yellow highlight and DD popover don't go away when scrolling an iframe
        https://bugs.webkit.org/show_bug.cgi?id=145312
        -and corresponding-
        rdar://problem/19692334

        Reviewed by Tim Horton.

        Match what Lookup already does for their popover and dismiss our popovers on 
        scroll.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView scrollWheel:]):

        This should not be needed anymore.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageDidScroll):

2015-05-22  Tim Horton  <timothy_horton@apple.com>

        Remove action menu support
        https://bugs.webkit.org/show_bug.cgi?id=145305
        <rdar://problem/21070771>

        Reviewed by Anders Carlsson.

        * Configurations/WebKit.xcconfig:
        * Shared/API/c/WKActionMenuItemTypes.h:
        * Shared/API/c/WKActionMenuTypes.h:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didPerformImmediateActionHitTest:contentPreventsDefault:userData:]):
        (-[WKView dealloc]): Deleted.
        (-[WKView mouseDown:]): Deleted.
        (-[WKView initWithFrame:processPool:configuration:webView:]): Deleted.
        (-[WKView prepareForMenu:withEvent:]): Deleted.
        (-[WKView willOpenMenu:withEvent:]): Deleted.
        (-[WKView didCloseMenu:withEvent:]): Deleted.
        (-[WKView _didPerformActionMenuHitTest:forImmediateAction:contentPreventsDefault:userData:]): Deleted.
        (-[WKView _actionMenuItemsForHitTestResult:withType:defaultActionMenuItems:]): Deleted.
        (-[WKView _actionMenuItemsForHitTestResult:withType:defaultActionMenuItems:userData:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performImmediateActionHitTestAtLocation):
        (WebKit::WebPageProxy::didPerformImmediateActionHitTest):
        (WebKit::WebPageProxy::performActionMenuHitTestAtLocation): Deleted.
        (WebKit::WebPageProxy::selectLastActionMenuRange): Deleted.
        (WebKit::WebPageProxy::focusAndSelectLastActionMenuHitTestResult): Deleted.
        (WebKit::WebPageProxy::didPerformActionMenuHitTest): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformImmediateActionHitTest):
        (WebKit::PageClientImpl::didPerformActionMenuHitTest): Deleted.
        * UIProcess/mac/WKActionMenuController.h: Removed.
        * UIProcess/mac/WKActionMenuController.mm: Removed.
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController didPerformImmediateActionHitTest:contentPreventsDefault:userData:]):
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        (-[WKImmediateActionController didPerformActionMenuHitTest:contentPreventsDefault:userData:]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageContextMenuClient.h:
        (API::InjectedBundle::PageContextMenuClient::prepareForImmediateAction):
        (API::InjectedBundle::PageContextMenuClient::prepareForActionMenu): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePageContextMenuClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        (WebKit::InjectedBundlePageContextMenuClient::prepareForImmediateAction):
        (WebKit::InjectedBundlePageContextMenuClient::prepareForActionMenu): Deleted.
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPageOverlay.cpp:
        (WebKit::WebPageOverlay::actionContextForResultAtPoint):
        * WebProcess/WebPage/WebPageOverlay.h:
        (WebKit::WebPageOverlay::Client::actionContextForResultAtPoint):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::textIndicatorTransitionForImmediateAction):
        (WebKit::WebPage::performImmediateActionHitTestAtLocation):
        (WebKit::textIndicatorTransitionForActionMenu): Deleted.
        (WebKit::WebPage::performActionMenuHitTestAtLocation): Deleted.
        (WebKit::WebPage::selectLastActionMenuRange): Deleted.
        (WebKit::WebPage::focusAndSelectLastActionMenuHitTestResult): Deleted.
        Remove everything, except some enums that clients still refer to.
        Also, leave SPI that used to be shared between immediate actions and
        action menus intact, even if it had "action menu" in the name. We can
        deprecate and rename in another patch... except for the very recently-added
        support from r184106, which we'll revert entirely, removing WKBundlePageOverlayV2, 
        which was not adopted by any clients.

2015-05-22  Brady Eidson  <beidson@apple.com>

        Rework how the ResourceRequest user initiated property key is used.
        Followup to https://bugs.webkit.org/show_bug.cgi?id=145281

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/_WKNSURLRequestExtras.mm:
        (-[NSURLRequest _web_isUserInitiated]):
        (-[NSMutableURLRequest _web_setIsUserInitiated:]):

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

2015-05-21  Gavin Barraclough  <barraclough@apple.com>

        Networking process sometimes suspended while WebContent runnable
        https://bugs.webkit.org/show_bug.cgi?id=145291
        <rdar://problem/21033029>

        Reviewed by Andreas Kling.

        There is an asymmetry in how the Networking process suspension is managed.
        We drop the assertion (& suspend the process) whenever the WebProcess says
        it is ready to suspend, but we only take the assertion (& resume execution)
        when the WebContent process is actually resumed. This leaves a race – where
        the WebContent process was willing to be suspended, but the UI app changed
        its mind suspending it. Since the WebContent process never actually suspended
        (we only prepared it to), we never send a resume, and since we never resume,
        we never wake the Networking process.

        The fix is pretty clean. A web process should take a token on the networking
        process precisely whenever it holds an assertion on the web content process.
        This also enables a nice refinement, that when holding a BG assertion on the
        WebContent process we only need to hold a BG assertion on the networking
        process.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didSetAssertionState):
            - no-op
        * UIProcess/Network/NetworkProcessProxy.h:
            - added didSetAssertionState.
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertionNow):
        (WebKit::ProcessThrottler::updateAssertion):
        (WebKit::ProcessThrottler::didConnectToProcess):
            - whenever taking/updating the assertion, inform the client via didSetAssertionState.
        * UIProcess/ProcessThrottlerClient.h:
            - added didSetAssertionState.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
            removed initializeNetworkProcessActivityToken - this is taken via ProcessThrottler::didConnectToProcess.
        (WebKit::WebProcessProxy::sendProcessDidResume):
            - removed call to initializeNetworkProcessActivityToken - updated via didSetAssertionState.
        (WebKit::WebProcessProxy::processReadyToSuspend):
            - removed update of m_tokenForNetworkProcess - updated via didSetAssertionState.
        (WebKit::WebProcessProxy::didSetAssertionState):
            - update m_backgroundTokenForNetworkProcess/m_foregroundTokenForNetworkProcess.
        (WebKit::WebProcessProxy::initializeNetworkProcessActivityToken): Deleted.
            - updated via didSetAssertionState.
        * UIProcess/WebProcessProxy.h:
            - added didSetAssertionState, added separate FG/BG activity tokens for Networking process.

2015-05-22  Dan Bernstein  <mitz@apple.com>

        Fixed the fix for <rdar://problem/20830673> Symlink the WebKit dylib instead of just the framework directory
        https://bugs.webkit.org/show_bug.cgi?id=145287

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Give the symlink the correct destination.

2015-05-21  Brady Eidson  <beidson@apple.com>

        Add an "initiated by user gesture" flag to ResourceRequest.
        https://bugs.webkit.org/show_bug.cgi?id=145281

        Reviewed by Alex Christensen.

        Expose a new category on NSURLRequest to allow SPI clients to easily set/get the flag:
        * Shared/API/Cocoa/_WKNSURLRequestExtras.h: Added.
        * Shared/API/Cocoa/_WKNSURLRequestExtras.mm: Added.
        (-[NSURLRequest _web_isUserInitiated]):
        (-[NSMutableURLRequest _web_setIsUserInitiated:]):

        * WebKit2.xcodeproj/project.pbxproj:

        Expose the new property key to WebCore:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (WKResourceRequestIsUserInitiatedKey):
        (InitWebCoreSystemInterface):

2015-05-21  Daniel Bates  <dabates@apple.com>

        Rollout <http://trac.webkit.org/changeset/183909>
        (https://bugs.webkit.org/show_bug.cgi?id=144657)

        Revert <http://trac.webkit.org/changeset/183909> since pausing the database
        thread prevents in-progress transactions from completing. We need to think
        about this change some more.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _applicationDidEnterBackground:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackground): Deleted.
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::setPauseAllDatabases): Deleted.
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationWillEnterForeground): Deleted.
        (WebKit::WebPage::applicationDidEnterBackground): Deleted.

2015-05-21  Enrica Casucci  <enrica@apple.com>

        [iOS] Crash when taking a snapshot of a large PDF.
        https://bugs.webkit.org/show_bug.cgi?id=145286
        rdar://problem/20892362

        Reviewed by Tim Horton.

        The code for the PDF case was incorrectly computing the snapshot rect.
        On top of that drawViewHierarchyInRect was ignoring the rect and
        always creating an image using the view bounds causing the crash.
        We are now always using the IOSurface if we are parented or
        an image context when we are not.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2015-05-21  Anders Carlsson  <andersca@apple.com>

        Symlink the WebKit dylib instead of just the framework directory
        https://bugs.webkit.org/show_bug.cgi?id=145287
        rdar://problem/20830673

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:

2015-05-21  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore doesn't track and remove iOS Safari's offline application cache entries
        https://bugs.webkit.org/show_bug.cgi?id=145279
        rdar://problem/20657912

        Reviewed by Dan Bernstein.

        Special-case iOS Safari and WebApp when computing the default application cache directory.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::applicationCacheDirectory):
        (API::WebsiteDataStore::defaultDataStoreConfiguration):

2015-05-21  Brian Weinstein  <bweinstein@apple.com>

        Add a _WKWebKitContentExtensionStore initializer that takes a path.
        https://bugs.webkit.org/show_bug.cgi?id=145269 and work towards <rdar://problem/21031414>

        Reviewed by Anders Carlsson.

        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::UserContentExtensionStore::storeWithPath):
        * UIProcess/API/APIUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (+[_WKUserContentExtensionStore storeWithURL:]):

2015-05-21  Alexey Proskuryakov  <ap@apple.com>

        Build fix. Silence some deprecation warnings.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _presentPopoverWithContentViewController:animated:]):
        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKDateTimePopover initWithView:datePickerMode:]):
        * UIProcess/ios/forms/WKFormPopover.h:
        * UIProcess/ios/forms/WKFormPopover.mm:
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]):

2015-05-21  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Remove an unused private field from EwkPopupMenuItem class
        https://bugs.webkit.org/show_bug.cgi?id=145249

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_popup_menu.cpp:
        (EwkPopupMenu::EwkPopupMenu):
        * UIProcess/API/efl/ewk_popup_menu_private.h:

2015-05-21  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix mismatched-tags warnings in UIProcess/API/efl
        https://bugs.webkit.org/show_bug.cgi?id=145129

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/ewk_application_cache_manager.h:
        * UIProcess/API/efl/ewk_auth_request.h:
        * UIProcess/API/efl/ewk_back_forward_list.h:
        * UIProcess/API/efl/ewk_back_forward_list_item.h:
        * UIProcess/API/efl/ewk_color_picker.h:
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_menu_item.h:
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_database_manager.h:
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_error.h:
        * UIProcess/API/efl/ewk_favicon_database.h:
        * UIProcess/API/efl/ewk_file_chooser_request.h:
        * UIProcess/API/efl/ewk_form_submission_request.h:
        * UIProcess/API/efl/ewk_navigation_data.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision.h:
        * UIProcess/API/efl/ewk_object.h:
        * UIProcess/API/efl/ewk_page_group.h:
        * UIProcess/API/efl/ewk_popup_menu.h:
        * UIProcess/API/efl/ewk_popup_menu_item.h:
        * UIProcess/API/efl/ewk_security_origin.h:
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/ewk_storage_manager.h:
        * UIProcess/API/efl/ewk_url_request.h:
        * UIProcess/API/efl/ewk_url_response.h:
        * UIProcess/API/efl/ewk_url_scheme_request.h:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_window_features.h:
        * WebProcess/InjectedBundle/API/efl/ewk_extension.h:
        * WebProcess/InjectedBundle/API/efl/ewk_page.h:

2015-05-21  Csaba Osztrogonác  <ossy@webkit.org>

        Fix mismatched-tags warnings related to CoordinatedGraphics
        https://bugs.webkit.org/show_bug.cgi?id=145130

        Reviewed by Darin Adler.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:

2015-05-20  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed GTK build fix since r184686.

        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Add *legacy* prefix.
        (WebKit::WebProcessPool::platformDefaultApplicationCacheDirectory): Deleted.

2015-05-20  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Unreviewed EFL build fix since r184686.

        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory): Add *legacy* prefix.
        (WebKit::WebProcessPool::platformDefaultApplicationCacheDirectory): Deleted.

2015-05-20  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Update WebContent process sandbox profile for AWD logging
        https://bugs.webkit.org/show_bug.cgi?id=145229
        <rdar://problem/20543269>

        Reviewed by Alexey Proskuryakov.

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

2015-05-20  Gavin Barraclough  <barraclough@apple.com>

        dispatchViewStateChange should not wait for sync reply if the page isn't visible
        https://bugs.webkit.org/show_bug.cgi?id=145242
        <rdar://problem/20967937>

        Reviewed by Ben Poulain.

        This is particularly problematic on iOS, since if the page isn't visible the process is likely suspended.


        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchViewStateChange):
        (WebKit::WebPageProxy::waitForDidUpdateViewState):

2015-05-20  Marcos Chavarría Teijeiro  <mchavarria@igalia.com>

        Enable disk cache for range requests
        https://bugs.webkit.org/show_bug.cgi?id=144682

        Reviewed by Antti Koivisto.

        Add Range header value to the network cache key constructor so we take
        into account this value. The 206 response code is also marked to be cached.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeCacheKey):
        (WebKit::NetworkCache::isStatusCodeCacheableByDefault):
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::Key):
        (WebKit::NetworkCache::Key::operator=):
        (WebKit::NetworkCache::Key::computeHash):
        (WebKit::NetworkCache::Key::operator==):
        (WebKit::NetworkCache::Key::encode):
        (WebKit::NetworkCache::Key::decode):
        (WebKit::NetworkCache::Key::stringToHash): Deleted.
        * NetworkProcess/cache/NetworkCacheKey.h:

2015-05-20  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore API doesn't report webkit.org as using Databases or App Cache after visiting http://www.webkit.org/demos/sticky-notes/
        https://bugs.webkit.org/show_bug.cgi?id=145238
        rdar://problem/20581175

        Reviewed by Tim Horton.

        Make sure to set the application cache and WebSQL directories when using the legacy data store.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::legacyPlatformDefaultApplicationCacheDirectory):
        (WebKit::WebProcessPool::platformDefaultApplicationCacheDirectory):
        Rename this and move it to the right place.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::legacyWebsiteDataStoreConfiguration):
        Rename this and add the application cache and WebSQL directories.

        (WebKit::WebProcessPool::WebProcessPool):
        Call legacyWebsiteDataStoreConfiguration.

        (WebKit::WebProcessPool::applicationCacheDirectory):
        Call legacyPlatformDefaultApplicationCacheDirectory.

        * UIProcess/WebProcessPool.h:

2015-05-20  Enrica Casucci  <enrica@apple.com>

        [iOS] Using CSS viewport units causes incorrect layout.
        https://bugs.webkit.org/show_bug.cgi?id=145225
        rdar://problem/20924495

        Reviewed by Benjamin Poulain.

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

2015-05-20  Tim Horton  <timothy_horton@apple.com>

        Allow overriding the waitForDidUpdateViewState timeout
        https://bugs.webkit.org/show_bug.cgi?id=145230
        <rdar://problem/20990162>

        Reviewed by Darin Adler.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateViewState):
        Use the value from NSUserDefaults, if it exists.
        We'll only check once, so changing the default requires a restart of the UI process.

2015-05-20  Anders Carlsson  <andersca@apple.com>

        Make sure we always have a process pool to perform data store operations with
        https://bugs.webkit.org/show_bug.cgi?id=145231
        rdar://problem/20618248

        Reviewed by Tim Horton.

        Make sure that we always return a process pool. If we're a legacy C SPI per-context data store,
        find the process pool we're a part of and use that. Otherwise, create a new one.
    
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::processPools):

2015-05-19  Jer Noble  <jer.noble@apple.com>

        Touching HTMLMediaElement.h or MediaPlayer.h causes a world rebuild.
        https://bugs.webkit.org/show_bug.cgi?id=145193

        Reviewed by Eric Carlson.

        Use HTMLMediaElementEnums instead of HTMLMediaElement.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isShowingVideoOptimized]): HTMLMediaElement -> HTMLMediaElementEnums.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::hasMode): Ditto.
        (WebKit::WebVideoFullscreenModelContext::fullscreenModeChanged): Ditto.
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): Ditto.
        (WebKit::WebVideoFullscreenManagerProxy::fullscreenModeChanged): Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::enterVideoFullscreenForVideoElement): Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/ios/WebVideoFullscreenManager.h:
        (WebKit::WebVideoFullscreenInterfaceContext::fullscreenMode): Ditto.
        (WebKit::WebVideoFullscreenInterfaceContext::setFullscreenMode): Ditto.
        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement): Ditto.
        (WebKit::WebVideoFullscreenManager::fullscreenModeChanged): Ditto.
        (WebKit::WebVideoFullscreenManager::didCleanupFullscreen): Ditto.

2015-05-20  Anders Carlsson  <andersca@apple.com>

        Refactor process pool enumeration code in WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=145218

        Reviewed by Tim Horton.

        Also make sure to keep the WebProcessPool objects alive for the duration of the various data store
        operations. This is the first step towards having the data store create a single process pool lazily if
        there are no web views associated with the data store.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::processPools):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2015-05-20  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Relax restrictions on triggers that match everything.
        https://bugs.webkit.org/show_bug.cgi?id=145069

        Reviewed by Benjamin Poulain.

        * UIProcess/API/APIUserContentExtensionStore.h:
        Increment version number to reflect changes in DFABytecode.

2015-05-20  Sungmann Cho  <sungmann.cho@navercorp.com>

        Minor cleanups to PluginProcessProxy.
        https://bugs.webkit.org/show_bug.cgi?id=145199

        Reviewed by Anders Carlsson.

        1. Remove unnecessary forward declaration.
        2. Remove unnecessary #include.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        * UIProcess/Plugins/PluginProcessProxy.h:

2015-05-20  Marcos Chavarría Teijeiro  <mchavarria@igalia.com>

        [GTK] Add some documentation to WebKitWebExtension
        https://bugs.webkit.org/show_bug.cgi?id=142786

        Reviewed by Carlos Garcia Campos.

        WebKitWebExtension API documentation lacks of some details and the information
        available is in some contributors blog posts. I add the section
        documentation with a small guide about how to use WebExtensions.

        The code examples were taken from Carlos García and Adrián Pérez blog
        posts.

        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp:

2015-05-20  Sungmann Cho  <sungmann.cho@navercorp.com>

        Rename WebsiteDataStore::isNonPersistent() to WebsiteDataStore::isPersistent().
        https://bugs.webkit.org/show_bug.cgi?id=145111

        Reviewed by Darin Adler.

        This is a follow up to https://bugs.webkit.org/show_bug.cgi?id=144158.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::isPersistent):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::isPersistent):
        (WebKit::WebsiteDataStore::isNonPersistent): Deleted.

2015-05-20  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [EFL] Fix build failure, linker does not find libXext.
        https://bugs.webkit.org/show_bug.cgi?id=144100

        Reviewed by Gyuyoung Kim.

        Move Xext library from WebProcess_LIBRARIES to WebKit2_LIBRARIES.

        * PlatformEfl.cmake:

2015-05-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Network Cache: Implement ShareableResource for Soup and enable it for GTK platform
        https://bugs.webkit.org/show_bug.cgi?id=144380

        Reviewed by Antti Koivisto.

        It improves the network cache performance, by mmaping big
        resources and sending only the file descriptor to the web process
        instead of the actual file data. It needs some changes in
        cross-platform code, because we can't use the same approach as
        mac (it uses a platform specific implementation not available in
        other platforms).

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store): Use
        Data::tryCreateSharedMemory() to create the shared memory used by
        the ShareableResource. Also add an ASSERT instead of checking the
        shareable resource created is not nullptr, because the
        ShareableResource::create() that receives a shared memory should
        never return nullptr.
        * NetworkProcess/cache/NetworkCacheData.h:
        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::tryCreateSharedMemory):
        * NetworkProcess/cache/NetworkCacheDataSoup.cpp:
        (WebKit::NetworkCache::Data::tryCreateSharedMemory): Create a
        SharedMemory object to wrap the mapped file, but keeping the ownership.
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::initializeShareableResourceHandleFromStorageRecord):
        Use Data::tryCreateSharedMemory() to create the shared memory used
        bythe ShareableResource. Also add an ASSERT instead of checking
        the shareable resource created is not nullptr, because the
        ShareableResource::create() that receives a shared memory should
        never return nullptr.
        * Platform/SharedMemory.h:
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::map): Use wrapMap() and initialize
        m_isWrappingMap to false.
        (WebKit::SharedMemory::wrapMap): Create a SharedMemory object for
        the given map, without taking its ownership.
        (WebKit::SharedMemory::~SharedMemory): Do not unmap and close the
        file descriptor if m_isWrappingMap is true.
        * Shared/ShareableResource.cpp:
        (WebKit::createShareableResourceDeallocator):
        (WebKit::ShareableResource::wrapInSharedBuffer): Create a SharedBuffer
        wrapping the ShareableResource data.
        (WebKit::ShareableResource::Handle::tryWrapInSharedBuffer): Create
        a ShareableResource for the handle and create a SharedBuffer
        wrapping it.
        * Shared/ShareableResource.h:
        * WebKit2Prefix.h: Enable ENABLE_SHAREABLE_RESOURCE for GTK.
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResource): Get the CFData
        from the SharedBuffer for QuickLook instead of wrapping the handle again.

2015-05-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Network Cache: Disable network cache efficacy logging
        https://bugs.webkit.org/show_bug.cgi?id=145172

        Reviewed by Martin Robinson.

        Disable network cache efficacy logging by default, since we are
        not currently using the collected data.

        * UIProcess/soup/WebProcessPoolSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2015-05-19  Michael Saboff  <msaboff@apple.com>

        REGRESSION(183787): JIT is enabled for all builds
        https://bugs.webkit.org/show_bug.cgi?id=145179

        Reviewed by Geoffrey Garen.

        Eliminated the setting of ENABLE_JIT, as wtf/Platform.h has appropriate logic to
        set it depending on OS and CPU type.

        * Configurations/FeatureDefines.xcconfig:

2015-05-19  Brady Eidson  <beidson@apple.com>

        X-Frame-Options headers not respected when loading from application cache.
        <rdar://problem/14877623> and https://bugs.webkit.org/show_bug.cgi?id=131800

        Reviewed by Alexey Proskuryakov.

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

2015-05-19  Sungmann Cho  <sungmann.cho@navercorp.com>

        Add PLUGIN_ARCHITECTURE(MAC) around WKNVCALayerRenderServerPort in NetscapeBrowserFunc.h.
        https://bugs.webkit.org/show_bug.cgi?id=145173

        Reviewed by Anders Carlsson.

        WKNVCALayerRenderServerPort in NetscapeBrowserFunc.h is meaningful only for Mac.
        So we need to add PLUGIN_ARCHITECTURE(MAC) around it.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.h:

2015-05-19  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(142590): Part 2: Scroll-snap points are improperly snapping to earlier index values (Scrolling Thread) 
        https://bugs.webkit.org/show_bug.cgi?id=145175
        <rdar://problem/21023785>

        Reviewed by Beth Dakin.

        Add a stub implementation of isScrollSnapInProgress to match ScrollingCoordinator signature.

        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::isScrollSnapInProgress): Added stub.

2015-05-19  Jeremy Jones  <jeremyj@apple.com>

        WebVideoFullscreenManagerProxy has incorrect OS_VERSION_MIN_REQUIRED conditionals.
        https://bugs.webkit.org/show_bug.cgi?id=145158

        Reviewed by Eric Carlson.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame):

2015-05-19  Ting-Wei Lan  <lantw44@gmail.com>

        [SOUP] Use st_birthtime to get creation time of files on systems support it
        https://bugs.webkit.org/show_bug.cgi?id=144989

        Reviewed by Carlos Garcia Campos.

        FreeBSD and NetBSD have either st_birthtime field or compatiblity macro
        with the same name in stat. It is better to use it instead of manually
        setting xattr, which is unreliable because both operating systems and
        file systems support are required.

        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h:
        (WebKit::NetworkCache::fileTimes):
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::IOChannel::IOChannel):

2015-05-19  Chris Dumez  <cdumez@apple.com>

        Mark static variables as const when possible
        https://bugs.webkit.org/show_bug.cgi?id=145161

        Reviewed by Andreas Kling.

        * Platform/IPC/MessageEncoder.cpp:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::networkProcessLatencyQOS):
        (WebKit::networkProcessThroughputQOS):
        (WebKit::webProcessLatencyQOS):
        (WebKit::webProcessThroughputQOS):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::pluginNeedsExecutableHeap):
        (WebKit::pluginProcessLatencyQOS):
        (WebKit::pluginProcessThroughputQOS):
        * WebProcess/WebPage/WebPage.cpp:

2015-05-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Ignore warnings in system headers
        https://bugs.webkit.org/show_bug.cgi?id=144747

        Reviewed by Darin Adler.

        Separate include directories into WebKit project includes and system includes. Suppress all
        warnings from headers in system include directories using the SYSTEM argument to
        the include_directories command.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:

2015-05-18  Csaba Osztrogonác  <ossy@webkit.org>

        Fix return-type warnings in test_ewk2_color_picker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145122

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/tests/test_ewk2_color_picker.cpp:
        (EWK2ColorPickerTest::hideColorPicker):
        (EWK2ColorPickerTest::hideColorPickerByRemovingElement):

2015-05-18  Skachkov Alexandr  <gskachkov@gmail.com>

        [ES6] Arrow function syntax. Feature flag for arrow function
        https://bugs.webkit.org/show_bug.cgi?id=145108

        Reviewed by Ryosuke Niwa.

        Added feature flag ENABLE_ES6_ARROWFUNCTION_SYNTAX for arrow function

        * Configurations/FeatureDefines.xcconfig:

2015-05-18  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore should fully support session storage
        https://bugs.webkit.org/show_bug.cgi?id=145145
        rdar://problem/10690447

        Reviewed by Sam Weinig.

        Add a session store data type and handle it when clearing and fetching data.

        * Shared/WebsiteData/WebsiteDataTypes.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore allWebsiteDataTypes]):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::SessionStorageNamespace::origins):
        (WebKit::StorageManager::SessionStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::StorageManager::SessionStorageNamespace::clearAllStorageAreas):
        (WebKit::StorageManager::getSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageOrigins):
        (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):

2015-05-18  Brady Eidson  <beidson@apple.com>

        Followup to: Networking process on iOS can be suspended and never exit
        https://bugs.webkit.org/show_bug.cgi?id=144971.

        Unreviewed. Fixing API tests that revealed the unintentional change in behavior.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::shutDownProcess): The on WebProcessProxy code path that this
          was adopted from had an m_connection null check, and that null check needs to remain.

2015-05-18  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] URTBF after r184503.

        * PlatformGTK.cmake:

2015-05-18  Brady Eidson  <beidson@apple.com>

        Networking process on iOS can be suspended and never exit.
        <rdar://problem/20368630> and https://bugs.webkit.org/show_bug.cgi?id=144971

        Reviewed by Darin Adler.

        There's a few issues here.
        
        1 - When the NetworkProcessProxy goes away, it takes its process assertion with it. This causes
            the Network process to suspend indefinitely, unable to ever respond to IPC::Connection callbacks.
            We already solved this with WebProcess with a watchdog timer keeping both the process assertion
            and xpc_connection alive while the process shuts down. This patch expands that to the network
            process, and it will be easy to expand that to database and plugin processes doing forward.
        
        2 - All of our child processes either decide to self-terminate or listen for their connection to
            close at which point they terminate. This leads to various races. We should
            move to a model where the UI process explicitly tells them to shutdown, and this patch starts us 
            down that path.
        
        * CMakeLists.txt:
        * DerivedSources.make:
        * WebKit2.xcodeproj/project.pbxproj:
        
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage): Send ChildProcess messages to ChildProcess.
        
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::shutDown): For now, just terminate the process. In the future have the
          process do cleanup work before it is terminated.
        * Shared/ChildProcess.h:
        * Shared/ChildProcess.messages.in: Added.
        
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::shutDownProcess): Set a watchdog and - if possible - explicitly message 
          the process to ShutDown.
        (WebKit::ChildProcessProxy::abortProcessLaunchIfNeeded): Deleted.
        * Shared/ChildProcessProxy.h:
        
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool): Explicitly tell the network process to shut down.
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeWebPage): Move abortProcessLaunchIfNeeded() and the watchdog timer
          code to ChildProcessProxy::shutDownProcess.
        
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage): Send ChildProcess messages to ChildProcess::didReceiveMessage.

2015-05-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Network Cache: Make Data::adoptMap take the ownership of the file descriptor
        https://bugs.webkit.org/show_bug.cgi?id=144950

        Reviewed by Antti Koivisto.

        It will be required to implement ShareableResource for soup
        network backend. Also move the common code of Data to a common
        file and add mapToFile(). The mapFile version that receives a file
        descriptor has been renamed to adoptAndMapFile().

        * CMakeLists.txt: Add new file to compilation.
        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        (WebKit::NetworkCache::BlobStorage::add): Use mapToFile().
        * NetworkProcess/cache/NetworkCacheData.cpp: Added.
        (WebKit::NetworkCache::Data::mapToFile): Write the data to the
        given file and map it.
        (WebKit::NetworkCache::mapFile):
        (WebKit::NetworkCache::adoptAndMapFile):
        (WebKit::NetworkCache::computeSHA1):
        (WebKit::NetworkCache::bytesEqual):
        * NetworkProcess/cache/NetworkCacheData.h:
        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::adoptMap): Close the file descriptor.
        * NetworkProcess/cache/NetworkCacheDataSoup.cpp:
        (WebKit::NetworkCache::Data::Data): Use a constructor that
        receives a file descriptor instead of the one receiving
        Backing. If the file descriptor is not -1 then the Data is a map.
        (WebKit::NetworkCache::MapWrapper::~MapWrapper): Also close the
        file descriptor.
        (WebKit::NetworkCache::Data::adoptMap): Pass the file descriptor
        to the MapWrapper and create the Data passing the file descriptor.
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::openAndMapContentExtension): Use mapFile that receives a
        file path.
        (API::compiledToFile): Use adoptAndMapFile() and don't close the
        descriptor.

2015-05-16  Andy Estes  <aestes@apple.com>

        [iOS] WKPDFView should not follow javascript: links
        https://bugs.webkit.org/show_bug.cgi?id=145101

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick): Returned early if url's protocol is javascript:.
        (WebKit::WebPageProxy::navigateToURLWithSimulatedClick): Renamed to navigateToPDFLinkWithSimulatedClick to
        reflect that this function is exclusively for following PDF links.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView annotation:wasTouchedAtPoint:controller:]):
        (-[WKPDFView actionSheetAssistant:openElementAtLocation:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::navigateToPDFLinkWithSimulatedClick): Renamed from navigateToURLWithSimulatedClick.
        (WebKit::WebPage::navigateToURLWithSimulatedClick): Renamed to navigateToPDFLinkWithSimulatedClick.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-05-16  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Remote scrolling tree needs to coordinate scroll snap state during resize/rotations
        https://bugs.webkit.org/show_bug.cgi?id=145059
        <rdar://problem/20975978>

        Reviewed by Simon Fraser.

        The web view needs to update its scroll snap point offsets to take into account any
        adjustments to the view size caused by content insets. We also need to update the
        offstes after device rotation.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]): Retrieve the proper
        computed content inset for the view and incorporate into any scroll snap point adjustments.
        (-[WKWebView _updateVisibleContentRects]): If we have active scroll snap points, 
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::adjustTargetContentOffsetForSnapping): Update to account
        for content inset.
        (WebKit::RemoteScrollingCoordinatorProxy::shouldSnapForMainFrameScrolling): Also validate that the
        active index is valid.
        (WebKit::RemoteScrollingCoordinatorProxy::closestSnapOffsetForMainFrameScrolling): Update to track
        current active snap offset index.
        (WebKit::RemoteScrollingCoordinatorProxy::hasActiveSnapPoint): Added.
        (WebKit::RemoteScrollingCoordinatorProxy::nearestActiveSnapPoint): Added. It calculates the proper
        scroll position incorporating any snap point and content insets.

2015-05-15  Yongjun Zhang  <yongjun_zhang@apple.com>

        Don't reset the preview recognizer in [WKContentViewInteraction cleanupInteraction]
        https://bugs.webkit.org/show_bug.cgi?id=145081

        We shouldn't reset the recognizer in [WKContentViewInteraction cleanupInteraction] since we don't re-add it
        back to WKContentView when the process relaunched. Since we already add/remove it when the view is move into/
        removed from the window, we don't need reset it in cleanupInteraction.

        Reviewed by Dan Bernstein.

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

2015-05-15  James Savage  <james.savage@apple.com>

        REGRESSION (r181910): WKWebView incorrectly scales snapshot
        https://bugs.webkit.org/show_bug.cgi?id=145076

        Reviewed by Tim Horton.

        We added a fast path to snapshotting using IOSurfaces with
        http://trac.webkit.org/changeset/181910 which incorrectly determined
        scale and transform and resulted in bad snapshots in some situations.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        When snapshotting an IOSurface we need to compute our scale based off of
        the rect in the WKWebView coordinates, we also failed to account for
        non-zero origins in the snapshot rect. Remove an unused varible while
        we're here.

2015-05-15  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Fail to load old content extension files
        https://bugs.webkit.org/show_bug.cgi?id=145027

        Reviewed by Eric Carlson.

        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::openAndMapContentExtension):
        * UIProcess/API/APIUserContentExtensionStore.h:

2015-05-15  Jeremy Jones  <jeremyj@apple.com>

        Limit alternate fullscreen with linked on or after.
        https://bugs.webkit.org/show_bug.cgi?id=144894

        Reviewed by Dean Jackson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (shouldAllowAlternateFullscreen): Added.
        (-[WKWebView initWithFrame:configuration:]):

2015-05-15  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Back swipe tab snapshot takes a long time to be removed on bing.com
        https://bugs.webkit.org/show_bug.cgi?id=145061
        <rdar://problem/20939743>

        Reviewed by Tim Horton.

        When swiping back from a video search result to the list of video
        search results on bing.com, the back swipe gesture tab snapshot takes
        ~3 seconds to be removed, even though the page gets loaded almost
        instantly from PageCache. The tab snapshot should be removed as soon as
        the load is done.

        The issue is that we only cleared the back swipe gesture tab snapshot
        after PageClient::didFinishLoadForMainFrame() has been called. However,
        PageClient::didFinishLoadForMainFrame() was only being called by
        WebPageProxy if the main frame loaded *without* error. In case the main
        frame loaded with an error, only WebPageProxy::didFailLoadForFrame() is
        called, not WebPageProxy::didFinishLoadForFrame() and we would fail to
        remove the gesture snapshot until the 3 seconds timeout.

        This patch calls PageClient::didFinishLoadForMainFrame() from
        WebPageProxy::didFailLoadForFrame() so we remove the snapshot in the
        error case as well.

        The reason didFailLoadForFrame() is being called on bing.com video
        search results is because a "ping" load is aborted when the page is
        entering PageCache. Aborting any kind of resource load sets a
        "cancellation" error on the main document.

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

2015-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r183861): [SOUP] Downloads are broken when using the Network Process
        https://bugs.webkit.org/show_bug.cgi?id=144738

        Reviewed by Alexey Proskuryakov.

        When converting the main resource handle to a download, the
        NetworkResourceLoader is aborted, and the ResourceHandle is
        cleaned up aborting the download operation. We need to use a
        different ResourceHandle for the download operation.

        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::startWithHandle): Use ResourceHandle::releaseForDownload()
        instead of reusing the given handle.

2015-05-14  Brady Eidson  <beidson@apple.com>

        Rename connectionDidClose and related methods to be more clear.
        https://bugs.webkit.org/show_bug.cgi?id=145030

        Reviewed by Darin Adler.

        These methods were easy to confuse with "Connection::Client::didClose()", yet they
        were about something much more explicit: A child process being shut down by the UI Process.

        Let's call them as such.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::shutDownProcess):
        (WebKit::ChildProcessProxy::clearConnection): Deleted.
        (WebKit::ChildProcessProxy::connectionDidClose): Deleted.
        * Shared/ChildProcessProxy.h:

        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::processWillShutDown):
        * UIProcess/Databases/DatabaseProcessProxy.h:

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::processWillShutDown):
        * UIProcess/Network/NetworkProcessProxy.h:

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::processWillShutDown):
        * UIProcess/Plugins/PluginProcessProxy.h:

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::webProcessWillShutDown):
        (WebKit::WebFrameProxy::disconnect): Deleted.
        * UIProcess/WebFrameProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::webProcessWillShutDown):
        (WebKit::WebPageProxy::connectionDidClose): Deleted.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebProcessLifetimeTracker.cpp:
        (WebKit::WebProcessLifetimeTracker::webProcessWillShutDown):
        (WebKit::WebProcessLifetimeTracker::connectionDidClose): Deleted.
        * UIProcess/WebProcessLifetimeTracker.h:

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::processWillShutDown):
        (WebKit::WebProcessProxy::shutDown):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::disconnectFramesFromPage):
        (WebKit::WebProcessProxy::shouldTerminate):
        (WebKit::WebProcessProxy::requestTermination):
        (WebKit::WebProcessProxy::connectionDidClose): Deleted.
        (WebKit::WebProcessProxy::disconnect): Deleted.
        * UIProcess/WebProcessProxy.h:

2015-05-14  Zhuo Li  <zachli@apple.com>

        Some CFNetwork SPI to reset HSTS hosts added since a date should not be used on Yosemite.
        https://bugs.webkit.org/show_bug.cgi?id=145025.
        and
        rdar://problem/20646308.

        Reviewed by Alexey Proskuryakov.

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

2015-05-14  Timothy Horton  <timothy_horton@apple.com>

        Add a layout mode that scales down the view to try to fit the document
        https://bugs.webkit.org/show_bug.cgi?id=145022
        <rdar://problem/19790341>

        Reviewed by Dean Jackson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setShouldScaleViewToFitDocument):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setShouldScaleViewToFitDocument):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setShouldScaleViewToFitDocument):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Plumb shouldScaleViewToFitDocument through to the DrawingArea.

        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (+[WKViewLayoutStrategy layoutStrategyWithPage:view:mode:]):
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy initWithPage:view:mode:]):
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy updateLayout]):
        (-[WKViewDynamicSizeComputedFromMinimumDocumentSizeLayoutStrategy willChangeLayoutStrategy]):
        * UIProcess/API/C/WKLayoutMode.h:
        * UIProcess/API/Cocoa/_WKLayoutMode.h:
        Add a new layout mode, which just turns on shouldScaleViewToFitDocument,
        and otherwise behaves as normal.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setShouldScaleViewToFitDocument):
        (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        On every flush where either the document size or view size has changed,
        or layout is outstanding, do a layout with fixed layout off to determine
        whether the document fits inside the view. If it doesn't, scale it down
        to fit. This will require an extra layout for every resize while in the
        scaled-down state, but there is potential for future optimization.

2015-05-14  Anders Carlsson  <andersca@apple.com>

        Local storage origins should include origins with transient local storage
        https://bugs.webkit.org/show_bug.cgi?id=145017
        rdar://problem/10690447

        Reviewed by Sam Weinig.

        The transient local storage namespaces are used for third party data blocking and will stay
        around until the UI process exits so we need to be able to include website data from transient storage
        in the website data store APIs.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::TransientLocalStorageNamespace::origins):
        (WebKit::StorageManager::getLocalStorageOrigins):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):

2015-05-14  Beth Dakin  <bdakin@apple.com>

        Change range of possible forces for mouseforcechanged DOM event
        https://bugs.webkit.org/show_bug.cgi?id=144987
        -and corresponding-
        rdar://problem/20472802

        Reviewed by Tim Horton.

        Change to a 0-3 range.
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebMouseEvent):

2015-05-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add missing ENABLE(NETSCAPE_PLUGIN_API) build guards
        https://bugs.webkit.org/show_bug.cgi?id=144994

        Reviewed by Carlos Garcia Campos.

        This fixes the build when configured with Netscape plugin API
        support disabled.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_additional_plugins_directory):
        (webkitWebContextGetPluginThread):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2015-05-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Network Cache: NetworkProcess segfault when file system doesn't support xattrs
        https://bugs.webkit.org/show_bug.cgi?id=144953

        Reviewed by Martin Robinson.

        Return early if we fail to get the birthtime xattr.

        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h:
        (WebKit::NetworkCache::fileTimes):

2015-05-13  Daniel Bates  <dabates@apple.com>

        Rename ProcessThrottlerClient::{send, cancel}ProcessWillSuspend() to {send, cancel}PrepareToSuspend()
        https://bugs.webkit.org/show_bug.cgi?id=144619
        <rdar://problem/20812779>

        Reviewed by Andy Estes.

        The names of the functions ProcessThrottlerClient::{send, cancel}ProcessWillSuspend() are misnomers. These
        functions are called when the ProcessThrottler wants to prepare the process that it manages for suspension
        and changes its mind, respectively. That is, these functions do not actually correspond to the OS decision
        to suspend a process or cancel the suspension of a process, respectively. So, rename these functions and
        associated {Network, Web}ProcessProxy message names to better describe their purpose.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::prepareToSuspend):
        (WebKit::NetworkProcess::cancelPrepareToSuspend):
        (WebKit::NetworkProcess::processWillSuspend): Deleted.
        (WebKit::NetworkProcess::cancelProcessWillSuspend): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendPrepareToSuspend):
        (WebKit::NetworkProcessProxy::sendCancelPrepareToSuspend):
        (WebKit::NetworkProcessProxy::sendProcessWillSuspend): Deleted.
        (WebKit::NetworkProcessProxy::sendCancelProcessWillSuspend): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertion):
        * UIProcess/ProcessThrottlerClient.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcess::actualPrepareToSuspend): Formerly named prepareToSuspend.
        (WebKit::WebProcessProxy::sendPrepareToSuspend):
        (WebKit::WebProcessProxy::sendCancelPrepareToSuspend):
        (WebKit::WebProcessProxy::sendProcessWillSuspend): Deleted.
        (WebKit::WebProcessProxy::sendCancelProcessWillSuspend): Deleted.
        * UIProcess/WebProcessProxy.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::prepareToSuspend):
        (WebKit::WebProcess::cancelPrepareToSuspend):
        (WebKit::WebProcess::processWillSuspend): Deleted.
        (WebKit::WebProcess::cancelProcessWillSuspend): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2015-05-13  Anders Carlsson  <andersca@apple.com>

        Don't create a per-pool data store when using the modern API
        https://bugs.webkit.org/show_bug.cgi?id=144963
        rdar://problem/20331756

        Reviewed by Tim Horton.

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        Keep track of whether the process pool should have a data store.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetWebsiteDataStore):
        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        Update now that WebProcessPool::dataStore() no longer returns a reference.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        Only create a data store if the configuration states that we should.

        * UIProcess/WebProcessPool.h:
        Change dataStore() to return a pointer instead of a reference.

2015-05-13  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Sandbox violation reading SubmitDiagInfo.domains
        https://bugs.webkit.org/show_bug.cgi?id=144962
        rdar://problem/20719330

        Reviewed by Darin Adler.

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

2015-05-13  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * UIProcess/API/Cocoa/_WKOverlayScrollbarStyle.h:

2015-05-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK][CMake] Extra include directory when libnotify is present but disabled
        https://bugs.webkit.org/show_bug.cgi?id=144941

        Reviewed by Martin Robinson.

        Add LIBNOTIFY_INCLUDE_DIRS to WebKit2_INCLUDE_DIRECTORIES only if USE_LIBNOTIFY is true,
        rather than checking LIBNOTIFY_FOUND.

        * PlatformGTK.cmake:

2015-05-13  Beth Dakin  <bdakin@apple.com>

        Need SPI to set the overlay scroll bar style
        https://bugs.webkit.org/show_bug.cgi?id=144928
        -and corresponding-
        rdar://problem/20143614

        Reviewed by Anders Carlsson.

        Make scrollbarOverlayStyle a part of the creation parameters. 
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:

        New SPI.
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/_WKOverlayScrollbarStyle.h: Added.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setOverlayScrollbarStyle:]):
        (-[WKView _overlayScrollbarStyle]):

        Store m_scrollbarOverlayStyle on WebPageProxy, and set it to the WebProcess.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setOverlayScrollbarStyle):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::overlayScrollbarStyle):
        * WebKit2.xcodeproj/project.pbxproj:

        Return WebPage’s scrollbarOverlayStyle().
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::preferredScrollbarOverlayStyle):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

        Cache the scrollbarOverlayStyle() here for the WebProcess. 
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setScrollbarOverlayStyle):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::scrollbarOverlayStyle):
        * WebProcess/WebPage/WebPage.messages.in:

2015-05-13  Anders Carlsson  <andersca@apple.com>

        Rename some StorageManager functions to indicate that they work on local storage entries
        https://bugs.webkit.org/show_bug.cgi?id=144958
        First part of rdar://problem/10690447.

        Reviewed by Beth Dakin.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getLocalStorageOrigins):
        (WebKit::StorageManager::getLocalStorageDetailsByOrigin):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
        (WebKit::StorageManager::deleteAllLocalStorageEntries):
        (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
        (WebKit::StorageManager::getOrigins): Deleted.
        (WebKit::StorageManager::getStorageDetailsByOrigin): Deleted.
        (WebKit::StorageManager::deleteEntriesForOrigin): Deleted.
        (WebKit::StorageManager::deleteAllEntries): Deleted.
        (WebKit::StorageManager::deleteEntriesForOrigins): Deleted.
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):

2015-05-13  Joseph Pecoraro  <pecoraro@apple.com>

        Crash under WebKit::WebInspectorProxy::attachAvailabilityChanged sometimes opening new page
        https://bugs.webkit.org/show_bug.cgi?id=144957

        Reviewed by Simon Fraser.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::attachAvailabilityChanged):

2015-05-13  Joseph Pecoraro  <pecoraro@apple.com>

        Pass String as reference in more places
        https://bugs.webkit.org/show_bug.cgi?id=144769

        Reviewed by Daniel Bates.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::showMainResourceForFrame):
        * WebProcess/WebPage/WebInspectorUI.h:

2015-05-13  Timothy Horton  <timothy_horton@apple.com>

        View scale changes are temporarily lost after restoring a page from the page cache
        https://bugs.webkit.org/show_bug.cgi?id=144934

        Reviewed by Brady Eidson.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::scalePage):
        (WebKit::WebPage::scalePageInViewCoordinates):
        (WebKit::WebPage::pageScaleFactor):
        (WebKit::WebPage::viewScaleFactor):
        (WebKit::WebPage::scaleView):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::viewScaleFactor): Deleted.
        Get rid of m_viewScaleFactor, instead using Page::viewScaleFactor.

2015-05-13  Sungmann Cho  <sungmann.cho@navercorp.com>

        Minor cleanups to PluginProxy.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=144948

        Reviewed by Gyuyoung Kim.

        1. Remove unnecessary #include.
        2. Remove unnecessary return statement from PluginProxy::paint().

        No new tests, no behavior change.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):

2015-05-13  Daegyu Lee  <daegyu.lee@navercorp.com>

        REGRESSION(r176631): [EFL] Fullscreen feature doesn't work correctly on MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=144906

        Reviewed by Gyuyoung Kim.

        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::updateMinimumScaleToFit): Recover the r176631 condition to
        call applyScaleAfterRenderingContents function to apply correct scale.

2015-05-12  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17414349> In Safari, Debug > Get Bytecode Profile crashes the Web Content process
        https://bugs.webkit.org/show_bug.cgi?id=144944

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getBytecodeProfile): Don’t assert that m_perBytecodeProfiler isn’t null,
        because it is when the profiler is disabled, which is the default. In that case, return
        after sending back the empty string, rather than continuing to dereference a null pointer.

2015-05-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Crash when using <input type=file>

        <https://bugs.webkit.org/show_bug.cgi?id=144939>
        <rdar://problem/20172315>

        Reviewed by Andy Estes.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        Use a RefPtr to hold the WebOpenPanelResultListenerProxy, because the
        WKFileUploadPanel can outlive it.

2015-05-12  Simon Fraser  <simon.fraser@apple.com>

        Turn antialiased font dilation off by default
        https://bugs.webkit.org/show_bug.cgi?id=144940
        rdar://problem/20923031

        Reviewed by Sam Weinig.

        Turn antialised font dilation off by default.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2015-05-12  Daniel Bates  <dabates@apple.com>

        Make {Network, Web}ProcessProxy inherit from ProcessThrottleClient privately
        https://bugs.webkit.org/show_bug.cgi?id=144886

        Reviewed by Darin Adler.

        {Network, Web}ProcessProxy are implemented in terms of ProcessThrottleClient, an
        interface that defines the callbacks that ProcessThrottler makes to a client. We
        do not want to allow arbitrary callers to make use of the interface ProcessThrottleClient.
        So, we should use private inheritance to represent the relationship between
        {Network, Web}ProcessProxy and ProcessThrottleClient instead of public inheritance.

        Additionally make ProcessThrottler a instance variable of {Network, Web}ProcessProxy instead
        of holding a smart pointer to a ProcessThrottler instance because we always want to
        have a ProcessThrottler for each instance of {Network, Web}ProcessProxy.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy): Update code to work now that m_throttler
        is an instance of ProcessThrottler instead of a smart pointer to a ProcessThrottler instance.
        (WebKit::NetworkProcessProxy::didFinishLaunching): Update code to access functions of
        m_throttler by reference instead of by pointer.
        (WebKit::NetworkProcessProxy::didCancelProcessSuspension): Ditto.
        (WebKit::NetworkProcessProxy::processReadyToSuspend): Ditto.
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles): Ditto.
        * UIProcess/Network/NetworkProcessProxy.h: Inherit from ProcessThrottleClient privately.
        (WebKit::NetworkProcessProxy::throttler): Update code to work now that m_throttler is an
        instance of ProcessThrottler instead of a smart pointer to a ProcessThrottler instance.
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::ProcessThrottler): Update code to work now that m_process is
        a lvalue reference instead of a pointer.
        (WebKit::ProcessThrottler::updateAssertion): Ditto.
        (WebKit::ProcessThrottler::assertionWillExpireImminently): Ditto.
        * UIProcess/ProcessThrottler.h: Ditto.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy): Update code to work now that m_throttler is an
        instance of ProcessThrottler instead of a smart pointer to a ProcessThrottler instance. 
        (WebKit::WebProcessProxy::didFinishLaunching): Update code to access functions of
        m_throttler by reference instead of by pointer.
        (WebKit::WebProcessProxy::processReadyToSuspend): Ditto.
        (WebKit::WebProcessProxy::didCancelProcessSuspension): Ditto.
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles): Ditto.
        * UIProcess/WebProcessProxy.h: Inherit from ProcessThrottleClient privately.
        (WebKit::WebProcessProxy::throttler): Update code to work now that m_throttler is an
        instance of ProcessThrottler instead of a smart pointer to a ProcessThrottler instance.

2015-05-12  Anders Carlsson  <andersca@apple.com>

        Production builds should link against the shims directly
        https://bugs.webkit.org/show_bug.cgi?id=144922
        rdar://problem/19708579

        Reviewed by Dan Bernstein.

        * Configurations/NetworkService.xcconfig:
        Point to an Info.plist that has DYLD_INSERT_LIBRARIES set on 10.10 and earlier.
        Link directly against SecItemShim.dylib where possible.

        * Configurations/PluginProcessShim.xcconfig:
        Set the install name and install path.

        * Configurations/PluginService.32.xcconfig:
        Point to an Info.plist that has DYLD_INSERT_LIBRARIES set on 10.10 and earlier.
        Link directly against PluginProcessShim.dylib where possible.

        * Configurations/PluginService.64.xcconfig:
        Point to an Info.plist that has DYLD_INSERT_LIBRARIES set on 10.10 and earlier.
        Link directly against PluginProcessShim.dylib where possible.

        * Configurations/SecItemShim.xcconfig:
        Set the install name and install path.

        * Configurations/WebContentService.xcconfig:
        Point to an Info.plist that has DYLD_INSERT_LIBRARIES set on 10.10 and earlier.
        Link directly against WebProcessShim.dylib where possible.

        * Configurations/WebProcessShim.xcconfig:
        Set the install name and install path.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX-10.9-10.10.plist: Copied from Source/WebKit2/NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX.plist.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX.plist:
        Add an Info.plist for 10.9 and 10.10 and remove DYLD_INSERT_LIBRARIES from the non-legacy plist.

        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64-10.9-10.10.Info.plist: Copied from Source/WebKit2/PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        Add an Info.plist for 10.9 and 10.10 and remove DYLD_INSERT_LIBRARIES from the non-legacy plist.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX-10.9-10.10.plist: Copied from Source/WebKit2/WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist:
        Add an Info.plist for 10.9 and 10.10 and remove DYLD_INSERT_LIBRARIES from the non-legacy plist.

2015-05-12  Alexey Proskuryakov  <ap@apple.com>

        Undo a mistaken part of r184211.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::cookieStorageDirectory):
        * UIProcess/WebProcessPool.h:
        cookieStorageDirectory() is used on iOS, so bring it back.

2015-05-08  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Share cookie storage between UI process and secondary processes
        https://bugs.webkit.org/show_bug.cgi?id=144820
        rdar://problem/20572830

        Reviewed by Darin Adler.

        Pass a cookie storage descriptor that includes file path as well as other data that
        CFNetwork needs to use the same cookies storage as in another process (session cookies
        are still separate).

        While at it, started to clean up code that passes cookie storage path. It was mostly
        dead and unimplemented, only used in child processes when USE(SECCOMP_FILTERS) was enabled.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::WebProcessPool::platformDefaultCookieStorageDirectory): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::cookieStorageDirectory):
        * UIProcess/WebProcessPool.h:
        * UIProcess/efl/WebProcessPoolEfl.cpp:
        (WebKit::WebProcessPool::platformDefaultCookieStorageDirectory): Deleted.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::platformDefaultCookieStorageDirectory): Deleted.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2015-05-12  Chris Dumez  <cdumez@apple.com>

        [WK2] Log using diagnostic logging how far back in history we navigate
        https://bugs.webkit.org/show_bug.cgi?id=144919
        <rdar://problem/20920043>

        Reviewed by Gavin Barraclough.

        Log using diagnostic logging how far back in history we navigate.
        When a back navigation or a backward indexed navigation occurs, we
        log the delta: (HistoryListSize - 1) - NewHistoryItemIndex.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::goToItem):

2015-05-11  Sam Weinig  <sam@webkit.org>

        ChildProcess should take an os_activity
        https://bugs.webkit.org/show_bug.cgi?id=141781

        Reviewed by Ryosuke Niwa.

        * 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):
        Start an os_activity in the initializer for each XPC service.

        * config.h:
        Add HAVE_OS_ACTIVITY where available.

2015-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ debug build after r184197.

        * UIProcess/gtk/RedirectedXCompositeWindow.cpp: Add missing include.

2015-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [X11] Add XUniquePtr and XUniqueResource to automatically free X resources
        https://bugs.webkit.org/show_bug.cgi?id=144521

        Reviewed by Darin Adler.

        Use XUniquePtr and XUniqueResource to free X resources.

        * PlatformEfl.cmake: Add Source/WebCore/platform/graphics/x11 dir
        to the include dir list.
        * PlatformGTK.cmake: Ditto.
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createBackend): Do not pass the display to
        the BackingStoreBackendCairoX11 constructor.
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        (WebKit::RedirectedXCompositeWindow::~RedirectedXCompositeWindow):
        (WebKit::RedirectedXCompositeWindow::resize):
        (WebKit::RedirectedXCompositeWindow::cleanupPixmapAndPixmapSurface):
        (WebKit::RedirectedXCompositeWindow::surface):
        * UIProcess/gtk/RedirectedXCompositeWindow.h:
        (WebKit::RedirectedXCompositeWindow::windowID):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPostInitializeWindowless):
        (WebKit::NetscapePlugin::platformDestroy):
        (WebKit::NetscapePlugin::platformGeometryDidChange):
        (WebKit::NetscapePlugin::platformPaint):

2015-05-11  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/20878075> Trying to navigate to an invalid URL loads about:blank, but -[WKWebView URL] returns the invalid URL

        Reviewed by Alexey Proskuryakov.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): Added. Update internal state the
        same way we update it for server redirects, but don’t make client callbacks. Clients
        observing the URL property will see it change.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPageProxy.messages.in: Added DidChangeProvisionalURLForFrame.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidChangeProvisionalURL): Override this new
        FrameLoaderClient function to send a DidChangeProvisionalURLForFrame message to the UI
        process.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2015-05-11  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19773721> [iOS] Find on page feels like it zooms in too much
        https://bugs.webkit.org/show_bug.cgi?id=144891

        Reviewed by Darin Adler.

        Sometimes, Find on Page’s constant 1.6 scale factor is too much. Smart magnification is
        designed to choose a scale factor that is just right.

        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/ios/SmartMagnificationController.messages.in: Added Magnify message.
        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::magnify): Added. Handle the new message using
        -[WKContentView _soomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:].
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::updateFindIndicator): Instead of zooming to the selection rect,
        get the surrounding render rect (the area we would target for a double-tap at the beginning
        of the selection), and tell the magnification controller to target it. Use the center of the
        start of the selection as the origin.

2015-05-11  Brent Fulgham  <bfulgham@apple.com>

        Scroll snap logic should be triggered when resizing the WebView
        https://bugs.webkit.org/show_bug.cgi?id=142590
        <rdar://problem/20125088>

        Reviewed by Simon Fraser.

        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (RemoteScrollingCoordinatorProxy::closestSnapOffsetForMainFrameScrolling): Modify use of 'closestSnapOffset' to satisfy the additional
        argument I added. This is currently not used for anything on iOS.
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm: Ditto.

2015-05-11  Andreas Kling  <akling@apple.com>

        Force a rebuild of JSNPObject.cpp on bots.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):

2015-05-11  Anders Carlsson  <andersca@apple.com>

        Simplify shim path computation
        https://bugs.webkit.org/show_bug.cgi?id=144884
        Part of rdar://problem/19708579.

        Reviewed by Sam Weinig.

        Factor the code that computes the shim path out into a separate function. Also make this mac only
        since we don't have any shims on iOS.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::computeProcessShimPath):
        (WebKit::addDYLDEnvironmentAdditions):

2015-05-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix

        Unreviewed.

        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::compiledToFile):

2015-05-11  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Support domain-specific rules and exceptions.
        https://bugs.webkit.org/show_bug.cgi?id=144833

        Reviewed by Darin Adler.

        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::WebCompiledContentExtension::filtersWithoutDomainsBytecode):
        (WebKit::WebCompiledContentExtension::filtersWithoutDomainsBytecodeLength):
        (WebKit::WebCompiledContentExtension::filtersWithDomainsBytecode):
        (WebKit::WebCompiledContentExtension::filtersWithDomainsBytecodeLength):
        (WebKit::WebCompiledContentExtension::domainFiltersBytecode):
        (WebKit::WebCompiledContentExtension::domainFiltersBytecodeLength):
        (WebKit::WebCompiledContentExtension::bytecode): Deleted.
        (WebKit::WebCompiledContentExtension::bytecodeLength): Deleted.
        * Shared/WebCompiledContentExtension.h:
        * Shared/WebCompiledContentExtensionData.cpp:
        (WebKit::WebCompiledContentExtensionData::encode):
        (WebKit::WebCompiledContentExtensionData::decode):
        * Shared/WebCompiledContentExtensionData.h:
        (WebKit::WebCompiledContentExtensionData::WebCompiledContentExtensionData):
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::ContentExtensionMetaData::fileSize):
        (API::encodeContentExtensionMetaData):
        (API::decodeContentExtensionMetaData):
        (API::compiledToFile):
        (API::createExtension):
        Keep track of 3 different types of bytecode to be able to handle domain-specific rules.

2015-05-11  Tim Horton  <timothy_horton@apple.com>

        Page overlay action context override should indicate the source of the request
        https://bugs.webkit.org/show_bug.cgi?id=144832
        <rdar://problem/20562594>

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        * WebProcess/WebPage/WebPageOverlay.cpp:
        (WebKit::WebPageOverlay::actionContextForResultAtPoint):
        * WebProcess/WebPage/WebPageOverlay.h:
        (WebKit::WebPageOverlay::Client::actionContextForResultAtPoint):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Add a parameter to WKBundlePageOverlayActionContextForResultAtPoint so that
        clients can tell whether the requested action context should be targetted
        at an action menu or immediate action.

2015-05-11  Daniel Bates  <dabates@apple.com>

        [iOS] Close all open databases in expiration handler of process assertion
        https://bugs.webkit.org/show_bug.cgi?id=144661
        <rdar://problem/20845052>

        Reviewed by Darin Adler.

        For WebKit2, close all open databases when the process assertion expiration
        handler is called.

        When the process assertion expiration handler is called we dispatch a synchronous
        message called ProcessWillSuspendImminently to the {Web, Network} processes to inform
        them that they will be suspended imminently. The {Web, Network} process will always
        service this message regardless if they were waiting for another message. In the
        WebProcess, we will close all open databases among other tasks upon receiving this
        message. In the NetworkProcess, we will purge some data from memory.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveSyncMessage): Modified to call NetworkProcess::didReceiveSyncNetworkProcessMessage()
        to process the synchronous ProcessWillSuspendImminently message.
        (WebKit::NetworkProcess::processWillSuspendImminently): Added; free some memory.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in: Added synchronous message ProcessWillSuspendImminently.
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::sendSync): Added parameter sendSyncFlags so that we can send
        a sync message with flag IPC::InterruptWaitingIfSyncMessageArrives to cause the {Web, Network}Process
        to process the message regardless of whether it is waiting for another message.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::sendProcessWillSuspendImminently): Added. Sends the message
        ProcessWillSuspendImminently to the NetworkProcess.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAndUIAssertion::setClient): Added.
        * UIProcess/ProcessAssertion.h: Added abstract class ProcessAssertionClient.
        (WebKit::ProcessAssertionClient::~ProcessAssertionClient): Added.
        (WebKit::ProcessAssertion::setClient): Added.
        (WebKit::ProcessAssertion::client): Added.
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::didConnectToProcess):
        (WebKit::ProcessThrottler::assertionWillExpireImminently): Added; implements the ProcessAssertionClient
        interface. Notify the process throttler clients that the assertion is near expiration.
        * UIProcess/ProcessThrottler.h:
        * UIProcess/ProcessThrottlerClient.h: Added 
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendProcessWillSuspendImminently): Added. Sends the message
        ProcessWillSuspendImminently to the WebProcess.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager addClient:]): Added.
        (-[WKProcessAssertionBackgroundTaskManager removeClient:]): Added.
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]): Modified expiration handler
        to notify ProcessAssertionClient clients that the assertion is near expiration.
        (WebKit::ProcessAssertion::~ProcessAssertion): Remove the client on destruction.
        (WebKit::ProcessAndUIAssertion::setClient): Added.
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::closeAllDatabases): Added; turns around and calls DatabaseManager::closeAllDatabases().
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage): Call WebProcess::didReceiveSyncWebProcessMessage() to process
        the synchronous ProcessWillSuspendImminently message. Removed logging for an unhandled synchronous message
        since WebProcess::didReceiveSyncWebProcessMessage() will ASSERT_NOT_REACHED() for such a message.
        (WebKit::WebProcess::prepareToSuspend): Extracted code from WebProcess::processWillSuspend() so that it can
        be used from both WebProcess::processWillSuspend() and WebProcess::processWillSuspendImminently(). And modified
        it to conditionally dispatch a ProcessReadyToSuspend message to the WebProcessProxy. We only want to dispatch
        such a message as part of a coordinated suspension by the ProcessThrottler. That is, we do not want to dispatch
        the ProcessReadyToSuspend message when the background assertion is near expiration (i.e. WebProcess::processWillSuspendImminently()
        is called).
        (WebKit::WebProcess::processWillSuspendImminently): Added. Suspend all open databases among other tasks.
        (WebKit::WebProcess::processWillSuspend): Implemented in terms of WebProcess::prepareToSuspend().
        (WebKit::WebProcess::processSuspensionCleanupTimerFired): Modified to conditionally dispatch a ProcessReadyToSuspend
        message to the WebProcessProxy.
        (WebKit::WebProcess::processDidResume): Stop the suspension cleanup timer, which may be active if the WebProcess
        did not mark all its graphics layers as volatile before process suspension.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Added synchronous message ProcessWillSuspendImminently.

2015-05-10  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Use Ref instead of PassRefPtr in WebCore/page
        https://bugs.webkit.org/show_bug.cgi?id=144841

        Reviewed by Darin Adler.

        To kill PassRefPtr, this patch replaces PassRefPtr with Ref or RefPtr
        in WebCore/page.

        (WebKit::WebUserContentController::WebUserContentController):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setTextIndicator):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::WebUserContentController):

2015-05-10  Philip Chimento  <philip.chimento@gmail.com>

        [GTK][SOUP] Web and Network processes don't know how to get memory size on OSX
        https://bugs.webkit.org/show_bug.cgi?id=144554

        Reviewed by Darin Adler.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformSetCacheModel): Use WTF::ramSize()
        instead of local function. Also use WTF::MB instead of dividing by
        1024 * 1024.
        (WebKit::getMemorySize): Deleted.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformSetCacheModel): Ditto.
        (WebKit::getMemorySize): Deleted.

2015-05-10  Yongjun Zhang  <yongjun_zhang@apple.com>

        Use preview view controller from WebKitSystemInterface.
        https://bugs.webkit.org/show_bug.cgi?id=144836

        Add a property _allowsLinkPreview to WKWebView so that we can turn on/off preview at runtime. Also,
        for client that doesn't provide preview view controller, use the default view controller prepared
        by WebKitSystemInterface.

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _allowsLinkPreview]):
        (-[WKWebView _setAllowsLinkPreview:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Add _allowsLinkPreview property
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView willMoveToWindow:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _registerPreviewInWindow:]):
        (-[WKContentView _unregisterPreviewInWindow:]):
        (-[WKContentView previewViewControllerForPosition:inSourceView:]): : For client that doesn't provide
            preview delegate, use preview view controller in WebKitSystemInterface.
        (-[WKContentView commitPreviewViewController:]):

2015-05-10  Darin Adler  <darin@apple.com>

        Fix internal Apple builds on Mavericks.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dismissContentRelativeChildWindows]): Added missing conditionals around
        some code that is for OS X 10.10 or newer only. There were similar conditionals around
        other nearby code in this file, and around other uses of the same method in other files,
        so matched the style.

2015-05-10  Dan Bernstein  <mitz@apple.com>

        iOS internal build fix.

        * Platform/mac/MenuUtilities.mm:

2015-05-10  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove unnecessary semicolons.
        https://bugs.webkit.org/show_bug.cgi?id=144844

        Reviewed by Darin Adler.

        No new tests, no behavior change.

        * Shared/Downloads/mac/DownloadMac.mm:
        (-[WKDownloadAsDelegate download:shouldDecodeSourceDataOfMIMEType:]):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::idToHistoryItemMap):

2015-05-10  Darin Adler  <darin@apple.com>

        Fix build.

        * Platform/mac/MenuUtilities.mm: Added includes that were somehow omitted in what
        I committed before.

2015-05-10  Darin Adler  <darin@apple.com>

        [Cocoa] Don't soft link DataDetectorsCore
        https://bugs.webkit.org/show_bug.cgi?id=144837

        Reviewed by Dan Bernstein.

        * Platform/mac/MenuUtilities.mm: Use DataDetectorsSPI.h instead of doing it here.

        * WebProcess/WebPage/mac/WebPageMac.mm: Removed unneeded include of unused header,
        DataDetectorsSPI.h.

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

        Deployment-target __NSi_ and __NSd_ definitions in WKFoundation.h are redundant
        https://bugs.webkit.org/show_bug.cgi?id=144831

        Reviewed by Sam Weinig.

        Reverted r182846 and r182904.

        * Shared/API/Cocoa/WKFoundation.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-05-09  Yoav Weiss  <yoav@yoav.ws>

        Remove the PICTURE_SIZES build flag
        https://bugs.webkit.org/show_bug.cgi?id=144679

        Reviewed by Benjamin Poulain.

        Removed the PICTURE_SIZES build time flag.

        * Configurations/FeatureDefines.xcconfig:

2015-05-08  Beth Dakin  <bdakin@apple.com>

        Shuffle touch-related code to keep the internal builds working
        https://bugs.webkit.org/show_bug.cgi?id=144812

        Reviewed by Benjamin Poulain.

        * Shared/NativeWebTouchEvent.h:
        * Shared/WebEvent.h:
        * Shared/WebEventConversion.cpp:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::extractWebTouchPoint):
        (WebKit::extractWebTouchPoint): Deleted.
        * Shared/ios/WebPlatformTouchPointIOS.cpp:

2015-05-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/20757196> NSInternalInconsistencyException raised in -[NSString encodeWithCoder:] beneath createEncodedObject when using WKRemoteObjectEncoder for Safari AutoFill
        https://bugs.webkit.org/show_bug.cgi?id=144818

        Reviewed by Anders Carlsson.

        Allow NSString instances that contain unpaired surrogates to be encoded by
        WKRemoteObjectCoder by encoding them directly rather than using
        -[NSString encodeWithCoder:].

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (encodeString): Added. Sets an API::String as the object to encode.
        (encodeObject): Changed to use encodeString for NSString instances.
        (decodeString): Added. Gets an API::String from the dictionary and returns it as an
        NSString.
        (decodeObject): Changed to use decodeString for NSString instances.

2015-05-08  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createFencePort):

2015-05-08  Timothy Horton  <timothy_horton@apple.com>

        Periodically repaint during resize while using the DynamicSizeWithMinimumViewSize layout strategy
        https://bugs.webkit.org/show_bug.cgi?id=144816

        Reviewed by Simon Fraser.

        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy initWithPage:view:mode:]):
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy _updateTransientScale:]):
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy updateLayout]):
        Factor out _updateTransientScale from updateLayout.
        Keep track of the last viewScaleFactor that we know is being displayed
        (_lastCommittedViewScale) and use that for computing the transient scale,
        so that we can recompute the transient scale while the UI process's notion
        of the actual view scale might have moved ahead of what the Web process has
        painted.

2015-05-08  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/WebPageProxy.cpp:

2015-05-08  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createFencePort):

2015-05-08  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createFencePort):

2015-05-08  Timothy Horton  <timothy_horton@apple.com>

        Flip the direction of the fence in scaleViewAndUpdateGeometryFenced
        https://bugs.webkit.org/show_bug.cgi?id=144810

        Reviewed by Simon Fraser.

        Send the fence from the Web process to the UI process, instead of vice versa.
        This means that we won't keep the UI process CAContext blocked for the whole
        time that the Web process is doing layout/painting/etc. Instead, we'll start
        blocking the Web process CAContext immediately after flushing and before committing,
        and send the fence to the UI process to be applied immediately. This minimizes
        the amount of time in both processes spent blocked on the fence.

        * Platform/mac/LayerHostingContext.h:
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createFencePort):
        Add createFencePort, which creates a MachSendRight wrapping a CA fence port.
        Note that you must setFencePort() with this port if you want the LayerHostingContext's
        CAContext to block on it!

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scaleViewAndUpdateGeometryFenced):
        (WebKit::WebPageProxy::machSendRightCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Create a callback and send it to the Web process along with scaleViewAndUpdateGeometryFenced.

        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy updateLayout]):
        When called back, install the fence port in our CAContext; when the commit goes through,
        remove the transient scale as we did previously.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::replyWithFenceAfterNextFlush):
        (WebKit::DrawingArea::updateGeometry): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaleViewAndUpdateGeometryFenced):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Instead of installing a fence created in the UI process, tell the DrawingArea
        to create one and reply to the UI process with it after the next flush.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::replyWithFenceAfterNextFlush):
        After flushing, before committing, create a fence and reply to any
        callbacks that requested fences, and install it in our context.

2015-05-08  Michael Catanzaro  <mcatanzaro@igalia.com>, Martin Robinson <mrobinson@igalia.com>

        [GTK] Checks for DEVELOPMENT_BUILD are all wrong
        https://bugs.webkit.org/show_bug.cgi?id=144746

        Reviewed by Carlos Garcia Campos.

        Use ENABLE(DEVELOPER_MODE) rather than DEVELOPMENT_BUILD.

        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        (WebKit::findWebKitProcess):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (injectedBundleDirectory):
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::enchantTextChecker):

2015-05-08  Anders Carlsson  <andersca@apple.com>

        Fix ProcessLauncher port leak
        https://bugs.webkit.org/show_bug.cgi?id=144807
        rdar://problem/20593291

        Reviewed by Sam Weinig.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        xpc_dictionary_set_mach_send increments the send right count so make sure to
        balance it with a call to mach_port_deallocate.

2015-05-08  Beth Dakin  <bdakin@apple.com>

        Fix performance tests after r183954
        https://bugs.webkit.org/show_bug.cgi?id=144805

        Reviewed by Alexey Proskuryakov.

        Web* is traditionally a WK1 prefix, so use the WK2 prefix instead in WK2 so that 
        we don’t have two classes with the same name in the two projects.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _defaultAnimationController]):

2015-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose allowFileAccessFromFileURLs setting to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=144748

        Reviewed by Sergio Villar Senin.

        This is needed by local applications loaded as a file URI that do XMLHttpRequests.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_allow_file_access_from_file_urls):
        (webkit_settings_set_allow_file_access_from_file_urls):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:

2015-05-08  Andreas Kling  <akling@apple.com>

        Optimize serialization of quoted JSON strings.
        <https://webkit.org/b/144754>

        Reviewed by Darin Adler.

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::asJSON): Use the new StringBuilder API.

2015-05-08  Commit Queue  <commit-queue@webkit.org>

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

        "It broke all the GTK+ tests" (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK] Checks for DEVELOPMENT_BUILD are all wrong"
        https://bugs.webkit.org/show_bug.cgi?id=144746
        http://trac.webkit.org/changeset/183945

2015-05-07  Conrad Shultz  <conrad_shultz@apple.com>

        Don't register for Lookup notifications until needed
        https://bugs.webkit.org/show_bug.cgi?id=144783

        Reviewed by Tim Horton.

        * UIProcess/API/mac/WKView.mm:
        Add a WKViewData ivar to track whether we've already registered for popover notifications.
        (-[WKView _prepareForDictionaryLookup]):
        Added; moved notification registration from -[WKView initWithFrame:processPool:configuration:webView:.
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        Move notification registration to -_prepareForDictionaryLookup.

        * UIProcess/API/mac/WKViewInternal.h:
        Expose -_prepareForDictionaryLookup.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Send -[WKView _prepareForDictionaryLookup].

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

2015-05-07  Commit Queue  <commit-queue@webkit.org>

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

        Broke js/dom/JSON-stringify.html (Requested by kling on
        #webkit).

        Reverted changeset:

        "Optimize serialization of quoted JSON strings."
        https://bugs.webkit.org/show_bug.cgi?id=144754
        http://trac.webkit.org/changeset/183961

2015-05-07  Anders Carlsson  <andersca@apple.com>

        Build fixes.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        Use the regular init method.

        * UIProcess/mac/WKSharingServicePickerDelegate.mm:
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleSelectionServiceClick):
        Pass empty dictionaries instead of nil.

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

        ASSERTION when pasting text into the WebInspector console
        https://bugs.webkit.org/show_bug.cgi?id=144774

        Reviewed by Ryosuke Niwa.

        Fix assertion in didChangeSelection() meant to check that calling
        editorState() does not cause a synchronous layout. The assertion
        was not correct as it was relying on FrameView::needsLayout() and
        we would hit it if calling editorState() would schedule a layout.
        Instead, the new assertion relies on FrameView::layoutCount(),
        which is more accurate.

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

2015-05-07  Andreas Kling  <akling@apple.com>

        Optimize serialization of quoted JSON strings.
        <https://webkit.org/b/144754>

        Reviewed by Darin Adler.

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::asJSON): Use the new StringBuilder API.

2015-05-07  Martin Robinson  <mrobinson@igalia.com>

        Followup fixes to r183936

        I neglected to include a few review comments when I landed the patch.

        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::checkerState): Remove double semicolons.
        (WebKit::updateStateForAllProcessPools): Use range-based-for loop here and
        give the function a better name.
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled): Use new function name
        (WebKit::TextChecker::setGrammarCheckingEnabled):Use new function name
        (WebKit::TextChecker::ignoreWord): Fix unused parameter warning.
        (WebKit::updateStateForAllContexts): Deleted.

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

        [GTK] Checks for DEVELOPMENT_BUILD are all wrong
        https://bugs.webkit.org/show_bug.cgi?id=144746

        Reviewed by Martin Robinson.

        Use DEVELOPER_MODE rather than DEVELOPMENT_BUILD.

        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        (WebKit::findWebKitProcess):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (injectedBundleDirectory):
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::enchantTextChecker):

2015-05-06  Dean Jackson  <dino@apple.com>

        Handle backdrop views that have to tile
        https://bugs.webkit.org/show_bug.cgi?id=142317
        <rdar://problem/20049088>

        Reviewed by Simon Fraser.

        Take 2 - this was rolled out because Mavericks was crashing.

        Add some better logging for custom appearance.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):

2015-05-07  Sungmann Cho  <sungmann.cho@navercorp.com>

        Add PLUGIN_ARCHITECTURE(X11) around m_frameRectInWindowCoordinates in NetscapePlugin.
        https://bugs.webkit.org/show_bug.cgi?id=144490

        Reviewed by Darin Adler.

        m_frameRectInWindowCoordinates in NetscapePlugin is currently being used only for
        the windowed plugins, and the windowed plugins are only supported on X11. So we can
        guard it with PLUGIN_ARCHITECTURE(X11).

        No new tests, no behavior change.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::geometryDidChange):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:

2015-05-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Revert "Introducing the Platform Abstraction Layer (PAL)"
        https://bugs.webkit.org/show_bug.cgi?id=144751

        Unreviewed.

        PAL should be a new target inside WebCore, rather than a top-level folder.

        * Configurations/FeatureDefines.xcconfig: Updated

2015-05-07  Jer Noble  <jer.noble@apple.com>

        [WK2][Fullscreen] Fullscreen video does not enter low-power mode.
        https://bugs.webkit.org/show_bug.cgi?id=144744

        Reviewed by Darin Adler.

        One of the requirements of entering low-power compositing mode is that no masking layers
        are present in any of the ancestors of the fullscreen video layer. So once our fullscreen
        transition animation completes, remove the mask layer entirely from our clipping layer.
        This means it needs to be re-created and added when entering fullscreen, rather than just
        at initialization time.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):

2015-05-07  Martin Robinson  <mrobinson@igalia.com>

        [GTK] All spell checking layout tests fail
        https://bugs.webkit.org/show_bug.cgi?id=144648

        Reviewed by Carlos Garcia Campos.

        Simplify and complete the GTK+ spell-checking implementation. Instead of using
        the EFL/GTK+ only WKTextChecker interface, directly implement Enchant spell-checking
        in TextCheckerGtk. The per-context spell checking API is an illusion, since all
        WKTextChecker implementations will adjust the same singleton. This can be a first step
        toward removing it entirely.

        Also complete the implementation of the TextChecker interface by duplicating the EFL code,
        which reuses other methods in the same class. Eventually this duplication will collapse,
        once GTK+ and EFL can share an Enchant implementation.

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitTextChecker.cpp: Removed.
        * UIProcess/API/gtk/WebKitTextChecker.h: Removed.
        * UIProcess/API/gtk/WebKitWebContext.cpp: Remove WebTextChecker usage and
        replace it with calls directly to the TextChecker singleton via static methods.
        * UIProcess/TextChecker.h:
        * UIProcess/gtk/TextCheckerGtk.cpp: Move the WebTextChecker enchant implementation
        here and reuse the EFL version of WebKit::TextChecker::requestCheckingOfString.
        Also initialize languages properly when building for developer builds. This
        allows WebKitTestRunner to work even when it doesn't explicitly set the languages.

2015-05-07  Ada Chan  <adachan@apple.com>

        Fix a couple of cases where the backForwardListState's currentIndex is not set correctly in WebBackForwardList::backForwardListState().
        https://bugs.webkit.org/show_bug.cgi?id=144666

        Reviewed by Darin Adler.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backForwardListState):
        If the first item is filtered out and the currentIndex is 0, don't decrement currentIndex.
        If all the items are filtered out, set currentIndex to the uninitialized value.

2015-05-07  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] Remove Windows cruft
        https://bugs.webkit.org/show_bug.cgi?id=144745

        Reviewed by Darin Adler.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::getMemorySize):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<WebCore::GraphicsSurfaceToken>::encode):
        (IPC::ArgumentCoder<WebCore::GraphicsSurfaceToken>::decode):
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::getMemorySize):

2015-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r182032): [GTK] Production build is broken after r182032
        https://bugs.webkit.org/show_bug.cgi?id=144736

        Reviewed by Martin Robinson.

        The problem is that r182032 moved the NetworkProcess sources from
        WebKit2 sources to NetworkProcess sources. That's not a problem
        for developer builds where all internal symbols are exported, but
        doesn't work for production builds because all those internal
        symbols are private.

        * CMakeLists.txt: Use a different name for common network process
        sources variable.
        * PlatformMac.cmake: Append common network process sources to the
        network process source list for Mac.

2015-05-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19317140> [Xcode] Remove usage of AspenFamily.xcconfig in Source/
        https://bugs.webkit.org/show_bug.cgi?id=144727

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Don’t include AspenFamily.xcconfig, and define
        INSTALL_PATH_PREFIX and LD_DYLIB_INSTALL_NAME for the iOS 8.x Simulator.
        * Configurations/WebKit2.xcconfig: Define INSTALL_PATH_ACTUAL and let INSTALL_PATH be
        derived from it and INSTALL_PATH_PREFIX. Don’t override DYLIB_INSTALL_NAME_BASE for iOS,
        because we define LD_DYLIB_INSTALL_NAME directly where needed.

2015-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.9.1 release.

        * gtk/NEWS: Add release notes for 2.9.1.

2015-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove dock button from Web Inspector window
        https://bugs.webkit.org/show_bug.cgi?id=144728

        Reviewed by Sergio Villar Senin.

        We added the dock buttons to the headerbar, because they were
        removed from the inspector toolbar, but with the new tabbed
        design, the dock buttons are back in the toolbar and look redundant.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::createInspectorWindow):
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged):
        (WebKit::WebInspectorProxy::dockButtonClicked): Deleted.

2015-05-06  Jer Noble  <jer.noble@apple.com>

        [WK2][Fullscreen] Elements whose children extend beyond their bounds are clipped in fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=144716

        Reviewed by Darin Adler.

        We create a mask animation for the transition between windowed and fullscreen modes, on the
        assumption that the element being taken into fullscreen mode does not have visible children
        who extend beyond that elements bounds. This assumption breaks down in the case where div
        with absolutely positioned children is taken fullscreen. While we can't necessarily make the
        transition look correct in this case, we can remove the mask after the transition completes.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::removeAllMediaKeyStorageForOriginPath):

2015-05-06  Jinwoo Jeong  <jw00.jeong@samsung.com>

        Fix a build break on EFL debug build
        https://bugs.webkit.org/show_bug.cgi?id=144654

        Reviewed by Gyuyoung Kim.

        No new tests, just build fix.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebKit::CoordinatedGraphicsScene::paintToGraphicsContext):

2015-05-06  Daniel Bates  <dabates@apple.com>

        [iOS][WK2] Pause/resume database thread when UIProcess enters/leaves the background
        https://bugs.webkit.org/show_bug.cgi?id=144657
        <rdar://problem/18894598>

        Reviewed by Andy Estes.

        Pause and resume the database thread when the UIProcess enters and leaves the background,
        respectively, so that we avoid WebProcess termination due to holding a locked SQLite
        database file when the WebProcess is suspended. This behavior matches the analagous
        behavior in Legacy WebKit.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _applicationDidEnterBackground:]): Call WebPageProxy::applicationDidEnterBackground()
        when the UIProcess enters the background.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationDidEnterBackground): Added; notify the WebProcess to pause the database thread.
        We temporarily take out background assertion on the WebProcess before sending this notification to ensure that the
        WebProcess is running to receive it. We'll release this assertion when the WebProcess replies that it received the
        notification.
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::setPauseAllDatabases): Added; turns around and calls DatabaseManager::setPauseAllDatabases().
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Add message ApplicationDidEnterBackground(). Also,
        add empty lines to help demarcate this message and the other UIKit application lifecycle-related
        messages from the rest of the list of messages.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationWillEnterForeground): Resume the database thread.
        (WebKit::WebPage::applicationDidEnterBackground): Pause the database thread.

2015-05-06  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] ewk_view_page_contents_get() API test is flaky
        https://bugs.webkit.org/show_bug.cgi?id=144683

        Reviewed by Gyuyoung Kim.

        Callback of WKPageGetContentsAsMHTMLData contains WKData which does not contain null terminated character.

        * UIProcess/API/efl/ewk_view.cpp: Pass the data of string instead of WKData directly.
        (ewkViewPageContentsAsMHTMLCallback):

2015-05-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Docking Toolbar Buttons do not respect Docking Availability
        https://bugs.webkit.org/show_bug.cgi?id=144714

        Reviewed by Timothy Hatcher.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::attachAvailabilityChanged):
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::setDockingUnavailable):
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.messages.in:
        When docking availability changes, inform the inspector page
        so it can respond by updating its UI.

2015-05-06  Joonghun Park  <jh718.park@samsung.com>

        [WK2] Simplify AsyncRequestImpl::ArgumentType parameters
        https://bugs.webkit.org/show_bug.cgi?id=144689

        Reviewed by Darin Adler.

        Remove duplicated typename and ::type from AsyncRequestImpl related
        function parameters.

        * Shared/AsyncRequest.h:

2015-05-06  Commit Queue  <commit-queue@webkit.org>

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

        crashes on mavericks (Requested by dino on #webkit).

        Reverted changeset:

        "Handle backdrop views that have to tile"
        https://bugs.webkit.org/show_bug.cgi?id=142317
        http://trac.webkit.org/changeset/183894

2015-05-06  Brady Eidson  <beidson@apple.com>

        Addition review followup for:
        Crash executing null AsyncRequest in IDB code.
        <rdar://problem/18854856> and https://bugs.webkit.org/show_bug.cgi?id=144715

        Reviewed by Darin Adler.

        This patch adds a layer on top of the UniqueIDBDatabase request map to catch this coding mistake in the future. 
 
         * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::didCompleteBoolRequest): Get rid of the ASSERT and the temporary variable,
          make it a single line which reads better.
        (WebKit::UniqueIDBDatabase::didPutRecordInBackingStore): Ditto.
        (WebKit::UniqueIDBDatabase::didGetRecordFromBackingStore): Ditto.
        (WebKit::UniqueIDBDatabase::didOpenCursorInBackingStore): Ditto.
        (WebKit::UniqueIDBDatabase::didAdvanceCursorInBackingStore): Ditto.
        (WebKit::UniqueIDBDatabase::didIterateCursorInBackingStore): Ditto.
        (WebKit::UniqueIDBDatabase::didCountInBackingStore): Ditto.
        (WebKit::UniqueIDBDatabase::didDeleteRangeInBackingStore): Ditto.
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h: Ditto.

        Add the class AsyncRequestMap which shadows a HashMap but does aggressive runtime checks
        in ::take() to make sure the same request was not dispatched twice in a row, and makes sure we
        never try to execute a null AsyncRequest by way of a RELEASE_ASSERT.
        * Shared/AsyncRequest.h:
        (WebKit::AsyncRequestMap::AsyncRequestMap):
        (WebKit::AsyncRequestMap::take):
        (WebKit::AsyncRequestMap::add):
        (WebKit::AsyncRequestMap::clear):
        (WebKit::AsyncRequestMap::values):

2015-05-06  Brady Eidson  <beidson@apple.com>

        Crash executing null AsyncRequest in IDB code.
        <rdar://problem/18854856> and https://bugs.webkit.org/show_bug.cgi?id=144715

        Reviewed by Darin Adler.

        When UniqueIDBDatabase fails to execute an operation on the database work queue it usually
        dispatches an AsyncRequest ID back to the main thread with an error callback.

        For two of its operations it would then also dispatch the success callback.

        In those cases the main thread would first take the AsyncRequest for the error callback out
        of a map and then execute it.

        It would then try to take the same AsyncRequest out of the map again, fail to do so, then
        execute a null AsyncRequest.

        This patch fixes the two functions to not dispatch both an error and success callback.

        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::countInBackingStore): Return after dispatching the error callback.
        (WebKit::UniqueIDBDatabase::deleteRangeInBackingStore): Ditto.

2015-05-06  Dean Jackson  <dino@apple.com>

        Handle backdrop views that have to tile
        https://bugs.webkit.org/show_bug.cgi?id=142317
        <rdar://problem/20049088>

        Reviewed by Simon Fraser.

        Add some better logging for custom appearance.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):

2015-05-06  Chris Dumez  <cdumez@apple.com>

        Disable network cache efficacy logging
        https://bugs.webkit.org/show_bug.cgi?id=144703
        <rdar://problem/20439143>

        Reviewed by Andreas Kling.

        Disable network cache efficacy logging by default as we have sufficient
        data for now.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):

2015-05-06  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy updateLayout]):

2015-05-06  Dan Bernstein  <mitz@apple.com>

        No way to get a WKWebProcessPlugInFrame’s parent frame
        https://bugs.webkit.org/show_bug.cgi?id=144705

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame _parentFrame]): Added this getter.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFramePrivate.h: Declared new
        _parentFrame property.

2015-05-06  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy updateLayout]):

2015-04-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Introducing the Platform Abstraction Layer (PAL)
        https://bugs.webkit.org/show_bug.cgi?id=143358

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Updated

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

        [GTK][WK2] The WebKit network disk cache is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=142821

        Reviewed by Martin Robinson.

        Enable NetworkCache for the GTK+ port.

        * config.h:

2015-05-06  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Remove redudant condition in ViewClientEfl::didChangeViewportAttributes
        https://bugs.webkit.org/show_bug.cgi?id=144672

        Reviewed by Gyuyoung Kim.

        ViewClientEfl::didChangeViewportAttributes is always called when fixed layout is disabled.

        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::didChangeViewportAttributes):
        Removes condition that checks whether fixed layout is enabled.

2015-05-05  Alexey Proskuryakov  <ap@apple.com>

        NetworkResourceLoader::cleanup() should clear ResourceHandle client pointer.
        https://bugs.webkit.org/show_bug.cgi?id=144641
        rdar://problem/20250960

        Reviewed by David Kilzer.

        * NetworkProcess/NetworkResourceLoader.cpp: (WebKit::NetworkResourceLoader::cleanup):
        Clear the client pointer.

        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::useCredentialForChallenge):
        (WebKit::AuthenticationManager::continueWithoutCredentialForChallenge):
        (WebKit::AuthenticationManager::cancelChallenge):
        (WebKit::AuthenticationManager::performDefaultHandling):
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinue):
        Updated comments, which were not accurate, at least on Mac.

2015-05-05  Tim Horton  <timothy_horton@apple.com>

        Views get stuck with viewScale < 1 after switching from DynamicSizeWithMinimumViewSize to ViewSize
        https://bugs.webkit.org/show_bug.cgi?id=144656

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy willChangeLayoutStrategy]):
        Reset the viewScale when we leave the DynamicSizeWithMinimumViewSize strategy.

2015-05-05  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::setFencePort):

2015-05-05  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/WKViewLayoutStrategy.mm:
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy updateLayout]):

2015-05-05  Timothy Horton  <timothy_horton@apple.com>

        Add a layout mode for computing fixed layout size from a minimum size
        https://bugs.webkit.org/show_bug.cgi?id=144610
        <rdar://problem/19790341>

        Reviewed by Simon Fraser.

        Add a layout mode where WebKit determines the layout size with a set of
        (still in flux) heuristics, trying hard to keep the page usable below a
        particular client-defined threshold view size.

        This can mean that WebKit will start scaling down the page inside the view
        to make the whole page fit, using the viewScale mechanism.

        * UIProcess/API/C/WKLayoutMode.h:
        * UIProcess/API/Cocoa/_WKLayoutMode.h:
        Add the new layout mode, and documentation for the two complicated ones.
        
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _layoutMode]):
        (-[WKWebView _setLayoutMode:]):
        (-[WKWebView _setViewScale:]):
        (-[WKWebView _setMinimumViewSize:]):
        (-[WKWebView _minimumViewSize]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Forward the layoutMode and viewScale parameters to WKView if we have one.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView viewWillStartLiveResize]):
        (-[WKView viewDidEndLiveResize]):
        (-[WKView setFrameSize:]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView disableFrameSizeUpdates]):
        (-[WKView enableFrameSizeUpdates]):
        (-[WKView frameSizeUpdatesDisabled]):
        (-[WKView _layoutMode]):
        (-[WKView _setLayoutMode:]):
        (-[WKView _setViewScale:]):
        (-[WKView _setMinimumViewSize:]):
        (-[WKView _minimumViewSize]):
        Store the minimum view size, and update the fixed layout size if needed.

        (-[WKView _updateAutomaticallyComputedFixedLayoutSize]): Deleted.
        (-[WKView _setAutomaticallyComputesFixedLayoutSizeFromViewScale:]): Deleted.
        (-[WKView _automaticallyComputesFixedLayoutSizeFromViewScale]): Deleted.
        Store the WKLayoutMode on the WKViewLayoutStrategy instead of having a
        bunch of things like _automaticallyComputesFixedLayoutSizeFromViewScale.

        * UIProcess/API/mac/WKViewInternal.h:

        * UIProcess/mac/WKViewLayoutStrategy.h: Added.
        * UIProcess/mac/WKViewLayoutStrategy.mm: Added.
        (+[WKViewLayoutStrategy layoutStrategyWithPage:view:mode:]):
        (-[WKViewLayoutStrategy initWithPage:view:mode:]):
        (-[WKViewLayoutStrategy willDestroyView:]):
        (-[WKViewLayoutStrategy layoutMode]):
        (-[WKViewLayoutStrategy updateLayout]):
        (-[WKViewLayoutStrategy disableFrameSizeUpdates]):
        (-[WKViewLayoutStrategy enableFrameSizeUpdates]):
        (-[WKViewLayoutStrategy frameSizeUpdatesDisabled]):
        (-[WKViewLayoutStrategy didChangeViewScale]):
        (-[WKViewLayoutStrategy didChangeMinimumViewSize]):
        (-[WKViewLayoutStrategy willStartLiveResize]):
        (-[WKViewLayoutStrategy didEndLiveResize]):
        (-[WKViewLayoutStrategy didChangeFrameSize]):
        (-[WKViewLayoutStrategy willChangeLayoutStrategy]):
        (-[WKViewViewSizeLayoutStrategy initWithPage:view:mode:]):
        (-[WKViewViewSizeLayoutStrategy updateLayout]):
        (-[WKViewFixedSizeLayoutStrategy initWithPage:view:mode:]):
        (-[WKViewFixedSizeLayoutStrategy updateLayout]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy initWithPage:view:mode:]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy updateLayout]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy didChangeViewScale]):
        (-[WKViewDynamicSizeComputedFromViewScaleLayoutStrategy didChangeFrameSize]):
        Move the existing layout strategies from WKView into WKViewLayoutStrategy subclasses.

        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy initWithPage:view:mode:]):
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy updateLayout]):
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy didChangeMinimumViewSize]):
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy willStartLiveResize]):
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy didEndLiveResize]):
        While in live resize with the new layout mode, disable frame size updates.
        The new layout mode will do a live scale during part of the resize, and
        we don't always want to send the new view size to the Web process.

        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy didChangeFrameSize]):
        (-[WKViewDynamicSizeWithMinimumViewSizeLayoutStrategy willChangeLayoutStrategy]):
        While in the new layout mode, maintain the viewScale as the minimum of the
        scale required to fit the current view frame size inside the minimumViewSize.
        If no scaling is required, carry on as usual, pushing the new view frame size
        to the DrawingArea and on to the Web process.
        If scaling is required, apply a transform to the view in the UI process,
        until the live resize completes, in which case we send a fenced viewScale
        adjustment to the Web process (so that the tiles paint at the new viewScale
        synchronized with the removal of the transform in the UI process).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scaleViewFenced):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::addFence):
        (WebKit::DrawingArea::acceleratedAnimationDidEnd): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaleViewAndUpdateGeometryFenced):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::addFence):
        Add scaleViewAndUpdateGeometryFenced and the ability to install CoreAnimation fences on
        TiledCoreAnimationDrawingArea's CAContext.

        Add the ability to send updateGeometry out-of-band, so that
        we can send it synchronously inside the message along with the CA fence.
        We have to both change the viewScale and updateGeometry simultaneously
        in the same CA commit that we install the fence into, in order to ensure
        that there is no flash.

2015-05-05  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Release input NSString when finished copying it.
        https://bugs.webkit.org/show_bug.cgi?id=144642

        Reviewed by Brian Weinstein.

        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):

2015-05-05  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Use less memory to store the json input.
        https://bugs.webkit.org/show_bug.cgi?id=144604

        Reviewed by Benjamin Poulain.

        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::compiledToFile):
        (API::UserContentExtensionStore::compileContentExtension):
        * UIProcess/API/APIUserContentExtensionStore.h:
        Don't copy strings as much or keep them alive after done using them.

2015-05-04  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Use less memory when writing byte code to file
        https://bugs.webkit.org/show_bug.cgi?id=144602

        Reviewed by Darin Adler.

        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::decodeContentExtensionMetaData):
        (API::writeDataToFile):
        (API::compiledToFile):
        (API::createExtension):
        Compile and write each DFA to file, then come back and write the header when finalizing.
        Also don't copy the DFA bytecode. This way, we don't need to keep more than one DFA's
        bytecode in memory at a time.

2015-05-05  Sungmann Cho  <sungmann.cho@navercorp.com>

        Make all FrameLoadState data members private.
        https://bugs.webkit.org/show_bug.cgi?id=144562

        Reviewed by Darin Adler.

        Previously, all of the data members in FrameLoadState were public and accessed directly
        from outside the class. But these should all be private as noted in FrameLoadState.h
        for better encapsulation.

        No new tests, no behavior change.

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetFrameLoadState):
        * UIProcess/FrameLoadState.h:
        (WebKit::FrameLoadState::state):
        (WebKit::FrameLoadState::url):
        (WebKit::FrameLoadState::provisionalURL):
        (WebKit::FrameLoadState::unreachableURL):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::url):
        (WebKit::WebFrameProxy::provisionalURL):
        (WebKit::WebFrameProxy::unreachableURL):

2015-05-05  Alexey Proskuryakov  <ap@apple.com>

        Crashes in SandboxExtension::consumePermanently when uploading
        https://bugs.webkit.org/show_bug.cgi?id=144611
        rdar://problem/10156710

        Reviewed by Darin Adler.

        This only fixes the crashes, uploading still won't work.
        Added null checks and some logging that may help us get to the root cause eventually.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandle):
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::createHandle):
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChooseFilesForOpenPanel):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::extendSandboxForFileFromOpenPanel):

2015-05-05  Csaba Osztrogonác  <ossy@webkit.org>

        Remove TextureMapperImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=143561

        Reviewed by Žan Doberšek.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::setNativeSurfaceHandleForCompositing):

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

        [SOUP] Network Cache: IOChannel operations are not sent to the right thread
        https://bugs.webkit.org/show_bug.cgi?id=144542

        Reviewed by Darin Adler.

        We are ignoring the given WorkQueue and running the async
        operations in the current thread. Check the given WorkQueue
        instead and schedule the operation to the given queue. If the
        given queue is nullptr, which means the operation should be run in
        the main context, the operation is run directly if the current
        context is the main one or sent to the main context using a
        GMainLoopSource.

        Fixes crashes due to asserts when running disk-cache layout tests
        in a Debug build.

        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::runTaskInQueue):
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::readSync):
        (WebKit::NetworkCache::IOChannel::write):

2015-05-04  Dan Bernstein  <mitz@apple.com>

        WebKit always goes through LaunchServices for main frame navigation actions
        https://bugs.webkit.org/show_bug.cgi?id=144608

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Defined
        _WKNavigationActionPolicyAllowWithoutTryingAppLink.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): If the policy
        is _WKNavigationActionPolicyAllowWithoutTryingAppLink, don’t go through tryAppLink.

2015-05-04  Enrica Casucci  <enrica@apple.com>

        [iOS WK2] editorState should include information about selection clipping rectangle.
        https://bugs.webkit.org/show_bug.cgi?id=144603
        rdar://problem/20521252

        Reviewed by Chris Dumez.

        Adding selectionClipRect to the post-layout portion of EditorState.
        This way we can compute the selection clipping rectangle based on
        up-to-date information instead of using the rectangle provided when
        then element was first focused.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::PostLayoutData::encode):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _selectionClipRect]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState):

2015-05-04  Antti Koivisto  <antti@apple.com>

        Network Cache: Support time based cache clearing
        https://bugs.webkit.org/show_bug.cgi?id=144568
        <rdar://problem/19769820>

        Reviewed by Andreas Kling.

        Support clearing cache entries newer than given time only.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::deleteDumpFile):
        (WebKit::NetworkCache::Storage::traverse):

            Also fix thread safety of traverse handler function.

        (WebKit::NetworkCache::Cache::clear):

            Also add completion handler to support the API properly.

        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::clear):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::clearNSURLCache):

            Factor to a function.

        (WebKit::NetworkProcess::clearDiskCache):

2015-05-04  Zan Dobersek  <zdobersek@igalia.com>

        [WTF] Remove Functional.h inclusions
        https://bugs.webkit.org/show_bug.cgi?id=144400

        Reviewed by Darin Adler.

        Remove unnecessary inclusions of the <wtf/Functional.h> header in WebKit2.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm: Import the <objc/runtime.h>
        header that was previously indirectly included through the Functional.h header.
        * WebProcess/WebPage/DrawingArea.cpp:

2015-05-04  Csaba Osztrogonác  <ossy@webkit.org>

        [ARM] Don't compare unsigned chars to EOF (-1)
        https://bugs.webkit.org/show_bug.cgi?id=144439

        Reviewed by Geoffrey Garen.

        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::nextToken): Don't cast return value of fgetc() to char.

2015-05-04  Antti Koivisto  <antti@apple.com>

        Remove NetworkResourceLoadScheduler
        https://bugs.webkit.org/show_bug.cgi?id=144550

        Reviewed by Sam Weinig.

        It doesn't really do anything.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::getNetworkProcessStatistics):
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkResourceLoadScheduler): Deleted.
        * NetworkProcess/NetworkResourceLoadScheduler.cpp: Removed.
        * NetworkProcess/NetworkResourceLoadScheduler.h: Removed.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::cleanup):
        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::create):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::initializeNetworkSettings):

            Moved from NetworkResourceLoadSchedulerMac.mm.

        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/mac/NetworkResourceLoadSchedulerMac.mm: Removed.
        * NetworkProcess/soup/NetworkResourceLoadSchedulerSoup.cpp: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2015-05-03  Alexey Proskuryakov  <ap@apple.com>

        Crash in SandboxExtension::consume when uploading iWork -tef documents to iCloud
        https://bugs.webkit.org/show_bug.cgi?id=144509
        rdar://problem/18731910

        Reviewed by Daniel Bates.

        No test, because testRunner.beginDragWithFiles doesn't work in WKTR, and making
        it work is hard.

        * Shared/BlobDataFileReferenceWithSandboxExtension.cpp:
        (WebKit::BlobDataFileReferenceWithSandboxExtension::prepareForFileAccess):
        (WebKit::BlobDataFileReferenceWithSandboxExtension::revokeFileAccess):

2015-05-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][EFL] Unify platform display handling
        https://bugs.webkit.org/show_bug.cgi?id=144517

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Use PlatformDisplay::sharedDisplay()
        to checkt the display type.
        (webkitWebViewBaseCreateWebPage): Ditto.
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createBackend): Pass the native X11 shared
        display to BackingStoreBackendCairoX11.
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::x11HostDisplay): Return the native X11
        shared display.

2015-05-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix Debug build with NETWORK_CACHE enabled and CACHE_PARTITIONING disabled.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):

2015-05-01  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/8636045> Back/forward navigation to an error page in Safari breaks the back-forward list
        https://bugs.webkit.org/show_bug.cgi?id=144501

        Reviewed by Darin Adler.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadAlternateHTMLString): If this is called during
        didFailProvisionalLoadForFrame, send back the provisional URL captured at the time of
        failure.
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): Get the provisioinal URL and keep
        it in new member variable m_failingProvisionalLoadURL for the duration of the client’s
        handling of this message.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPageProxy.messages.in: Added provisionalURL parameter to
        DidFailProvisionalLoadForFrame.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad): Send the URL for this error
        to the UI process.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadAlternateHTMLString): Temporarily restore the loader’s state to
        reflect the provisional load error being handled.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Added provisionalLoadErrorURL parameter to
        LoadAlternateHTMLString.

2015-05-01  Martin Robinson  <mrobinson@igalia.com>

        USE(...) macro should expect unprefixed variables
        https://bugs.webkit.org/show_bug.cgi?id=144454

        Reviewed by Daniel Bates.

        * Shared/API/c/WKBase.h: Replace all occurrences WTF_USE with USE.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.

2015-05-01  Brady Eidson  <beidson@apple.com>

        Add API to disable meta refreshes.
        <rdar://problem/20333198> and https://bugs.webkit.org/show_bug.cgi?id=144269

        Reviewed by Alexey Proskuryakov.

        Add a preference to enable/disable meta refreshes, enabled by default.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMetaRefreshEnabled):
        (WKPreferencesGetMetaRefreshEnabled):
        (WKPreferencesGetIgnoreViewportScalingConstraints): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-05-01  Antti Koivisto  <antti@apple.com>

        Remove network process load serialization code
        https://bugs.webkit.org/show_bug.cgi?id=144448

        Reviewed by Alexey Proskuryakov.

        TestRunner.setSerializeHTTPLoads is used by a few tests but it is unnecessary
        with network process. We don't reorder loads anyway so test results are consistent.
        There or no other clients for this code.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::setSerialLoadingEnabled): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::isSerialLoadingEnabled): Deleted.
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::getNetworkProcessStatistics):
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::scheduleLoader):
        (WebKit::NetworkResourceLoadScheduler::removeLoader):
        (WebKit::NetworkResourceLoadScheduler::loadsPendingCount): Deleted.
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetTabKeyCyclesThroughElements):
        (WKBundleSetSerialLoadingEnabled): Deleted.
        (WKBundleDispatchPendingLoadRequests): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setSerialLoadingEnabled): Deleted.
        (WebKit::InjectedBundle::dispatchPendingLoadRequests): Deleted.

            Remove also this as it does nothing.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::WebResourceLoadScheduler):
        (WebKit::WebResourceLoadScheduler::suspendPendingRequests):
        (WebKit::WebResourceLoadScheduler::resumePendingRequests):

            Remove implementation, it does nothing.

        (WebKit::WebResourceLoadScheduler::setSerialLoadingEnabled):
        * WebProcess/Network/WebResourceLoadScheduler.h:

2015-04-30  Timothy Horton  <timothy_horton@apple.com>

        Remove long-deprecated unused WKView minimumLayoutWidth properties
        https://bugs.webkit.org/show_bug.cgi?id=144480

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView minimumLayoutWidth]): Deleted.
        (-[WKView setMinimumLayoutWidth:]): Deleted.
        (-[WKView minimumWidthForAutoLayout]): Deleted.
        (-[WKView setMinimumWidthForAutoLayout:]): Deleted.
        These were replaced with minimumSizeForAutoLayout long ago.

2015-04-30  Simon Fraser  <simon.fraser@apple.com>

        Fixed elements end up in the middle of the view with pageScale < 1
        https://bugs.webkit.org/show_bug.cgi?id=144428
        rdar://problem/20404982

        Reviewed by Tim Horton.

        Encode/decode fixedElementsLayoutRelativeToFrame.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):

2015-04-30  Tim Horton  <timothy_horton@apple.com>

        Asynchronous (or timed-out synchronous) resize flashes white instead of page background color
        https://bugs.webkit.org/show_bug.cgi?id=144468

        Reviewed by Simon Fraser and Dan Bernstein.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _viewBackgroundColor]):
        (-[WKView updateLayer]):
        Use the pageExtendedBackgroundColor for the background color of the WKView,
        if we have one (and aren't using a transparent background). This means
        during asynchronous resize or other cases where the Web process isn't keeping
        up with the UI process during a resize, we'll see background color instead of white.

2015-04-30  Beth Dakin  <bdakin@apple.com>

        Should choose UIScrollView indicatorStyle based on the document background color
        https://bugs.webkit.org/show_bug.cgi?id=144473
        -and corresponding-
        rdar://problem/19897699

        Reviewed by Simon Fraser.

        Update the indicator style whenever the background color changes.  
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateScrollViewBackground]):

2015-04-30  Enrica Casucci  <enrica@apple.com>

        [iOS] tapping in the middle of a word in editable content should not select the word.
        https://bugs.webkit.org/show_bug.cgi?id=144421
        rdar://problem/20710948

        Reviewed by Tim Horton.

        Reverting to the original behavior.

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

2015-04-29  Hunseop Jeong  <hs85.jeong@samsung.com>

        Fix the EFL build after r183595
        https://bugs.webkit.org/show_bug.cgi?id=144427

        Reviewed by Gyuyoung Kim.

        updateWheelEventTestTriggersIfNeeded() is guarded by #if ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING).

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

2015-04-29  Brent Fulgham  <bfulgham@apple.com>

        Expand test infrastructure to support scrolling tests
        https://bugs.webkit.org/show_bug.cgi?id=143684
        <rdar://problem/20375516>

        Reviewed by Simon Fraser.

        Update test programs to activate (and deactivate) the new WheelEventTestTrigger logic.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageClearWheelEventTestTriggers): Added.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::clearWheelEventTestTrigger): Added.
        * UIProcess/WebPageProxy.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageStartMonitoringScrollOperations): Interact with WheelEventTestTrigger through
        the Page, rather than MainFrame.
        (WKBundlePageRegisterScrollOperationCompletionCallback): Ditto.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::createScrollbar): Make sure scroll animator knows about any
        active test triggers.
        * WebPage/EventDispatcher.mm:
        (WebKit::EventDispatcher::wheelEvent): If the wheel event was passed to the scrolling thread,
        defer tests until a Scrolling Thread Sync has occurred.
        * WebPage/WebPage.cpp:
        (WebKit::WebPage::clearWheelEventTestTrigger): Added.
        * WebPage/WebPage.h:
        * WebPage/WebPage.message.in: Added ClearWheelEventTestTrigger message.

2015-04-29  Enrica Casucci  <enrica@apple.com>

        Adding the ability to move selection by granularity on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=144410
        rdar://problem/19213337

        Reviewed by Benjamin Poulain.

        This patch also correctly sets _usingGestureForSelection for all
        the functions that change the selection with a gesture.
        This way we make sure that the selection drawing is not delayed
        until the next time we paint.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView moveSelectionAtBoundary:inDirection:completionHandler:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::moveSelectionAtBoundaryWithDirection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::moveSelectionAtBoundaryWithDirection):

2015-04-29  Tim Horton  <timothy_horton@apple.com>

        UI process sometimes crashes under _takeViewSnapshot when the window is off-screen
        https://bugs.webkit.org/show_bug.cgi?id=144418
        <rdar://problem/20740278>

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        Null-check the array before checking if it has any items.
        If the window is off-screen, we can't snapshot it.

2015-04-29  Simon Fraser  <simon.fraser@apple.com>

        Allow testing of plug-ins that handle wheel events.
        https://bugs.webkit.org/show_bug.cgi?id=144413

        Reviewed by Tim Horton.
        
        Allow the Test Netscape Plug-in to pretend to handle wheel events,
        so layout tests can use it.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):

2015-04-29  Filip Pizlo  <fpizlo@apple.com>

        JSTypeInfo should have an inline type flag to indicate if getCallData() has been overridden
        https://bugs.webkit.org/show_bug.cgi?id=144397

        Reviewed by Andreas Kling.

        If you override getCallData() and you want to be called a "function", then you need to use the
        new TypeOfShouldCallGetCallData flag.

        * WebProcess/Plugins/Netscape/JSNPObject.h:

2015-04-29  Antti Koivisto  <antti@apple.com>

        ResourceLoadPriority should be enum class
        https://bugs.webkit.org/show_bug.cgi?id=144326

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::servePendingRequests): Deleted.

            Remove this unused message.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeStoreDecision):
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/mac/NetworkResourceLoadSchedulerMac.mm:
        (WebKit::NetworkResourceLoadScheduler::platformInitializeNetworkSettings):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::servePendingRequests):
        * WebProcess/Network/WebResourceLoadScheduler.h:

2015-04-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Use CTFontCreateForCSS instead of doing font search ourselves
        https://bugs.webkit.org/show_bug.cgi?id=132159

        Reviewed by Darin Adler.

        Add SPI to set the font whitelist.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetFontWhitelist):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setFontWhitelist):
        * UIProcess/WebProcessPool.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2015-04-29  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Organize and clean up unused CMake variables
        https://bugs.webkit.org/show_bug.cgi?id=144364

        Reviewed by Gyuyoung Kim.

        * PlatformGTK.cmake: Add variables specific to this project.
        * webkit2gtk-web-extension.pc.in: Hardcode the GTK+ API version. It rarely changes.
        * webkit2gtk.pc.in: Ditto.

2015-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r182573): [GTK] The default context menu contains an empty item since r182573
        https://bugs.webkit.org/show_bug.cgi?id=144388

        Reviewed by Brady Eidson.

        Move the WebContextMenuClient::shareMenuItem() implementation to
        platform files, since platforms not supporting share menu item
        should return a null ContextMenuIem instead.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::shareMenuItem): Deleted.
        * WebProcess/WebCoreSupport/efl/WebContextMenuClientEfl.cpp:
        (WebKit::WebContextMenuClient::shareMenuItem):
        * WebProcess/WebCoreSupport/gtk/WebContextMenuClientGtk.cpp:
        (WebKit::WebContextMenuClient::shareMenuItem):
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::shareMenuItem):

2015-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r183467): [SOUP] isMainResource is no longer passed as resource load parameters to the network process
        https://bugs.webkit.org/show_bug.cgi?id=144381

        Reviewed by Darin Adler.

        A requester enum value is passed now as part of the
        ResourceRequest, but it's not encoded/decoded for soup.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData): Encode requester.
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData): Decode requester.

2015-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Use xattrs to get/set the creation time of disk cache files
        https://bugs.webkit.org/show_bug.cgi?id=144251

        Reviewed by Martin Robinson.

        The network process disk cache uses the creation time to compute a
        worth value used to determine the order in which cached resources
        are deleted when the cache is shrunk. In some operating systems
        like Linux there's no st_birthtime in struct stat, but since cache
        files are always created and deleted by us, we could use a custom
        xattr to store and retrieve the creation time of cached resources.

        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h:
        (WebKit::NetworkCache::fileTimes):
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:
        (WebKit::NetworkCache::IOChannel::IOChannel):

2015-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Network Cache: Do not create a SharedBuffer for mapped resources unless explicitly requested
        https://bugs.webkit.org/show_bug.cgi?id=144337

        Reviewed by Antti Koivisto.

        We send a buffer or a memory mapped handler to the web process
        depending on whether the resource body is mapped or not, but we
        are always creating a shared buffer even for mapped resources.
        Split initializeBufferFromStorageRecord() moving the mapped memory
        handler initialization to its own method.

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::initializeShareableResourceHandleFromStorageRecord):
        Initialize the mapped memory handler if the body data is mapped.
        (WebKit::NetworkCache::Entry::initializeBufferFromStorageRecord):
        Initialize the buffer by wrapping the mapped memory if the body
        data is mapped, or using the body data directly otherwise.
        (WebKit::NetworkCache::Entry::shareableResourceHandle): Call
        initializeShareableResourceHandleFromStorageRecord() if the
        handler is null.
        * NetworkProcess/cache/NetworkCacheEntry.h:

2015-04-28  Simon Fraser  <simon.fraser@apple.com>

        Make a non-static version of FrameView::yPositionForRootContentLayer()
        https://bugs.webkit.org/show_bug.cgi?id=144375

        Reviewed by Andy Estes.

        There were two calls to the static FrameView::yPositionForRootContentLayer()
        which passed in all the arguments for the same FrameView. Make a member
        function for convenience.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::shadowLayerPositionForFrame):

2015-04-28  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Merge TILED_BACKING_STORE guard with COORDINATED_GRAPHICS
        https://bugs.webkit.org/show_bug.cgi?id=143001

        Reviewed by Gyuyoung Kim.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::commitCoordinatedGraphicsState):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::dispatchViewportPropertiesDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSize):
        (WebKit::WebPage::setUseFixedLayout):
        (WebKit::WebPage::canHandleUserEvents):
        * WebProcess/WebPage/WebPage.h:

2015-04-28  Timothy Horton  <timothy_horton@apple.com>

        [TextIndicator] Yellow highlight takes too long to fade out on scroll
        https://bugs.webkit.org/show_bug.cgi?id=144358
        <rdar://problem/19451011>

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView renewGState]):
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _dictionaryLookupPopoverWillClose:]):
        (-[WKView _setTextIndicator:]):
        (-[WKView _setTextIndicator:withLifetime:]):
        (-[WKView _clearTextIndicatorWithAnimation:]):
        (-[WKView magnifyWithEvent:]):
        (-[WKView smartMagnifyWithEvent:]):
        (-[WKView setMagnification:centeredAtPoint:]):
        (-[WKView setMagnification:]):
        (-[WKView _dismissContentRelativeChildWindows]):
        (-[WKView _dismissContentRelativeChildWindowsWithAnimation:]):
        (-[WKView _setTextIndicator:fadeOut:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageDidScroll):
        (WebKit::WebPageProxy::setTextIndicator):
        (WebKit::WebPageProxy::clearTextIndicator):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setTextIndicator):
        (WebKit::PageClientImpl::clearTextIndicator):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setTextIndicator):
        (WebKit::PageClientImpl::clearTextIndicator):
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        (WebKit::PageClientImpl::dismissContentRelativeChildWindows):
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController _animationControllerForDataDetectedText]):
        (-[WKImmediateActionController _animationControllerForDataDetectedLink]):
        (-[WKImmediateActionController _animationControllerForText]):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        Make _setTextIndicator take a reference.
        Add a variant of _setTextIndicator that takes a Lifetime.
        Make _clearTextIndicatorWithAnimation take a DismissalAnimation.
        Make dismissContentRelativeChildWindows take a parameter indicating
        whether the dismissal should include animation or not (currently
        only applies to TextIndicator).
        Don't animate when dismissal occurs because of scrolling, zooming,
        or other things in which the content will have changed significantly
        underneath the indicator and shouldn't have a slowly-fading-out yellow highlight.

2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
        https://bugs.webkit.org/show_bug.cgi?id=144304

        Reviewed by Geoffrey Garen.

        Define ENABLE_JIT, enabled by default, instead of ENABLE_LLINT_C_LOOP, disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2015-04-28  Commit Queue  <commit-queue@webkit.org>

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

        It broke cloop test bots (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT"
        https://bugs.webkit.org/show_bug.cgi?id=144304
        http://trac.webkit.org/changeset/183514

2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
        https://bugs.webkit.org/show_bug.cgi?id=144304

        Reviewed by Geoffrey Garen.

        Define ENABLE_JIT, enabled by default, instead of ENABLE_LLINT_C_LOOP, disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2015-04-28  Enrica Casucci  <enrica@apple.com>

        Add support for lookup on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=144342
        rdar://problem/19994090

        Reviewed by Tim Horton.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _lookup:]):
        (-[WKContentView canPerformAction:withSender:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::getLookupContextAtPoint):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getLookupContextAtPoint):

2015-04-28  Brady Eidson  <beidson@apple.com>

        Consolidate most "frame load" arguments into FrameLoadRequest.
        https://bugs.webkit.org/show_bug.cgi?id=144276

        Reviewed by Alexey Proskuryakov.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::loadURL):
        
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchCreatePage):
        
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openInNewTab):

2015-04-28  Chris Dumez  <cdumez@apple.com>

        [WK2][Mac] Update WebContent process' sandbox profile for AWD
        https://bugs.webkit.org/show_bug.cgi?id=144315
        <rdar://problem/20719293>

        Reviewed by Alexey Proskuryakov.

        Update sandbox profile for AWD similarly to what was done for iOS in
        r182278.

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

2015-04-28  Antti Koivisto  <antti@apple.com>

        Network Cache: Disk cache getting filled by YouTube video data
        https://bugs.webkit.org/show_bug.cgi?id=144259

        Reviewed by Darin Adler.

        MSE media is loaded via XHR and tends to eventually fill the cache.

        YouTube serves the media chunks cacheable, however they are rarely (if ever) reused.
        We can reduce disk writes and keep more useful resources around by not caching them

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeStoreDecision):

            Don't store if the requester is XHR and response has video or audio content type.

        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::storeDecisionToDiagnosticKey):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:

            The requester type is now part of the ResourceRequest, no need for separate parameter.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):

2015-04-28  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] API::UserContentURLPattern creation functions should return Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=144225

        Reviewed by Darin Adler.

        Have API::UserContentURLPattern creation functions return Ref<>.
        Call-sites are also updated, using and operating on the returned Ref<>
        object where possible.

        * Shared/API/APIUserContentURLPattern.h:
        (API::UserContentURLPattern::create):
        * Shared/API/c/WKUserContentURLPattern.cpp:
        (WKUserContentURLPatternCreate):

2015-04-28  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] API::URLRequest, API::URLResponse creation functions should return Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=144224

        Reviewed by Darin Adler.

        Have API::URLRequest and API::URLResponse creation functions return Ref<>.
        The call-sites are also updated, using and operating on the returned Ref<> object
        where possible.

        * Shared/API/APIURLRequest.h:
        (API::URLRequest::create):
        * Shared/API/APIURLResponse.h:
        (API::URLResponse::create):
        * Shared/API/c/WKURLRequest.cpp:
        (WKURLRequestCreateWithWKURL):
        * Shared/API/c/mac/WKURLRequestNS.mm:
        (WKURLRequestCreateWithNSURLRequest):
        * Shared/API/c/mac/WKURLResponseNS.mm:
        (WKURLResponseCreateWithNSURLResponse):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient):
        * UIProcess/API/C/WKDownload.cpp:
        (WKDownloadCopyRequest):
        * UIProcess/API/C/WKNavigationDataRef.cpp:
        (WKNavigationDataCopyOriginalRequest):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPagePolicyClient):
        (WKPageSetPageUIClient):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManagerClient.cpp:
        (WebKit::WebSoupCustomProtocolRequestManagerClient::startLoading):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (willSendRequestForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp:
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNavigationAction):
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForNewWindowAction):
        (WebKit::InjectedBundlePagePolicyClient::decidePolicyForResponse):

2015-04-27  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] API::Point, API::Size, API::Rect creation functions should return Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=144223

        Reviewed by Darin Adler.

        Have API::Point, API::Size and API::Rect creation functions return Ref<>.
        Call-sites are also updated, using and operating on the returned Ref<> object
        where possible.

        * Shared/API/APIGeometry.h:
        (API::Size::create):
        (API::Point::create):
        (API::Rect::create):
        * Shared/API/c/WKGeometry.cpp:
        (WKPointCreate):
        (WKSizeCreate):
        (WKRectCreate):

2015-04-27  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] API::Error creation functions should return Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=144222

        Reviewed by Darin Adler.

        Have API::Error creation functions return Ref<>.
        The call-sites are also updated, using and operating
        on the returned Ref<> object where possible.

        * Shared/API/APIError.h:
        (API::Error::create):
        * Shared/API/c/cf/WKErrorCF.cpp:
        (WKErrorCreateWithCFError):
        * UIProcess/API/C/WKOriginDataManager.cpp:
        (WKOriginDataManagerDeleteEntriesForOrigin):
        (WKOriginDataManagerDeleteEntriesModifiedBetweenDates):
        (WKOriginDataManagerDeleteAllEntries):
        * UIProcess/API/C/WKPage.cpp:
        (toGenericCallbackFunction):
        (WKPageForceRepaint):
        (WKPageValidateCommand):
        (WKPageComputePagesForPrinting):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerClearSiteData):
        (WKPluginSiteDataManagerClearAllSiteData):
        * UIProcess/GenericCallback.h:
        (WebKit::toGenericCallbackFunction):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::printFinishedCallback):

2015-04-27  Sungmann Cho  <sungmann.cho@navercorp.com>

        [GTK] Remove unnecessary semicolon from WebKitNotificationProvider.h.
        https://bugs.webkit.org/show_bug.cgi?id=144312

        Reviewed by Martin Robinson.

        No new tests, no behavior change.

        * UIProcess/API/gtk/WebKitNotificationProvider.h:

2015-04-27  Brent Fulgham  <bfulgham@apple.com>

        PDF action menu fixes
        https://bugs.webkit.org/show_bug.cgi?id=144299
        <rdar://problem/20702215>

        Reviewed by Tim Horton.

        Make two corrections to how PDFs are handled:
        1. When calculating the view rect for the user's selection, make sure
        that we get coordinates for the correct PDF page. The existing code assumed
        that the current PDFLayerControler's current page was correct, but this will
        not be true if you zoom the PDF out so that several pages are displayed at
        once. Each selection keeps track of the page it is referenced against.
        
        2. Revise the offsets calculated for the TextIndicator to take into account
        the font descender (as well as the ascender), and to adjust by the scaled
        amount of margin around the selected text.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::viewRectForSelection): Use correct page for calculating
        the coordinates.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForSelectionInPDFPlugin): Include font 'descendant'
        and (scaled) margin when adjusting the hit target for the TextIndicator to draw.

2015-04-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        Rename WTF_USE_3D_GRAPHICS to ENABLE_GRAPHICS_CONTEXT_3D
        https://bugs.webkit.org/show_bug.cgi?id=144193

        Reviewed by Darin Adler.

        * CMakeLists.txt:

2015-04-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Context menus are not reshown after an orientation change

        <https://bugs.webkit.org/show_bug.cgi?id=144143>
        <rdar://problem/20679931>

        Reviewed by Darin Adler.

        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet updateSheetPosition]):
        Return early if we're still in a rotation, not if the rotation is
        complete.

2015-04-27  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] API::Dictionary creation functions should return Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=144221

        Reviewed by Darin Adler.

        Have API::Dictionary creation functions return Ref<>.
        The call-sites are also updated, using and operating
        on the returned Ref<> object where possible.

        * Shared/API/APIDictionary.cpp:
        (API::Dictionary::create):
        * Shared/API/APIDictionary.h:
        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (createEncodedObject):
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]):
        * Shared/API/c/WKDictionary.cpp:
        (WKDictionaryCreate):
        * Shared/API/c/WKMutableDictionary.cpp:
        (WKMutableDictionaryCreate):
        * Shared/Plugins/Netscape/PluginInformation.cpp:
        (WebKit::createPluginInformationDictionary):
        * Shared/Plugins/Netscape/PluginInformation.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_prefetch_dns):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_snapshot):
        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::PlugInAutoStartProvider::autoStartOriginsTableCopy):
        * UIProcess/Plugins/PlugInAutoStartProvider.h:
        * UIProcess/StatisticsRequest.cpp:
        (WebKit::createDictionaryFromHashMap):
        (WebKit::StatisticsRequest::completedRequest):
        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::willSubmitForm):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailToInitializePlugin):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (didInitiateLoadForResource):
        (willSendRequestForFrame):
        (didReceiveResponseForResource):
        (didReceiveContentLengthForResource):
        (didFinishLoadForResource):
        (didFailLoadForResource):
        (webkitWebPageDidReceiveMessage):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::willSendSubmitEvent):
        (WebKit::InjectedBundlePageFormClient::willSubmitForm):

2015-04-27  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] API::Data creation functions should return Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=144220

        Reviewed by Darin Adler.

        Have API::Data creation functions return Ref<>.
        The call-sites are also updated, using and operating
        on the returned Ref<> object where possible.

        * Shared/API/APIData.h:
        (API::Data::createWithoutCopying):
        (API::Data::create):
        * Shared/API/c/WKData.cpp:
        (WKDataCreate):
        * Shared/API/c/mac/WKWebArchive.cpp:
        (WKWebArchiveCopyData):
        * Shared/API/c/mac/WKWebArchiveResource.cpp:
        (WKWebArchiveResourceCopyData):
        * Shared/APIWebArchive.h:
        * Shared/APIWebArchive.mm:
        (API::WebArchive::data):
        * Shared/APIWebArchiveResource.h:
        * Shared/APIWebArchiveResource.mm:
        (API::WebArchiveResource::data):
        * Shared/Cocoa/APIDataCocoa.mm:
        (API::Data::createWithoutCopying):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadData:MIMEType:characterEncodingName:baseURL:]):
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestReadCallback):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_bytes):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::createData):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dataCallback):
        (WebKit::WebPageProxy::savePDFToFileInDownloadsFolder):

2015-04-27  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] API::URL creation functions should return Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=144219

        Reviewed by Darin Adler.

        Have API::URL creation functions return Ref<>.
        The call-sites are also updated, using and operating in the
        returned Ref<> object, where possible.

        * Shared/API/APIURL.h:
        (API::URL::create):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toCopiedURLAPI):
        * Shared/API/c/WKURL.cpp:
        (WKURLCreateWithUTF8CString):
        (WKURLCreateWithBaseURL):
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkit_web_resource_get_data):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::didChangeIconForPageURL):
        (WebKit::WebIconDatabase::notifyIconDataReadyForPageURL):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::userAgent):

2015-04-27  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] API::String creation functions should return Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=144218

        Reviewed by Darin Adler.

        Have API::String creation functions return Ref<>.
        The call-sites are also updated, using and operating on the returned
        Ref<> object, where possible.

        * Shared/API/APIString.h:
        * Shared/API/c/WKPluginInformation.cpp:
        (WKPluginInformationBundleIdentifierKey):
        (WKPluginInformationBundleVersionKey):
        (WKPluginInformationBundleShortVersionKey):
        (WKPluginInformationPathKey):
        (WKPluginInformationDisplayNameKey):
        (WKPluginInformationDefaultLoadPolicyKey):
        (WKPluginInformationUpdatePastLastBlockedVersionIsKnownAvailableKey):
        (WKPluginInformationHasSandboxProfileKey):
        (WKPluginInformationFrameURLKey):
        (WKPluginInformationMIMETypeKey):
        (WKPluginInformationPageURLKey):
        (WKPluginInformationPluginspageAttributeURLKey):
        (WKPluginInformationPluginURLKey):
        (WKPlugInInformationReplacementObscuredKey):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::ProxyingRefPtr::ProxyingRefPtr):
        (WebKit::toCopiedAPI):
        * Shared/API/c/WKString.cpp:
        (WKStringCreateWithUTF8CString):
        (WKStringCreateWithJSString):
        * UIProcess/API/C/WKDatabaseManager.cpp:
        (WKDatabaseManagerGetOriginKey):
        (WKDatabaseManagerGetOriginQuotaKey):
        (WKDatabaseManagerGetOriginUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsKey):
        (WKDatabaseManagerGetDatabaseDetailsNameKey):
        (WKDatabaseManagerGetDatabaseDetailsDisplayNameKey):
        (WKDatabaseManagerGetDatabaseDetailsExpectedUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsCurrentUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsCreationTimeKey):
        (WKDatabaseManagerGetDatabaseDetailsModificationTimeKey):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetOriginKey):
        (WKKeyValueStorageManagerGetCreationTimeKey):
        (WKKeyValueStorageManagerGetModificationTimeKey):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetSessionHistoryURLValueType):
        (WKPageGetSessionBackForwardListItemValueType):
        (toGenericCallbackFunction):
        (WKPageValidateCommand):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::didReceiveInvalidMessage):

2015-04-27  Brady Eidson  <beidson@apple.com>

        Make 'enum NavigationType' be an enum class
        https://bugs.webkit.org/show_bug.cgi?id=144270

        Reviewed by Alex Christensen.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        
        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::NavigationActionData):
        
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (toWKNavigationType):
        
        * UIProcess/API/gtk/WebKitPrivate.cpp:
        (toWebKitNavigationType):
        
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::openInNewTab):

2015-04-27  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r182879): Images and video can no longer be downloaded
        https://bugs.webkit.org/show_bug.cgi?id=144267
        <rdar://problem/20702844>

        Reviewed by Simon Fraser.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _createActionMenuItemForTag:]): Check for
        "!WebCore::protocolIs(..., "file")" for image and media downloads.

2015-04-27  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] TestWebKitAPI's forwarding header generator should depend on WebKit2's generator
        https://bugs.webkit.org/show_bug.cgi?id=143874

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Rename the generator to have consistent name with other generators.
        * Scripts/generate-forwarding-headers.pl: Removed the unnecessary multiple include-path support.

2015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add initial implementation of NetworkProcess disk cache
        https://bugs.webkit.org/show_bug.cgi?id=143872

        Reviewed by Martin Robinson.

        Implement the platform specific parts of the disk cache
        implementation for Soup. It's mainly NetworkCache::Data and
        NetworkCache::IOChannel.

        * CMakeLists.txt:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::dumpFileChanged):
        (WebKit::NetworkCache::Cache::initialize):
        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp:
        * NetworkProcess/cache/NetworkCacheData.h:
        (WebKit::NetworkCache::Data::soupBuffer):
        * NetworkProcess/cache/NetworkCacheDataSoup.cpp: Added.
        (WebKit::NetworkCache::Data::Data):
        (WebKit::NetworkCache::Data::empty):
        (WebKit::NetworkCache::Data::data):
        (WebKit::NetworkCache::Data::isNull):
        (WebKit::NetworkCache::Data::apply):
        (WebKit::NetworkCache::Data::subrange):
        (WebKit::NetworkCache::concatenate):
        (WebKit::NetworkCache::MapWrapper::~MapWrapper):
        (WebKit::NetworkCache::deleteMapWrapper):
        (WebKit::NetworkCache::mapFile):
        (WebKit::NetworkCache::Data::adoptMap):
        (WebKit::NetworkCache::computeSHA1):
        (WebKit::NetworkCache::bytesEqual):
        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        * NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp: Added.
        (WebKit::NetworkCache::IOChannel::IOChannel):
        (WebKit::NetworkCache::IOChannel::open):
        (WebKit::NetworkCache::fillDataFromReadBuffer):
        (WebKit::NetworkCache::inputStreamReadReadyCallback):
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::readSync):
        (WebKit::NetworkCache::outputStreamWriteReadyCallback):
        (WebKit::NetworkCache::IOChannel::write):
        * NetworkProcess/cache/NetworkCacheStorageSoup.cpp: Removed.
        * NetworkProcess/gtk/NetworkProcessMainGtk.cpp:
        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        (WebKit::NetworkProcess::platformSetCacheModel):
        (WebKit::NetworkProcess::clearDiskCache):
        * PlatformGTK.cmake:

2015-04-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement ES6 template literals
        https://bugs.webkit.org/show_bug.cgi?id=142691

        Reviewed by Darin Adler.

        Add ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX compile time flag.

        * Configurations/FeatureDefines.xcconfig:

2015-04-26  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove PluginView::renderer().
        https://bugs.webkit.org/show_bug.cgi?id=144216

        Reviewed by Darin Adler.

        Nobody should have to know about the plug-in view's renderer except the plug-in view itself.

        No new tests, no behavior change.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::convertFromScrollbarToContainingView):
        (WebKit::PDFPlugin::convertFromContainingViewToScrollbar):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::renderer): Deleted.
        * WebProcess/Plugins/PluginView.h:

2015-04-26  Doug Russell  <d_russell@apple.com>

        AX: richer text change notifications (142719)
        https://bugs.webkit.org/show_bug.cgi?id=142719

        Reviewed by Darin Adler.

        Richer accessibility value change notifications. Introduce AXTextEditType,
        postTextStateChangeNotification and postTextReplacementNotification to give assistive
        tech apps more reliable context for responding to changes in web content. Also implement
        a mechanism to post value changes in password form fields in coalesced ticks to thwart
        analyzing the cadence of changes.

        Richer accessibility selection change notifications. Introduce AXTextStateChangeIntent,
        and an overload of postTextReplacementNotification to give assistive tech apps more
        reliable context for responding to changes in web content selection. Also block posting
        selection changes on password fields.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):

2015-04-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/20702337> REGRESSION (r182952): Plug-in service fails to load because it links against WebKit2.framework
        https://bugs.webkit.org/show_bug.cgi?id=144233

        Reviewed by Simon Fraser.

        Have the plug-in service link against WebKit.framework rather than WebKit2.framework.

        * Configurations/PluginService.32.xcconfig: Removed linker flags for linking against WebKit2
        and Foundation from the definition of OTHER_LDFLAGS. Since linking is no longer conditional,
        we can just do it in the target’s Link Binary With Libraries build phase.

        * Configurations/PluginService.64.xcconfig: Ditto.

        * WebKit2.xcodeproj/project.pbxproj: Have Foundation and WebKit listed in the services’ Link
        Binariy With Libraries build phases (one service already had WebKit).

2015-04-26  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showDocumentPickerMenu]): Suppressed deprecation warnings around use
        of -[UIDocumentMenuViewController _setIgnoreApplicationEntitlementForImport:].

2015-04-25  Tim Horton  <timothy_horton@apple.com>

        Further update gesture swipe shadow style
        https://bugs.webkit.org/show_bug.cgi?id=144215
        <rdar://problem/19295843>

        Reviewed by Dan Bernstein.

        * Resources/mac/SwipeShadow.png: Removed.
        * Resources/mac/SwipeShadow@2x.png: Removed.
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * WebKit2.xcodeproj/project.pbxproj:
        Use a CAGradientLayer instead of PNGs for the swipe shadow.

2015-04-25  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/20697966> Avoid using TBD as an argument to NS_AVAILABLE
        https://bugs.webkit.org/show_bug.cgi?id=144201

        Reviewed by Darin Adler.

        Instead of TBD, we use the high version number to which it corresponds in CFAvailability.h,
        9876.5.

        * mac/MigrateHeadersFromWebKitLegacy.make: To detect not-yet-available declarations in
        headers, look for "9876_5" rather than "TBA".

2015-04-24  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Remove native window dock controls
        https://bugs.webkit.org/show_bug.cgi?id=144184

        Reviewed by Joseph Pecoraro.

        * Resources/DockBottom.pdf: Removed.
        * Resources/DockBottomLegacy.pdf: Removed.
        * Resources/DockRight.pdf: Removed.
        * Resources/DockRightLegacy.pdf: Removed.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow):
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged):
        * WebKit2.xcodeproj/project.pbxproj:

2015-04-25  Martin Robinson  <mrobinson@igalia.com>

        Rename ENABLE_3D_RENDERING to ENABLE_3D_TRANSFORMS
        https://bugs.webkit.org/show_bug.cgi?id=144182

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.

2015-04-24  Simon Fraser  <simon.fraser@apple.com>

        Have the web inspector report accurate memory use for layers with detached backing store
        https://bugs.webkit.org/show_bug.cgi?id=144179

        Reviewed by Dean Jackson.
        
        Remote layers can make their backing store volatile, so the backing only contributes
        to reported memory use when attached.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2015-04-24  Andreas Kling  <akling@apple.com>

        theverge.com burning 100% CPU on iPad (due to window.screenX/Y)
        <https://webkit.org/b/144175>
        <rdar://problem/20694585>

        Reviewed by Anders Carlsson.

        Return an empty window rect on iOS WK2 builds. This avoids sending a synchronous
        IPC request to the UI process that would give the same result, but spend way
        more time and CPU cycles to do so.

        With this change, theverge.com CPU usage goes from 100% to ~20% when idle.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowRect):

2015-04-24  Brent Fulgham  <bfulgham@apple.com>

        TextIndicator for embedded PDFs is slightly offset
        https://bugs.webkit.org/show_bug.cgi?id=144172
        <rdar://problem/20691304>

        Reviewed by Tim Horton.

        When I converted the existing DOM Range logic to work with PDFSelections, I omitted the
        step where the font ascent was used to adjust the origin used for the TextIndicator. This
        patch determines the correct ascent for the range of characters in the selection, and
        adjusts the offset by the difference between the ascent and the height of the selection rect.
        
        Also, since the PDFSelection only supplies the bounding rect for the selection, I calculate
        an equivalent text bounding box by insetting the rect by half the size of the ascent.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::scaleFactor): Add accessor for PDF scale factor.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForPDFSelectionInPluginView): Adjusted to take the
        font ascent and scale factor into account.

2015-04-24  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r183293): Fix iOS EWS build by adding SPI declaration for +[UIPeripheralHost visiblePeripheralFrame]

        Fixes the following build failures:

            WebKit2/UIProcess/ios/WKPDFView.mm:740:45: error: class method '+visiblePeripheralFrame' not found (return type defaults to 'id') [-Werror,-Wobjc-method-access]
                CGRect keyboardRect = [UIPeripheralHost visiblePeripheralFrame];
                                                        ^~~~~~~~~~~~~~~~~~~~~~
            WebKit2/UIProcess/ios/WKPDFView.mm:740:12: error: no viable conversion from 'id' to 'CGRect'
                CGRect keyboardRect = [UIPeripheralHost visiblePeripheralFrame];
                       ^              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        * Platform/spi/ios/UIKitSPI.h:
        (+[UIPeripheralHost visiblePeripheralFrame]): Add declaration.

2015-04-24  Anders Carlsson  <andersca@apple.com>

        Change _WKWebsiteDataStore to hold on to an internal WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=144171

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _websiteDataStore]):
        (-[WKWebViewConfiguration _setWebsiteDataStore:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (-[_WKWebsiteDataStore initWithDataStore:]):
        (+[_WKWebsiteDataStore defaultDataStore]):
        (+[_WKWebsiteDataStore nonPersistentDataStore]):
        (-[_WKWebsiteDataStore isNonPersistent]):
        (-[_WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        (-[_WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):
        (-[_WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreInternal.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.h.
        * WebKit2.xcodeproj/project.pbxproj:

2015-04-24  Tim Horton  <timothy_horton@apple.com>

        WKPDFView does not support password-protected PDFs
        https://bugs.webkit.org/show_bug.cgi?id=144162
        <rdar://problem/18411512>

        Reviewed by Andy Estes.

        * Platform/spi/ios/UIKitSPI.h:
        Add some SPI.

        * UIProcess/ios/WKPDFView.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _didLoadPDFDocument]):
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):
        Move creation of the UIPDFDocument (only possible if the CGPDFDocument is unlocked)
        and initial setup of the page views out into _didLoadPDFDocument.

        If the CGPDFDocument is locked, we'll show some UI to unlock it; otherwise
        we'll continue on to _didLoadPDFDocument as previously.

        (-[WKPDFView web_setMinimumSize:]):
        Resize the password UI instead of the PDF pages if we have it.

        (-[WKPDFView _computePageAndDocumentFrames]):
        Don't bother doing any work revalidating PDF pages if the document is locked.

        (-[WKPDFView _updatePasswordEntryField]):
        Make sure that the UIDocumentPassword view is always the size of the scrollview.
        This takes care of rotation.

        (-[WKPDFView _keyboardDidShow:]):
        Make sure that we scroll the password field around, if necessary, to keep it
        on screen when editing begins.

        (-[WKPDFView _showPasswordEntryField]):
        (-[WKPDFView _hidePasswordEntryField]):
        Adjust the background color (to match the UIDocumentPasswordView) and disable zooming
        while it's up. The UIDocumentPassword view is installed into the scroll view
        to match UIWebView behavior.

        (-[WKPDFView userDidEnterPassword:forPasswordView:]):
        (-[WKPDFView didBeginEditingPassword:inView:]):
        (-[WKPDFView didEndEditingPassword:inView:]):
        (-[WKPDFView _didFailToUnlock]):
        Pop up a dialog informing the user that they entered the wrong password.

        (-[WKPDFView _tryToUnlockWithPassword:]):
        Try to unlock the document. If it succeeds, hide the unlock UI and go back to
        _didLoadPDFDocument.

2015-04-24  Commit Queue  <commit-queue@webkit.org>

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

        Broke 32-bit build and a test. (Requested by ap on #webkit).

        Reverted changeset:

        "AX: richer text change notifications (142719)"
        https://bugs.webkit.org/show_bug.cgi?id=142719
        http://trac.webkit.org/changeset/183266

2015-04-24  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION: WebKit2.ActionMenusTest API test fails
        https://bugs.webkit.org/show_bug.cgi?id=144149
        <rdar://problem/20677770>

        Reviewed by Tim Horton.

        Tested by TestWebKitAPI 

        The 'lookupTextAtLocation' method was not converting the NSEvent coordinates it
        was receiving from root view to the plugin view. Consequently, full page PDFs
        did hit testing correctly, but an <embed> PDF would not.

        Since 'existingSelectionContainsPoint' is exposed as API, I also modified it to
        expect 'root view' coordinates and perform the requisite conversions, rather
        than expecting 'plugin view' coordinates.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::existingSelectionContainsPoint): Expect 'root view' coordinates
        for the input.
        (WebKit::PDFPlugin::lookupTextAtLocation): Properly convert the passed 'root view'
        coordinates to the PDF's view coordinate space.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation): Pass hit point using view coordinates,
        not content coordinates.

2015-04-24  Anders Carlsson  <andersca@apple.com>

        Address a review comment from Joe Pecoraro.

        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:

2015-04-24  Anders Carlsson  <andersca@apple.com>

        Rename -[WKWebsiteDataStore isNonPersistent] to -[WKWebsiteDataStore isPersistent]
        https://bugs.webkit.org/show_bug.cgi?id=144158

        Reviewed by Beth Dakin.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::isPersistent):
        (API::WebsiteDataStore::isNonPersistent): Deleted.
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore isPersistent]):
        (-[WKWebsiteDataStore isNonPersistent]): Deleted.
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (-[_WKWebsiteDataStore isNonPersistent]):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2015-04-24  Brent Fulgham  <bfulgham@apple.com>

        Immediate action not functional for embedded PDFs
        https://bugs.webkit.org/show_bug.cgi?id=143952
        <rdar://problem/19842365>        

        Reviewed by Tim Horton.

        Add a new method to retrieve appropriate dictionary lookup content and update the
        hit test result with relevant dictionary content and the bounding rect of the
        selection.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Add stub.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp: Initialize plugin type.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::rectInWindowSpaceForRectInLayoutSpace): New helper function to
        convert PDF 'in page' units to the equivalent view units.
        (WebKit::PDFPlugin::PDFPlugin): Initialize plugin type.
        (WebKit::PDFPlugin::viewRectForSelection): Query a provided PDFSelection for
        its bounding rect and return the result in view units.
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp: Initialize plugin type.
        * WebProcess/Plugins/PluginProxy.h: Add stub.
        * WebProcess/Plugins/PluginView.cpp: 
        (WebKit::PluginView::viewRectForSelection): Added.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForPDFSelectionInPluginView): Added.
        (WebKit::textIndicatorTransitionForActionMenu): Added helper function.
        (WebKit::WebPage::performActionMenuHitTestAtLocation): Update the hit test information
        with relevant dictionary lookup content, and mark the result as a text node (if
        appropriate).

2015-04-24  Jer Noble  <jer.noble@apple.com>

        [WK2] Only issue a isPlayingAudioDidChange() notification if the audio playing state actually changed.
        https://bugs.webkit.org/show_bug.cgi?id=144153

        Reviewed by Alexey Proskuryakov.

        Check the old state vs. the new state and only issue the change notification if the IsPlayingAudio state changed.

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

2015-04-24  Antti Koivisto  <antti@apple.com>

        CrashTracer: [USER] com.apple.WebKit.Networking at com.apple.WebKit: WebKit::NetworkResourceLoader::~NetworkResourceLoader + 14
        https://bugs.webkit.org/show_bug.cgi?id=144147

        Reviewed by Chris Dumez.

        Storage::storeBodyAsBlob copies the std::function callback for handling mapped bodies in a thread.
        This is thread safe only if the function copy is thread safe. It is currently not as we are capturing
        RefPtr<NetworkResourceLoader> and NetworkResourceLoader doesn't use thread safe refcounting.

        Fix by avoiding copying of the callback. Use same apporach for WriteOperation as we already use for
        ReadOperation: count the active operations in progress and delete WriteOperation when everything is
        finished. This way we don't need to copy the function out from WriteOperation.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::ReadOperation::ReadOperation):
        (WebKit::NetworkCache::Storage::WriteOperation::WriteOperation):

            Move definition here from the header.

        (WebKit::NetworkCache::Storage::~Storage):
        (WebKit::NetworkCache::Storage::storeBodyAsBlob):

            Increment the operation count when storing a blob, call finishWriteOperation when done.

        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::Storage::finishReadOperation):

            Count active operations instead of finished operations. This makes the code clearer.

        (WebKit::NetworkCache::Storage::dispatchWriteOperation):
        (WebKit::NetworkCache::Storage::finishWriteOperation):

            Mirror the way ReadOperations work.

        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::ReadOperation::ReadOperation): Deleted.

2015-04-24  Timothy Hatcher  <timothy@apple.com>

        REGRESSION: Web Inspector: Start Timeline Recording in Develop menu broken
        https://bugs.webkit.org/show_bug.cgi?id=144150

        Reviewed by Brian Burg.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::evaluateCommandOnLoad): Properly treat bools as literals
        instead of strings by not using the string version of evaluateCommandOnLoad.

2015-04-23  Anders Carlsson  <andersca@apple.com>

        Add headerdocs for WKWebsiteDataRecord and WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=144138

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):

2015-04-24  Doug Russell  <d_russell@apple.com>

        AX: richer text change notifications (142719)
        https://bugs.webkit.org/show_bug.cgi?id=142719

        Reviewed by Darin Adler.

        Richer accessibility value change notifications. Introduce AXTextEditType, postTextStateChangeNotification and postTextReplacementNotification to give assistive tech apps more reliable context for responding to changes in web content. Also implement a mechanism to post value changes in password form fields in coalesced ticks to thwart analyzing the cadence of changes.

        Richer accessibility selection change notifications. Introduce AXTextStateChangeIntent, and an overload of postTextReplacementNotification to give assistive tech apps more reliable context for responding to changes in web content selection. Also block posting selection changes on password fields.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):

2015-04-24  Darin Adler  <darin@apple.com>

        Convert OwnPtr and PassOwnPtr uses to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=128007

        Reviewed by Anders Carlsson.

        * NetworkProcess/cache/NetworkCacheEncoder.h: Added an include now
        needed that was inherited from OwnPtr.h before.

2015-04-24  Antti Koivisto  <antti@apple.com>

        Network Cache: Make path functions members
        https://bugs.webkit.org/show_bug.cgi?id=144146

        Reviewed by Carlos Garcia Campos.

        This simplifies the code.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::partitionPathForKey):
        (WebKit::NetworkCache::Storage::recordPathForKey):
        (WebKit::NetworkCache::Storage::bodyPathForKey):
        (WebKit::NetworkCache::Storage::storeBodyAsBlob):
        (WebKit::NetworkCache::Storage::remove):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::Storage::finishReadOperation):
        (WebKit::NetworkCache::Storage::dispatchWriteOperation):
        (WebKit::NetworkCache::partitionPathForKey): Deleted.
        (WebKit::NetworkCache::recordPathForKey): Deleted.
        (WebKit::NetworkCache::bodyPathForKey): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Remove incorrect assert after r183189.

        In this case the assert was already there, but it's incorrect
        because we are handling uninitialized attachments below in the
        same function, and also when sending messages. So, if it's ok to
        send uninitialized attachments, it's ok to receive them. This
        didn't fail before r183189, because we were only invaliding the
        attachments by setting the file descriptor to -1, and they were
        handled as null attachments. After r183189, the move operator
        resets the moved attachment leaving it uninitialized again.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage):

2015-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Use a webkit subdirectory for the disk cache
        https://bugs.webkit.org/show_bug.cgi?id=144048

        Reviewed by Martin Robinson.

        Recent versions of libsoup remove any file in cache dir not
        referenced by the index when the cache is loaded to workaround
        leaked resources when load/dump is unbalanced for whatever reason,
        like a crash. We currently use $XDG_CACHE_HOME/app-name as default
        disk cache directory, but that directory could be used by apps to
        cache other things, and the soup cache might end up deleting other
        stuff. The soup cache assumes the given directory is only for the
        disk cache, so we should ensure that.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess): Append
        webkit to the given disk cache and clear the previous soup cache if it exists.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Ditto.

2015-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Remove incorrect ASSERT added in r183176.

        We allow to encode null attachments.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::releaseAttachment):

2015-04-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/20680694> Framework header postprocessing isn’t removing WK_DEPRECATED macros when it should.

        Reviewed by Andy Estes.

        * mac/postprocess-framework-headers.sh:

2015-04-23  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to detach GraphicsLayerCA backing store
        https://bugs.webkit.org/show_bug.cgi?id=144140

        Reviewed by Tim Horton.
        
        This changes makes it possible to denote a GraphicsLayerCA's backing store
        as "attached" or not. When not attached, the backing store is made volatile
        and can be purged. This will be used in a future patch.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::~RemoteLayerBackingStore): Whitespace.
        (WebKit::RemoteLayerBackingStore::display): If backingStoreWillBeDisplayed()
        returns true, this indicates that the backing store was brought out of the
        "unreachable" list, so return true even if the backing store doesn't require
        painting.
        * Shared/mac/RemoteLayerBackingStoreCollection.h: C++11 initializer, and comments.
        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        (WebKit::RemoteLayerBackingStoreCollection::RemoteLayerBackingStoreCollection):
        (WebKit::RemoteLayerBackingStoreCollection::backingStoreWillBeDisplayed): Return true
        if the caller will need to submit the backing store in the current transaction.
        (WebKit::RemoteLayerBackingStoreCollection::backingStoreBecameUnreachable): This
        explicit dirtying is no longer necessary given the backingStoreWillBeDisplayed() change.
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer): Only set the layer's backing if we both have backing
        store, and it's attached.
        * Shared/mac/RemoteLayerTreeTransaction.h: New bit, and data member.
        * 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::recursiveBuildTransaction): Only call display()
        on the backing store if it's attached.
        (WebKit::PlatformCALayerRemote::setBackingStoreAttached):
        (WebKit::PlatformCALayerRemote::backingStoreAttached):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::backingStoreWillBeDisplayed):

2015-04-23  Tim Horton  <timothy_horton@apple.com>

        Quick Look preview popover is not dismissed on scroll in Mail
        https://bugs.webkit.org/show_bug.cgi?id=144119
        <rdar://problem/19752045>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView renewGState]):
        If we have a TextIndicator, dismiss all content relative child windows
        on renewGState, not just the TextIndicator itself.

        This will fix cases like Mail, where WebKit isn't driving the scrolling,
        and we have no way (except renewGState) to know that scrolling is happening.

2015-04-23  Simon Fraser  <simon.fraser@apple.com>

        Changing TiledBacking velocity should schedule a tile revalidation
        https://bugs.webkit.org/show_bug.cgi?id=144123

        Reviewed by Tim Horton.
        
        Drive-by fix: use the FrameView& that we have already.

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

2015-04-23  Jer Noble  <jer.noble@apple.com>

        [Mac] Disable QTKit by default on future OS X.
        https://bugs.webkit.org/show_bug.cgi?id=144082

        Reviewed by Darin Adler.

        QTKitEnabled defaults to false.

        * Shared/WebPreferencesDefinitions.h:

2015-04-23  Jer Noble  <jer.noble@apple.com>

        [WK2][Mac] Tweak the timing curve of the WebKit Fullscreen animation
        https://bugs.webkit.org/show_bug.cgi?id=144120

        Reviewed by Eric Carlson.

        Tweak the curve to ease-in faster when the fullscreen animation duration is short.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (timingFunctionForDuration):
        (zoomAnimation):
        (maskAnimation):
        (fadeAnimation):

2015-04-23  Enrica Casucci  <enrica@apple.com>

        iOS build fix after r183208.

        Unreviewed.

        * UIProcess/ios/WKContentViewInteraction.mm:

2015-04-22  Alexey Proskuryakov  <ap@apple.com>

        [iOS] WebKit services should inherit environment variables for home
        https://bugs.webkit.org/show_bug.cgi?id=144078
        rdar://problem/20571678

        Reviewed by Dan Bernstein.

        Pass current environment variables as XPC bootstrap. Also while at it, made
        _CFBundleSetupXPCBootstrap not soft linked.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (main):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):

2015-04-23  Enrica Casucci  <enrica@apple.com>

        Support share button.
        https://bugs.webkit.org/show_bug.cgi?id=144077
        rdar://problem/19772892

        Reviewed by Darin Adler.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _share:]):
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView _define:]):
        (-[WKContentView accessibilityRetrieveSpeakSelectionContent]):
        (-[WKContentView moveByOffset:]):
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        (-[WKContentView accessoryTab:]):
        (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        (-[WKContentView executeEditCommandWithCallback:]):

2015-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] Do not allow copies of IPC::Attachment
        https://bugs.webkit.org/show_bug.cgi?id=144096

        Reviewed by Darin Adler.

        It ensures that the file descriptor ownership is always correctly
        transferred. This way we can remove the dispose() method to
        explicitly close the file descriptor and always close it in the
        Attachment destructor (unless explicitly transferred to
        IPC::Connection or SharedMemory). It simplifies the code and
        ensure we don't leak file descriptors.

        * Platform/IPC/ArgumentDecoder.cpp:
        (IPC::ArgumentDecoder::~ArgumentDecoder): Remove the code to
        explicitly dispose attachments.
        (IPC::ArgumentDecoder::removeAttachment): Use WTF::move().
        * Platform/IPC/ArgumentEncoder.cpp:
        (IPC::ArgumentEncoder::~ArgumentEncoder): Remove the code to
        explicitly dispose attachments.
        (IPC::ArgumentEncoder::addAttachment): Use WTF::move().
        (IPC::ArgumentEncoder::releaseAttachments): Simplify by using WTF::move().
        * Platform/IPC/ArgumentEncoder.h:
        * Platform/IPC/Attachment.cpp:
        (IPC::Attachment::encode): Move a copy of the attachment, and
        reset the file descriptor, since the ownership is passed to the encoder.
        * Platform/IPC/Attachment.h: Make copy constructor and assignment
        private to not allow public copies. The only copy allowed is done
        by Attachment::encode(). Make m_fileDescriptor mutable so that we
        can reset it in Attachment::encode() after passing the ownership
        to the encoder.
        * Platform/IPC/unix/AttachmentUnix.cpp:
        (IPC::Attachment::~Attachment): Close the file descriptor if it
        hasn't been released explicitly.
        (IPC::Attachment::dispose): Deleted.
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage): Do not use AttachmentResourceGuard.
        (IPC::Connection::sendOutgoingMessage): Ditto.
        (IPC::AttachmentResourceGuard::AttachmentResourceGuard): Deleted.
        (IPC::AttachmentResourceGuard::~AttachmentResourceGuard): Deleted.
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::~Handle): Do not call clear().
        (WebKit::SharedMemory::Handle::clear): Reset the attachment.
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage): Use WTF::move().
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        Call releaseFileDescriptor() instead of fileDescritpro() since the
        ownership is passed to the connection.

2015-04-23  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * WebProcess/cocoa/WebProcessCocoa.mm: Correct the case of an include file name.

2015-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix debug build after r183176.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::decode):
        (WebKit::SharedMemory::createHandle):

2015-04-23  Andreas Kling  <akling@apple.com>

        There should only be one way to get the system memory size.
        <https://webkit.org/b/144081>

        Reviewed by Antti Koivisto.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformSetCacheModel):
        (WebKit::memorySize): Deleted.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::memorySize): Deleted.

2015-04-23  Chris Dumez  <cdumez@apple.com>

        [WK2] WebDiagnosticLoggingClient is leaking
        https://bugs.webkit.org/show_bug.cgi?id=144089
        <rdar://problem/19706214>

        Reviewed by Darin Adler.

        WebDiagnosticLoggingClient is leaking. It is constructed inside WebPage
        constructor but there is no code destroying it.

        This patch adds a new xxxDestroyed() virtual function to
        DiagnosticLoggingClient and that is overriden in
        WebDiagnosticLoggingClient to call "delete this". This is the same
        pattern as for other WK2 clients (e.g. WebFrameLoaderClient,
        WebProgressTrackerClient).

        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::mainFrameDestroyed):
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:

2015-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] Simplify the file descriptor handling in SharedMemory
        https://bugs.webkit.org/show_bug.cgi?id=144046

        Reviewed by Darin Adler.

        Simplify the file descriptor handling and clarify its ownership by
        using IPC::Attachment in SharedMemory::Handle instead of fd and
        size members. SharedMemory::Handle::adoptFromAttachment() has been
        renamed as SharedMemory::Handle::adoptAttachment() and receives an
        IPC::Attachment. And SharedMemory::Handle::releaseToAttachment()
        has been renamed as SharedMemory::Handle::releaseAttachment().

        * Platform/IPC/Attachment.h: Add move constructor and move assigned operator.
        * Platform/IPC/Connection.h:
        (IPC::Connection::identifierIsNull): A file descriptor is null
        when it's -1 no 0.
        * Platform/IPC/unix/AttachmentUnix.cpp:
        (IPC::Attachment::Attachment):
        (IPC::Attachment::operator=):
        (IPC::Attachment::dispose): Reset the file descriptor after
        closing it.
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage): Use
        SharedMemory::Handle::adoptAttachment() that receives an
        IPC::Attachment now.
        (IPC::Connection::sendOutgoingMessage): Use
        SharedMemory::Handle::releaseAttachment().
        * Platform/SharedMemory.h:
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::Handle): Remove initializers for
        file descriptor and size members.
        (WebKit::SharedMemory::Handle::clear): Dispose the attachment.
        (WebKit::SharedMemory::Handle::isNull): Handle is null if the
        attachment file descriptor is -1.
        (WebKit::SharedMemory::Handle::encode): Use releaseAttachment().
        (WebKit::SharedMemory::Handle::decode): Use adoptAttachment().
        (WebKit::SharedMemory::Handle::releaseAttachment): Implement it
        using move.
        (WebKit::SharedMemory::Handle::adoptAttachment): Ditto.
        (WebKit::SharedMemory::map): Use
        IPC::Attachment::releaseFileDescriptor() instead of manually
        changing the member.
        (WebKit::SharedMemory::createHandle): Initialize the handle
        attachment with the duplicated file descriptor and size.

2015-04-22  Darin Adler  <darin@apple.com>

        Remove OwnPtr and PassOwnPtr use from WebKit/cf, WebKit/mac, and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=143943

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
        Removed unneeded include.

2015-04-22  Brent Fulgham  <bfulgham@apple.com>

        VisibleSelection should only accept Range by reference
        https://bugs.webkit.org/show_bug.cgi?id=144047

        Reviewed by Tim Horton.

        Update all uses of VisibleSelection to pass a Range reference instead
        of a Range pointer.

        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::renderedImage):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::getImageForFindMatch):
        (WebKit::FindController::selectFindMatch):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertTextAsync):
        (WebKit::WebPage::setCompositionAsync):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::insertDictatedTextAsync):

2015-04-22  Anders Carlsson  <andersca@apple.com>

        Add WK_ARRAY and WK_SET annotations
        https://bugs.webkit.org/show_bug.cgi?id=144075
        rdar://problem/19417770

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WKFoundation.h:
        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * mac/postprocess-framework-headers.sh:

2015-04-22  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r183136.

        * WebProcess/WebPage/mac/WebPageMac.mm: Correct capitalization of
        'HTMLPluginImageElement.h' -> 'HTMLPlugInImageElement.h'

2015-04-21  Brent Fulgham  <bfulgham@apple.com>

        Extend action menus to support PDF
        https://bugs.webkit.org/show_bug.cgi?id=143895
        <rdar://problem/19003333>

        Reviewed by Tim Horton.

        If the mouse pointer is over a PDF, try to provide a relevant action menu for whatever
        content is under the mouse. For now, we only support copying text and handling URLs.

        If no text is selected, use the dictionary lookup service to find a semantically appropriate
        selection underneath the mouse. This is consistent with how normal text is treated in pure HTML
        views. If some text is already selected, and the mouse is over the existing selection, continue
        using the selected text. Otherwise, discard the old selection and select the most appropriate
        region under the mouse pointer.

        * Shared/API/c/WKActionMenuTypes.h: Add PDF menu option.
        * Shared/WebMouseEvent.cpp: Recognize mouse force events as valid mouse events.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForPDF]): Add simply copy text option.
        (-[WKActionMenuController _defaultMenuItems]): Recognize PDFs and add relevant action
        menu entries.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Provide stub for new method.
        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h: Expose 'rectsForSelectionInLayerSpace',
        'rectsForAnnotationInLayoutSpace', 'layout', and 'currentPage'.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::getSelectionForWordAtPoint): Added.
        (WebKit::PDFPlugin::existingSelectionContainsPoint): Added.
        (WebKit::PDFPlugin::lookupTextAtLocation): Added.
        * WebProcess/Plugins/Plugin.h: Add declaration for new 'getSelectionForWordAtPoint' method.
        * WebProcess/Plugins/PluginProxy.h: Provide stub for new method.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::getSelectionForWordAtPoint): Added.
        (WebKit::PluginView::existingSelectionContainsPoint): Added.
        (WebKit::PluginView::lookupTextAtLocation): Added.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation): Update to support PDF documents and retrieve
        relevant content to support later action menu handling.

2015-04-22  Eric Carlson  <eric.carlson@apple.com>

        Update AirPlay sandbox rules
        https://bugs.webkit.org/show_bug.cgi?id=144062
        <rdar://problem/19869448>

        Reviewed by Alexey Proskuryakov.

        * WebProcess/com.apple.WebProcess.sb.in: Remove obsolete rules.

2015-04-22  Alexey Proskuryakov  <ap@apple.com>

        [Mac] In nightlies and local builds, WebKit services can get terminated under memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=144052
        rdar://problem/19754404

        Reviewed by Darin Adler.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        (main): Make XPC transaction tracking work again after a re-exec.

2015-04-22  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Have API::Array creation methods return Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=143933

        Reviewed by Darin Adler.

        API::Array::create() and API::Array::createStringArray() should return Ref<> objects
        as the return values are never null. It's up to the caller to implicitly convert the
        returned objects to RefPtr<> if so required. All the call-sites have been updated to
        reflect that.

        * Shared/API/APIArray.cpp:
        (API::Array::create):
        (API::Array::createStringArray):
        (API::Array::copy):
        * Shared/API/APIArray.h:
        * Shared/API/APIDictionary.cpp:
        (API::Dictionary::keys):
        * Shared/API/APIDictionary.h:
        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (ensureObjectStream):
        * Shared/API/c/WKArray.cpp:
        (WKArrayCreate):
        (WKArrayCreateAdoptingValues):
        * Shared/API/c/WKContextMenuItem.cpp:
        (WKContextMenuCopySubmenuItems):
        * Shared/API/c/WKDictionary.cpp:
        (WKDictionaryCopyKeys):
        * Shared/API/c/WKMutableArray.cpp:
        (WKMutableArrayCreate):
        * Shared/Cocoa/WKNSDictionary.mm:
        (-[WKNSDictionary keyEnumerator]):
        * Shared/SecurityOriginData.cpp:
        (WebKit::performAPICallbackWithSecurityOriginDataVector):
        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::submenuItemsAsAPIArray):
        * Shared/WebContextMenuItem.h:
        * Shared/WebOpenPanelParameters.cpp:
        (WebKit::WebOpenPanelParameters::acceptMIMETypes):
        (WebKit::WebOpenPanelParameters::selectedFileNames):
        * Shared/WebOpenPanelParameters.h:
        * UIProcess/API/C/WKBackForwardListRef.cpp:
        (WKBackForwardListCopyBackListWithLimit):
        (WKBackForwardListCopyForwardListWithLimit):
        * UIProcess/API/C/WKGrammarDetail.cpp:
        (WKGrammarDetailCopyGuesses):
        * UIProcess/API/C/WKOpenPanelParameters.cpp:
        (WKOpenPanelParametersCopyAcceptedMIMETypes):
        (WKOpenPanelParametersCopySelectedFileNames):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient):
        (WKPageCopyRelatedPages):
        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        (-[WKBackForwardList backList]):
        (-[WKBackForwardList forwardList]):
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
        (createWKArray):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        (webkit_back_forward_list_get_back_list_with_limit):
        (webkit_back_forward_list_get_forward_list_with_limit):
        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (webkit_file_chooser_request_get_mime_types):
        (webkit_file_chooser_request_get_mime_types_filter):
        (webkit_file_chooser_request_select_files):
        * UIProcess/API/gtk/WebKitNotificationProvider.cpp:
        (WebKitNotificationProvider::notificationCloseCallback):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::populateCopyOfNotificationPermissions):
        * UIProcess/Notifications/WebNotificationProvider.cpp:
        (WebKit::WebNotificationProvider::clearNotifications):
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::didGetSitesWithData):
        * UIProcess/StatisticsRequest.cpp:
        (WebKit::StatisticsRequest::completedRequest):
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backList):
        (WebKit::WebBackForwardList::forwardList):
        (WebKit::WebBackForwardList::backListAsAPIArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsAPIArrayWithLimit):
        * UIProcess/WebBackForwardList.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::didGetHostnamesWithCookies):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::didGetDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::didGetDatabaseOrigins):
        * UIProcess/WebGrammarDetail.cpp:
        (WebKit::WebGrammarDetail::guesses):
        * UIProcess/WebGrammarDetail.h:
        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::didGetHostnamesWithMediaCache):
        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::WebOriginDataManagerProxy::didGetOrigins):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFindStringMatches):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::pluginInfoStoreDidLoadPlugins):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _chooseFiles:displayString:iconImage:]):
        (-[WKFileUploadPanel presentWithParameters:resultListener:]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame childFrames]):
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp:
        (WKBundleBackForwardListItemCopyChildren):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyChildFrames):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyTrackedRepaintRects):
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp:
        (WebKit::InjectedBundleBackForwardListItem::children):
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.h:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        (WebKit::InjectedBundlePageContextMenuClient::getCustomMenuFromDefaultItems):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::didAssociateFormControls):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::featuresUsedInPage):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::findLargestFrameInFrameSet):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::childFrames):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::trackedRepaintRects):
        * WebProcess/WebPage/WebPage.h:

2015-04-21  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Use one playback target for all web processes
        https://bugs.webkit.org/show_bug.cgi?id=144009

        Reviewed by Tim Horton.

        Every WebPageProxy uses the WebMediaSessionManager singleton to talk to the playback target
        picker.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::isPlayingMediaDidChange):
        (WebKit::WebPageProxy::addPlaybackTargetPickerClient):
        (WebKit::WebPageProxy::removePlaybackTargetPickerClient):
        (WebKit::WebPageProxy::showPlaybackTargetPicker):
        (WebKit::WebPageProxy::playbackTargetPickerClientStateDidChange):
        (WebKit::WebPageProxy::setPlaybackTarget):
        (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange):
        (WebKit::WebPageProxy::setShouldPlayToPlaybackTarget):
        (WebKit::WebPageProxy::devicePickerProxy): Deleted.
        (WebKit::WebPageProxy::startingMonitoringPlaybackTargets): Deleted.
        (WebKit::WebPageProxy::stopMonitoringPlaybackTargets): Deleted.
        (WebKit::WebPageProxy::didChoosePlaybackTarget): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isPlayingAudio):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::mediaSessionManager):
        (WebKit::PageClientImpl::createPlaybackTargetPicker): Deleted.
        * UIProcess/mac/WebMediaSessionManagerMac.cpp: Added.
        (WebKit::WebMediaSessionManagerMac::singleton):
        (WebKit::WebMediaSessionManagerMac::WebMediaSessionManagerMac):
        (WebKit::WebMediaSessionManagerMac::~WebMediaSessionManagerMac):
        (WebKit::WebMediaSessionManagerMac::targetPicker):
        * UIProcess/mac/WebMediaSessionManagerMac.h: Added.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::isPlayingMediaDidChange):
        (WebKit::WebChromeClient::addPlaybackTargetPickerClient):
        (WebKit::WebChromeClient::removePlaybackTargetPickerClient):
        (WebKit::WebChromeClient::showPlaybackTargetPicker):
        (WebKit::WebChromeClient::playbackTargetPickerClientStateDidChange):
        (WebKit::WebChromeClient::startingMonitoringPlaybackTargets): Deleted.
        (WebKit::WebChromeClient::stopMonitoringPlaybackTargets): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::playbackTargetSelected):
        (WebKit::WebPage::playbackTargetAvailabilityDidChange):
        (WebKit::WebPage::setShouldPlayToPlaybackTarget):

2015-04-21  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore doesn't track and remove IndexedDB databases
        https://bugs.webkit.org/show_bug.cgi?id=144032
        rdar://problem/20242856

        Reviewed by Tim Horton.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::fetchWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteData):
        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseProcess.messages.in:
        * Shared/WebsiteData/WebsiteDataTypes.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::generateCallbackID):
        (WebKit::DatabaseProcessProxy::~DatabaseProcessProxy):
        (WebKit::DatabaseProcessProxy::fetchWebsiteData):
        (WebKit::DatabaseProcessProxy::deleteWebsiteData):
        (WebKit::DatabaseProcessProxy::deleteWebsiteDataForOrigins):
        (WebKit::DatabaseProcessProxy::didClose):
        (WebKit::DatabaseProcessProxy::didFetchWebsiteData):
        (WebKit::DatabaseProcessProxy::didDeleteWebsiteData):
        (WebKit::DatabaseProcessProxy::didDeleteWebsiteDataForOrigins):
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Databases/DatabaseProcessProxy.messages.in:
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        (WebKit::WebsiteDataStore::removeData):

2015-04-21  Anders Carlsson  <andersca@apple.com>

        Add module maps for WebKit
        https://bugs.webkit.org/show_bug.cgi?id=144026
        rdar://problem/19665428

        Reviewed by Dan Bernstein.

        * Configurations/WebKit.xcconfig:
        * Modules/OSX.modulemap: Added.
        * Modules/iOS.modulemap: Added.

2015-04-21  Tim Horton  <timothy_horton@apple.com>

        Long pause under _takeViewSnapshot when screen updates are disabled
        https://bugs.webkit.org/show_bug.cgi?id=144017
        <rdar://problem/20548397>

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        Use CGSHWCaptureWindowList, for snapshotting that doesn't block on
        the next commit, and can succeed while screen updates are disabled
        without blocking.

2015-04-21  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Better account of resource revalidations in efficacy logging
        https://bugs.webkit.org/show_bug.cgi?id=144014

        Reviewed by Antti Koivisto.

        Better account of resource revalidations in efficacy logging.
        Prevously, resources that were in the cache but needed revalidation
        were counted as retrieval successes, which is not entirely accurate.

        We now distinguish "is in the cache and is directly usable" from
        "is in the cache but needs revalidation". We also log how many of these
        revalidations are successful.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::update):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::recordRetrievedCachedEntry):
        (WebKit::NetworkCache::Statistics::recordRevalidationSuccess):
        * NetworkProcess/cache/NetworkCacheStatistics.h:

2015-04-21  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Framework header postprocessing should respect additional definitions
        https://bugs.webkit.org/show_bug.cgi?id=144018

        Reviewed by Anders Carlsson.

        * mac/postprocess-framework-headers.sh: Read definitons from
        /usr/local/include/WebKitAdditions/Scripts/postprocess-framework-headers-definitions, and
        have them take precedence over OSX_VERSION and IOS_VERSION and supply additional options to
        sed.

2015-04-21  Anders Carlsson  <andersca@apple.com>

        Fix block signatures
        https://bugs.webkit.org/show_bug.cgi?id=144002

        Reviewed by Andreas Kling.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (-[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (-[_WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):
        (-[_WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _highlightLinkAnnotation:forDuration:completionHandler:]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _processMediaInfoDictionaries:successBlock:failureBlock:]):
        (-[WKFileUploadPanel _processMediaInfoDictionaries:atIndex:processedResults:processedImageCount:processedVideoCount:successBlock:failureBlock:]):
        (-[WKFileUploadPanel _uploadItemFromMediaInfo:successBlock:failureBlock:]):

2015-04-21  Timothy Horton  <timothy_horton@apple.com>

        PDFs still don't snapshot properly in iOS Safari
        https://bugs.webkit.org/show_bug.cgi?id=143976
        <rdar://problem/18283459>

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didLayoutForCustomContentProvider):
        * UIProcess/WebPageProxy.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:data:]):
        Inform the client that we've passed all reasonable layout milestones
        as soon as the custom content provider has been handed its data.
        WKPDFView, the only custom content provider, synchronously lays out
        its subviews upon initial receipt of data, so this works fine for it.
        This ensures that clients that normally depend on layout milestones firing
        won't break when a custom content view is installed.

        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        Fall back to renderInContext: if the custom content view is not parented
        when a snapshot is requested.

2015-04-21  Dan Bernstein  <mitz@apple.com>

        Merged WKBackForwardListItem’s Internal category into the class extension in WKBackForwardListItemInternal.h.

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKBackForwardListItem.mm:
        (-[WKBackForwardListItem _item]):
        (-[WKBackForwardListItem _apiObject]):
        * UIProcess/API/Cocoa/WKBackForwardListItemInternal.h:

2015-04-21  Chris Dumez  <cdumez@apple.com>

        Make Vector(const Vector<T, otherCapacity, otherOverflowBehaviour>&) constructor explicit
        https://bugs.webkit.org/show_bug.cgi?id=143970

        Reviewed by Darin Adler.

        Make Vector(const Vector<T, otherCapacity, otherOverflowBehaviour>&)
        constructor explicit as it copies the vector and it is easy to call it
        by mistake.

        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        (WebKit::WebIDBServerConnection::setIndexKeys):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:

2015-04-20  Dan Bernstein  <mitz@apple.com>

        Expose more bundle form client functions as WKWebProcessPlugInFormDelegatePrivate methods
        https://bugs.webkit.org/show_bug.cgi?id=143973

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Declared new
        delegate methods.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h: Declared new frame
        property.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle frame]): Added. Returns the node’s document’s frame. This is
        useful to delegates getting an array of nodes via the new method.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Added overrides of
        shouldNotifyOnFormChanges and didAssociateFormControls, which call the new delegate methods.

2015-04-20  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup some StringBuilder use
        https://bugs.webkit.org/show_bug.cgi?id=143550

        Reviewed by Darin Adler.

        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp:
        (WebKit::buildObjectStoreStatement):
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::v2RecordsTableSchema):
        * Shared/Databases/IndexedDB/IDBUtilities.cpp:
        (WebKit::uniqueDatabaseIdentifier):
        * UIProcess/API/APIUserScript.cpp:
        (API::UserScript::generateUniqueURL):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::didReceiveInvalidMessage):
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp:
        (WebKit::combinedSecurityOriginIdentifier):

2015-04-20  Anders Carlsson  <andersca@apple.com>

        Modify the WKWebsiteDataStore API to take a NSSet of types instead of a bitmask
        https://bugs.webkit.org/show_bug.cgi?id=143966

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
        (dataTypesToString):
        (-[WKWebsiteDataRecord dataTypes]):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
        (+[WKWebsiteDataStore allWebsiteDataTypes]):
        (-[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (toWKWebsiteDataTypes):
        (-[_WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        (-[_WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):
        (-[_WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):

2015-04-20  Beth Dakin  <bdakin@apple.com>

        Should remove mouseForceClick and mouseForceCancelled from DOM force events
        https://bugs.webkit.org/show_bug.cgi?id=143904
        -and corresponding-
        rdar://problem/20578842

        Reviewed by Dan Bernstein.

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

2015-04-20  Tim Horton  <timothy_horton@apple.com>

        Implement immediate action support for tel: and mailto: URLs
        https://bugs.webkit.org/show_bug.cgi?id=143916
        <rdar://problem/19721711>

        Reviewed by Darin Adler.

        * Shared/API/c/WKImmediateActionTypes.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController _animationControllerForDataDetectedText]):
        (-[WKImmediateActionController _animationControllerForDataDetectedLink]):
        (-[WKImmediateActionController _menuItemForDataDetectedText]): Deleted.
        Add _animationControllerForDataDetectedLink and use it when
        building immediate actions for tel: and mailto: links.

2015-04-20  Alex Christensen  <achristensen@webkit.org>

        Properly report errors from _WKUserContentExtensionStore.
        https://bugs.webkit.org/show_bug.cgi?id=143808

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
        (-[_WKUserContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):

2015-04-18  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r181656): Animated tiled layers are missing content
        https://bugs.webkit.org/show_bug.cgi?id=143911
        rdar://problem/20596328

        Reviewed by Darin Adler.
        
        After r181656, all requestAnimationFrame was falling back to timers, and not
        using the platform's DisplayRefreshMonitor, because of a Nullopt vs nullptr
        fumble.
        
        Replace this confusing Optional<> code with simpler code that just forces the
        clients to make a DisplayRefreshMonitor if they can, first asking
        ChromeClient, and then falling back to createDefaultDisplayRefreshMonitor().
        
        Make lots of things into references, and use C++11 initialization in some places.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createDisplayRefreshMonitor):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2015-04-18  Dan Bernstein  <mitz@apple.com>

        SwipeShadow images are installed on iOS
        https://bugs.webkit.org/show_bug.cgi?id=143915

        Reviewed by Tim Horton.

        * Configurations/WebKit.xcconfig: Added Resources/Mac/* to
        EXCLUDED_SOURCE_FILE_NAMES[sdk=iphone*]. We could move more resources there and remove
        individual patterns.
        * Resources/SwipeShadow.png: Moved to mac.
        * Resources/SwipeShadow@2x.png: Moved to mac.
        * Resources/mac: Added.
        * Resources/mac/SwipeShadow.png: Moved from Source/WebKit2/Resources/SwipeShadow.png.
        * Resources/mac/SwipeShadow@2x.png: Moved from Source/WebKit2/Resources/SwipeShadow@2x.png.
        * WebKit2.xcodeproj/project.pbxproj: Created mac group in the Resources group and moved
        SwipeShadow*.png into it. Updated for file moves.

2015-04-18  Chris Dumez  <cdumez@apple.com>

        Fix NetworkCache Statistics database bootstrapping after r182803
        https://bugs.webkit.org/show_bug.cgi?id=143890

        Reviewed by Darin Adler.

        Update the NetworkCache Statistics database bootstrapping code to use
        the records path instead of the version path. Also check that the
        filenames in the folder are valid hashes to discard the *-body files.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::recordsPath):
        (WebKit::NetworkCache::Cache::storagePath): Deleted.
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::Statistics::initialize):
        (WebKit::NetworkCache::Statistics::bootstrapFromNetworkCache):
        (WebKit::NetworkCache::Statistics::shrinkIfNeeded):

2015-04-17  Tim Horton  <timothy_horton@apple.com>

        Clients sometimes block for 500ms in waitForPossibleGeometryUpdates
        https://bugs.webkit.org/show_bug.cgi?id=143901
        <rdar://problem/20488655>

        Reviewed by Anders Carlsson.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForMessage):
        InterruptWaitingIfSyncMessageArrives already cancels waitForMessage if
        a sync message arrives while waiting, but it should also avoid waiting
        if there's a sync message already in the queue when the waiting starts,
        as that will have the same nasty effect.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForPossibleGeometryUpdate):
        If a synchronous message comes in from the Web process while we're waiting,
        cancel our synchronous wait for DidUpdateGeometry. This will cause the size
        change to not synchronize with the Web process' painting, but that is better
        than pointlessly blocking for 500ms.

2015-04-17  Chris Dumez  <cdumez@apple.com>

        Possible null pointer dereference in WebDiagnosticLoggingClient::logDiagnosticMessageWithValue()
        https://bugs.webkit.org/show_bug.cgi?id=143899
        <rdar://problem/20584215>

        Reviewed by Anders Carlsson.

        WebDiagnosticLoggingClient::logDiagnosticMessage*() methods failed to
        check that m_page.corePage() was non-null before dereferencing, thus
        causing crashes when it is null.

        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue):

2015-04-17  Yongjun Zhang  <yongjun_zhang@apple.com>

        WebKit client should be able to add view controller for link preview.
        https://bugs.webkit.org/show_bug.cgi?id=143686

        Add delegate methods to WKUIDelegatePrivate so that a WebKit client can prepare a view controller
        for link preview and react to the dismissal of this view controller. Also connect WKContentView to
        preview gesture recognizer and forwards the delegate callbacks to corresponding delegate methods
        in WKUIDelegatePrivate.

        Reviewed by Beth Dakin.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView willMoveToWindow:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView gestureRecognizer:canPreventGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView previewViewControllerForPosition:inSourceView:]):
        (-[WKContentView commitPreviewViewController:]):
        (-[WKContentView willPresentPreviewViewController:forPosition:inSourceView:]):
        (-[WKContentView didDismissPreviewViewController:committing:]):

2015-04-17  Beth Dakin  <bdakin@apple.com>

        Force mouse events should go through normal mouse event handling code paths
        https://bugs.webkit.org/show_bug.cgi?id=143749
        -and corresponding-
        rdar://problem/20472895

        Reviewed by Dean Jackson.

        This patch makes pressureChangeWithEvent create NativeWebMouseEvents with the 
        NSEventTypePressures that is gets and sends those down to the web process.

        Re-name pressureEvent to lastPressureEvent. Now that event can sometimes be an 
        NSEventTypePressure, the new name makes it clear how the second parameter differs 
        from the first.
        * Shared/NativeWebMouseEvent.h:

        New event types for the new types of events.
        * Shared/WebEvent.h:
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        * Shared/mac/NativeWebMouseEventMac.mm:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/mac/WebEventFactory.h:

        All of the square-peg, round-hole problems of massaging the NSEventTypePressures 
        events into WebMouseEvents is taken care of here.
        * Shared/mac/WebEventFactory.mm:
        (WebKit::mouseButtonForEvent):
        (WebKit::globalPointForEvent):
        (WebKit::pointForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):

        Instead of calling the old inputDeviceForceDidChange, create a NativeWebMouseEvent 
        and handle it.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView pressureChangeWithEvent:]):

        Handle the new types.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent):

        Can delete inputDeviceForceDidChange since it’s no longer used.
        (WebKit::WebPageProxy::inputDeviceForceDidChange): Deleted.
        * UIProcess/WebPageProxy.h:

        Handle the new types of mouse events properly.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleMouseEvent):

        Delete inputDeviceForceDidChange() and m_lastForceStage.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::inputDeviceForceDidChange): Deleted.

        Handle new WebEvent types.
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:

2015-04-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182912 and r182920.
        https://bugs.webkit.org/show_bug.cgi?id=143881

        Build breakage in some configurations (Requested by ap on
        #webkit).

        Reverted changesets:

        "Force mouse events should go through normal mouse event
        handling code paths"
        https://bugs.webkit.org/show_bug.cgi?id=143749
        http://trac.webkit.org/changeset/182912

        http://trac.webkit.org/changeset/182920

2015-04-17  Antti Koivisto  <antti@apple.com>

        Network Cache: Read resource record and body in parallel
        https://bugs.webkit.org/show_bug.cgi?id=143879

        Reviewed by Chris Dumez.

        We currently first fetch the record file and then fetch the body blob if needed.
        We can do both operations in parallel to reduce latency.

        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h:
        (WebKit::NetworkCache::traverseCacheFiles):

            Do all validation in the client.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::synchronize):

            Maintain a bloom filter that contains the body blobs to avoid unnecessary IO attempts.
            Delete any unknown file in cache directory.

        (WebKit::NetworkCache::Storage::addToRecordFilter):

            More informative name for record filter.

        (WebKit::NetworkCache::Storage::mayContain):
        (WebKit::NetworkCache::Storage::readRecord):
        (WebKit::NetworkCache::Storage::storeBodyAsBlob):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):

            Start record read IO and body blob read IO in parallel.

        (WebKit::NetworkCache::Storage::finishReadOperation):

            The read is finished when we have both the record and the blob.

        (WebKit::NetworkCache::Storage::dispatchWriteOperation):
        (WebKit::NetworkCache::Storage::retrieve):
        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):
        (WebKit::NetworkCache::Storage::shrink):
        (WebKit::NetworkCache::Storage::addToContentsFilter): Deleted.
        (WebKit::NetworkCache::Storage::decodeRecord): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::ReadOperation::ReadOperation):

            ReadOperation is now mutable and gathers the read result.

2015-04-16  Anders Carlsson  <andersca@apple.com>

        Stop installing WebKit2.framework
        https://bugs.webkit.org/show_bug.cgi?id=143860
        rdar://problem/18298491

        Reviewed by Dan Bernstein.

        * Configurations/WebKit2.xcconfig:
        Set SKIP_INSTALL=YES for all SDKs except 10.9 where we still need it.

2015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build with ENABLE(NETWORK_CACHE) and !ENABLE(SHAREABLE_RESOURCE).

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h:
        (WebKit::NetworkCache::fileTimes): There's no st_birthtime in Linux.

2015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] ResourceRequest cache policy is not encoded/decoded in IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=143867

        Reviewed by Sergio Villar Senin.

        Encode/Decode the ResourceRequest cache policy.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):

2015-04-16  Sungmann Cho  <sungmann.cho@navercorp.com>

        Use UNUSED_PARAM instead of the void casting to suppress unused parameter warnings.
        https://bugs.webkit.org/show_bug.cgi?id=143750

        Reviewed by Darin Adler.

        No new tests, no behavior change.

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::NotificationPermissionRequestManager):

2015-04-16  Brady Eidson  <beidson@apple.com>

        Compiling a content extension fails when user's home directory is on a different volume from /var/tmp.
        https://bugs.webkit.org/show_bug.cgi?id=143834

        Reviewed by Anders Carlsson.

        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::compiledToFile): Use moveFile() instead of renameFile()

2015-04-16  Anders Carlsson  <andersca@apple.com>

        Deprecate _WKWebsiteDataStore in favor of WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=143844

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WKFoundation.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _validate]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * mac/postprocess-framework-headers.sh:

2015-04-16  Alex Christensen  <achristensen@webkit.org>

        Removed unused WKUserContentFilterRef.
        https://bugs.webkit.org/show_bug.cgi?id=143852

        Reviewed by Sam Weinig.

        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::LegacyContentExtensionCompilationClient::LegacyContentExtensionCompilationClient): Deleted.
        (WebKit::LegacyContentExtensionCompilationClient::writeBytecode): Deleted.
        (WebKit::LegacyContentExtensionCompilationClient::writeActions): Deleted.
        (WebKit::WebCompiledContentExtension::createFromCompiledContentExtensionData): Deleted.
        * Shared/WebCompiledContentExtension.h:
        * UIProcess/API/C/WKUserContentFilterRef.cpp: Removed.
        * UIProcess/API/C/WKUserContentFilterRef.h: Removed.
        * UIProcess/API/C/WebKit2_C.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter initWithName:serializedRules:]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2015-04-16  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Tim Horton.

        Fixing a small mistake in http://trac.webkit.org/changeset/182912 which should 
        make sure to use the most up-to-date pressure information when setting the force 
        on a WebMouseEvent.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebMouseEvent):

2015-04-13  Jer Noble  <jer.noble@apple.com>

        [iOS] When simultaneously exiting-and-entering fullscreen, WebVideoFullscreenManager/Proxy becomes confused about what video element it represents.
        https://bugs.webkit.org/show_bug.cgi?id=143680

        Reviewed by Simon Fraser.

        The original assumption of WebVideoFullscreenManager and -Proxy was that the two classes would represent a
        single video element and its full screen state. With multiple animations in and out of fullscreen combined with
        multiple fullscreen modes, this assumption no longer holds true.

        Rather than having a WebVideoFullscreenManager which /isa/ WebVideoFullscreenModelVideoElement, the manager now
        /hasa/ WebVideoFullscreenModelVideoElement (or has many such models). Ditto for WebVideoFullscreenManager and
        WebVideoFullscreenInterfaceAVKit. The WebVideoFullscreenInterfaceAVKit still needs a WebVideoFullscreenModel to
        communicate with, so a new wrapper class is used for that purpose, WebVideoFullscreenModelContext. Ditto for
        WebVideoFullscreenModelVideoElement and the new class WebVideoFullscreenInterfaceContext. These context classes
        are paired and share a contextId, allowing the manager and its proxy to route messages between the UIProcess's
        WebVideoFullscreenInterfaceAVKit to-and-from the WebProcess's WebVideoFullscreenModelVideoElement.

        Both the WebVideoFullscreenModelContext and the WebVideoFullscreenInterfaceContext take a back-pointer to their
        manager or manager proxy, and each method on the context simply calls the matching method on the manager and
        passes its contextId as a parameter.

        Both the WebVideoFullscreenManager and the WebVideoFullscreenManagerProxy pass that contextId in each of their
        cross-process messages.

        On the other side, the manager and proxy also have a map between contextIds and their matching
        WebVideoFullscreenModelVideoElement (in the case of WebVideoFullscreenManager) or
        WebVideoFullscreenInterfaceAVKit (in the case of WebVideoFullscreenManagerProxy).

        While this change is large by LoC, it is almost entirely boilerplate.  The new and interesting pieces are these:

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::WebVideoFullscreenManagerProxy): No longer a WebVideoFullscreenInterfaceAVKit.
        (WebKit::WebVideoFullscreenManagerProxy::invalidate): Walk through the models and interfaces, invalidating each.
        (WebKit::WebVideoFullscreenManagerProxy::createModelAndInterface): Added. Return a new model and interface tuple.
        (WebKit::WebVideoFullscreenManagerProxy::ensureModelAndInterface): Added. Lazily create, and add to the m_contextMap
            a new model and interface object.
        (WebKit::WebVideoFullscreenManagerProxy::ensureModel): Return the model half of ensureModelAndInterface().
        (WebKit::WebVideoFullscreenManagerProxy::ensureInterface): Return the interface half of ensureModelAndInterface().
        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreen): Walk through the outstanding interface objects, and if 
            any have a fullscreen mode which matches the about-to-be-fullscreen interface, request that that other interface
            exit fullscreen.
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::nextContextId): Static, incrementing counter used as a contextId source.
        (WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager): No longer a WebVideoFullscreenModelVideoElement.
        (WebKit::WebVideoFullscreenManager::~WebVideoFullscreenManager): Walk through the models and interfaces, invalidating each.
        (WebKit::WebVideoFullscreenManager::ensureModelAndInterface): Added. Return a new model and interface tuple.
        (WebKit::WebVideoFullscreenManager::ensureModelAndInterface):  Added. Lazily create, and add to the m_contextMap
            a new model and interface object.
        (WebKit::WebVideoFullscreenManager::ensureModel): Return the model half of ensureModelAndInterface().
        (WebKit::WebVideoFullscreenManager::ensureInterface): Return the interface half of ensureModelAndInterface().

        New classes and methods which just forward on to their owning objects:

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        (WebKit::WebVideoFullscreenModelContext::create):
        (WebKit::WebVideoFullscreenModelContext::~WebVideoFullscreenModelContext):
        (WebKit::WebVideoFullscreenModelContext::invalidate):
        (WebKit::WebVideoFullscreenModelContext::layerHost):
        (WebKit::WebVideoFullscreenModelContext::setLayerHost):
        (WebKit::WebVideoFullscreenModelContext::setInitialVideoLayerFrame):
        (WebKit::WebVideoFullscreenModelContext::WebVideoFullscreenModelContext):
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (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::requestExitFullscreen):
        (WebKit::WebVideoFullscreenModelContext::setVideoLayerFrame):
        (WebKit::WebVideoFullscreenModelContext::videoLayerFrame):
        (WebKit::WebVideoFullscreenModelContext::setVideoLayerGravity):
        (WebKit::WebVideoFullscreenModelContext::videoLayerGravity):
        (WebKit::WebVideoFullscreenModelContext::selectAudioMediaOption):
        (WebKit::WebVideoFullscreenModelContext::selectLegibleMediaOption):
        (WebKit::WebVideoFullscreenModelContext::fullscreenModeChanged):
        (WebKit::WebVideoFullscreenModelContext::didSetupFullscreen):
        (WebKit::WebVideoFullscreenModelContext::didEnterFullscreen):
        (WebKit::WebVideoFullscreenModelContext::didExitFullscreen):
        (WebKit::WebVideoFullscreenModelContext::didCleanupFullscreen):
        (WebKit::WebVideoFullscreenModelContext::fullscreenMayReturnToInline):
        * WebProcess/ios/WebVideoFullscreenManager.h:
        (WebKit::WebVideoFullscreenInterfaceContext::create):
        (WebKit::WebVideoFullscreenInterfaceContext::invalidate):
        (WebKit::WebVideoFullscreenInterfaceContext::layerHostingContext):
        (WebKit::WebVideoFullscreenInterfaceContext::isAnimating):
        (WebKit::WebVideoFullscreenInterfaceContext::setIsAnimating):
        (WebKit::WebVideoFullscreenInterfaceContext::targetIsFullscreen):
        (WebKit::WebVideoFullscreenInterfaceContext::setTargetIsFullscreen):
        (WebKit::WebVideoFullscreenInterfaceContext::fullscreenMode):
        (WebKit::WebVideoFullscreenInterfaceContext::setFullscreenMode):
        (WebKit::WebVideoFullscreenInterfaceContext::isFullscreen):
        (WebKit::WebVideoFullscreenInterfaceContext::setIsFullscreen):
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenInterfaceContext::WebVideoFullscreenInterfaceContext):
        (WebKit::WebVideoFullscreenInterfaceContext::~WebVideoFullscreenInterfaceContext):
        (WebKit::WebVideoFullscreenInterfaceContext::setLayerHostingContext):
        (WebKit::WebVideoFullscreenInterfaceContext::resetMediaState):
        (WebKit::WebVideoFullscreenInterfaceContext::setDuration):
        (WebKit::WebVideoFullscreenInterfaceContext::setCurrentTime):
        (WebKit::WebVideoFullscreenInterfaceContext::setBufferedTime):
        (WebKit::WebVideoFullscreenInterfaceContext::setRate):
        (WebKit::WebVideoFullscreenInterfaceContext::setVideoDimensions):
        (WebKit::WebVideoFullscreenInterfaceContext::setSeekableRanges):
        (WebKit::WebVideoFullscreenInterfaceContext::setCanPlayFastReverse):
        (WebKit::WebVideoFullscreenInterfaceContext::setAudioMediaSelectionOptions):
        (WebKit::WebVideoFullscreenInterfaceContext::setLegibleMediaSelectionOptions):
        (WebKit::WebVideoFullscreenInterfaceContext::setExternalPlayback):

        Cross-process methods which now take a contextId parameter:

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID):
        (WebKit::WebVideoFullscreenManagerProxy::resetMediaState):
        (WebKit::WebVideoFullscreenManagerProxy::setCurrentTime):
        (WebKit::WebVideoFullscreenManagerProxy::setBufferedTime):
        (WebKit::WebVideoFullscreenManagerProxy::setVideoDimensions):
        (WebKit::WebVideoFullscreenManagerProxy::setSeekableRangesVector):
        (WebKit::WebVideoFullscreenManagerProxy::setCanPlayFastReverse):
        (WebKit::WebVideoFullscreenManagerProxy::setAudioMediaSelectionOptions):
        (WebKit::WebVideoFullscreenManagerProxy::setLegibleMediaSelectionOptions):
        (WebKit::WebVideoFullscreenManagerProxy::setExternalPlaybackProperties):
        (WebKit::WebVideoFullscreenManagerProxy::setDuration):
        (WebKit::WebVideoFullscreenManagerProxy::setRate):
        (WebKit::WebVideoFullscreenManagerProxy::exitFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::cleanupFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::preparedToReturnToInline):
        (WebKit::WebVideoFullscreenManagerProxy::play):
        (WebKit::WebVideoFullscreenManagerProxy::pause):
        (WebKit::WebVideoFullscreenManagerProxy::togglePlayState):
        (WebKit::WebVideoFullscreenManagerProxy::beginScrubbing):
        (WebKit::WebVideoFullscreenManagerProxy::endScrubbing):
        (WebKit::WebVideoFullscreenManagerProxy::seekToTime):
        (WebKit::WebVideoFullscreenManagerProxy::fastSeek):
        (WebKit::WebVideoFullscreenManagerProxy::beginScanningForward):
        (WebKit::WebVideoFullscreenManagerProxy::beginScanningBackward):
        (WebKit::WebVideoFullscreenManagerProxy::endScanning):
        (WebKit::WebVideoFullscreenManagerProxy::requestExitFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::didSetupFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::didEnterFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::didCleanupFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame):
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerGravity):
        (WebKit::WebVideoFullscreenManagerProxy::selectAudioMediaOption):
        (WebKit::WebVideoFullscreenManagerProxy::selectLegibleMediaOption):
        (WebKit::WebVideoFullscreenManagerProxy::fullscreenModeChanged):
        (WebKit::WebVideoFullscreenManagerProxy::fullscreenMayReturnToInline):
        (WebKit::WebVideoFullscreenManagerProxy::videoLayerFrame): Deleted.
        (WebKit::WebVideoFullscreenManagerProxy::videoLayerGravity): Deleted.
        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement):
        (WebKit::WebVideoFullscreenManager::exitVideoFullscreenForVideoElement):
        (WebKit::WebVideoFullscreenManager::resetMediaState):
        (WebKit::WebVideoFullscreenManager::setDuration):
        (WebKit::WebVideoFullscreenManager::setCurrentTime):
        (WebKit::WebVideoFullscreenManager::setBufferedTime):
        (WebKit::WebVideoFullscreenManager::setRate):
        (WebKit::WebVideoFullscreenManager::setVideoDimensions):
        (WebKit::WebVideoFullscreenManager::setSeekableRanges):
        (WebKit::WebVideoFullscreenManager::setCanPlayFastReverse):
        (WebKit::WebVideoFullscreenManager::setAudioMediaSelectionOptions):
        (WebKit::WebVideoFullscreenManager::setLegibleMediaSelectionOptions):
        (WebKit::WebVideoFullscreenManager::setExternalPlayback):
        (WebKit::WebVideoFullscreenManager::play):
        (WebKit::WebVideoFullscreenManager::pause):
        (WebKit::WebVideoFullscreenManager::togglePlayState):
        (WebKit::WebVideoFullscreenManager::beginScrubbing):
        (WebKit::WebVideoFullscreenManager::endScrubbing):
        (WebKit::WebVideoFullscreenManager::seekToTime):
        (WebKit::WebVideoFullscreenManager::fastSeek):
        (WebKit::WebVideoFullscreenManager::beginScanningForward):
        (WebKit::WebVideoFullscreenManager::beginScanningBackward):
        (WebKit::WebVideoFullscreenManager::endScanning):
        (WebKit::WebVideoFullscreenManager::requestExitFullscreen):
        (WebKit::WebVideoFullscreenManager::selectAudioMediaOption):
        (WebKit::WebVideoFullscreenManager::selectLegibleMediaOption):
        (WebKit::WebVideoFullscreenManager::fullscreenModeChanged):
        (WebKit::WebVideoFullscreenManager::didSetupFullscreen):
        (WebKit::WebVideoFullscreenManager::didEnterFullscreen):
        (WebKit::WebVideoFullscreenManager::didExitFullscreen):
        (WebKit::WebVideoFullscreenManager::didCleanupFullscreen):
        (WebKit::WebVideoFullscreenManager::setVideoLayerGravityEnum):
        (WebKit::WebVideoFullscreenManager::fullscreenMayReturnToInline):
        (WebKit::WebVideoFullscreenManager::setVideoLayerFrameFenced):
        (WebKit::WebVideoFullscreenManager::exitVideoFullscreen): Deleted.

2015-04-16  Beth Dakin  <bdakin@apple.com>

        Force mouse events should go through normal mouse event handling code paths
        https://bugs.webkit.org/show_bug.cgi?id=143749
        -and corresponding-
        rdar://problem/20472895

        Reviewed by Dean Jackson.

        This patch makes pressureChangeWithEvent create NativeWebMouseEvents with the 
        NSEventTypePressures that is gets and sends those down to the web process.

        Re-name pressureEvent to lastPressureEvent. Now that event can sometimes be an 
        NSEventTypePressure, the new name makes it clear how the second parameter differs 
        from the first.
        * Shared/NativeWebMouseEvent.h:

        New event types for the new types of events.
        * Shared/WebEvent.h:
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        * Shared/mac/NativeWebMouseEventMac.mm:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/mac/WebEventFactory.h:

        All of the square-peg, round-hole problems of massaging the NSEventTypePressures 
        events into WebMouseEvents is taken care of here.
        * Shared/mac/WebEventFactory.mm:
        (WebKit::mouseButtonForEvent):
        (WebKit::globalPointForEvent):
        (WebKit::pointForEvent):
        (WebKit::WebEventFactory::createWebMouseEvent):

        Instead of calling the old inputDeviceForceDidChange, create a NativeWebMouseEvent 
        and handle it.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView pressureChangeWithEvent:]):

        Handle the new types.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent):

        Can delete inputDeviceForceDidChange since it’s no longer used.
        (WebKit::WebPageProxy::inputDeviceForceDidChange): Deleted.
        * UIProcess/WebPageProxy.h:

        Handle the new types of mouse events properly.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleMouseEvent):

        Delete inputDeviceForceDidChange() and m_lastForceStage.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::inputDeviceForceDidChange): Deleted.

        Handle new WebEvent types.
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:

2015-04-16  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/20575744> Also include a definition of __NSd_{current deployment target} in WKFoundation.h.

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj:

2015-04-16  Timothy Horton  <timothy_horton@apple.com>

        Provide a mechanism through the legacy SPI to know when swipe gestures begin and end
        https://bugs.webkit.org/show_bug.cgi?id=143740
        <rdar://problem/20468540>

        Reviewed by Dan Bernstein.

        In the C SPI, add three WKPageLoaderClient callbacks for the three
        navigation gesture events (did begin, will end, did end).

        * UIProcess/API/C/WKPageLoaderClient.h:
        Add the callbacks.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::navigationGestureDidBegin):
        (API::LoaderClient::navigationGestureWillEnd):
        (API::LoaderClient::navigationGestureDidEnd):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::navigationGestureDidBegin):
        (WebKit::WebPageProxy::navigationGestureWillEnd):
        (WebKit::WebPageProxy::navigationGestureDidEnd):
        Dispatch navigation gesture events to the loader client as well as
        (after a bounce through the PageClient) the navigation delegate.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        Call the callbacks.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::trackSwipeGesture):
        (WebKit::ViewGestureController::willEndSwipeGesture):
        While we were already informing WebPageProxy of 'did begin' and 'did end'
        navigation gesture events, we were missing 'will end'. Add it.

2015-04-16  Tim Horton  <timothy_horton@apple.com>

        Dispatching multiple asynchronous animated resizes in parallel causes page scale to detach from reality
        https://bugs.webkit.org/show_bug.cgi?id=143812
        <rdar://problem/19866038>

        Reviewed by Simon Fraser.

        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        No cats in transaction (more of these below, too).

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::dynamicViewportUpdateChangedTarget):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::commitPotentialTap):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        Add an incrementing ID to dynamicViewportSizeUpdates. The UI process keeps
        the current ID, and it is bounced through the Web process (dynamicViewportSizeUpdates)
        back to the UI process (dynamicViewportUpdateChangedTarget). If we have
        dispatched another dynamicViewportSizeUpdate in the interim, ignore
        the intermediate target.

2015-04-16  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove PluginController::isPluginVisible().
        https://bugs.webkit.org/show_bug.cgi?id=143830

        Reviewed by Darin Adler.

        PluginController::isPluginVisible() was introduced by http://webkit.org/b/60285.
        This method had been used only for WebKit2 on Windows, and no one uses it now.
        So we can remove it.

        No new tests, no behavior change.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::isPluginVisible): Deleted.
        * PluginProcess/PluginControllerProxy.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::isPluginVisible): Deleted.
        * WebProcess/Plugins/PluginView.h:

2015-04-16  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Disable a flaky ewk_context_network_process_model() API test
        https://bugs.webkit.org/show_bug.cgi?id=143824

        Reviewed by Csaba Osztrogonác.

        ewk_context_network_process_model has been often failed. Though Bug 142967
        was filed to fix this issue, it is not solved yet. To maintain EFL bot, this patch
        disables it until fixing it.

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

2015-04-16  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] Forwarding headers generator shouldn't generate unnecessary headers
        https://bugs.webkit.org/show_bug.cgi?id=143820

        Reviewed by Carlos Garcia Campos.

        * Scripts/generate-forwarding-headers.pl:
        (collectNeededHeaders):

2015-04-16  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Run forwarding headers generator unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=143819

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake:

2015-04-15  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Disable "Save to Downloads" option for local files
        https://bugs.webkit.org/show_bug.cgi?id=143794

        Reviewed by Tim Horton.

        Disable the Image and Media download options if the download
        target is a local file. We can only download web resources;
        anything else is actually a no-op.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForVideo]):
        (-[WKActionMenuController _defaultMenuItemsForImage]):

2015-04-15  Anders Carlsson  <andersca@apple.com>

        Make websiteDataStore on WKWebViewConfiguration public
        https://bugs.webkit.org/show_bug.cgi?id=143810

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration websiteDataStore]):
        (-[WKWebViewConfiguration setWebsiteDataStore:]):
        (-[WKWebViewConfiguration _websiteDataStore]):
        (-[WKWebViewConfiguration _setWebsiteDataStore:]):

2015-04-15  Anders Carlsson  <andersca@apple.com>

        Make WKWebsiteDataStore public
        https://bugs.webkit.org/show_bug.cgi?id=143805

        Reviewed by Dan Bernstein.

        Rename the current _WKWebsiteDataStore to WKWebsiteDataStore. Make init unavailable and tighten up the
        types of the defaultDataStore and nonPersistentDataStore class methods.
        
        Add a new _WKWebsiteDataStore @interface and @implementation that derives from WKWebsiteDataStore
        and forwards the defaultDataStore and nonPersistentDataStore method calls.

        * Shared/API/Cocoa/WebKit.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _websiteDataStore]):
        * UIProcess/API/Cocoa/WKWebsiteDataStore.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.h.
        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm.
        (+[WKWebsiteDataStore defaultDataStore]):
        (+[WKWebsiteDataStore nonPersistentDataStore]):
        (-[WKWebsiteDataStore dealloc]):
        (-[WKWebsiteDataStore isNonPersistent]):
        (toSystemClockTime):
        (-[WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        (-[WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        (toWebsiteDataRecords):
        (-[WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):
        (-[WKWebsiteDataStore _apiObject]):
        * UIProcess/API/Cocoa/WKWebsiteDataStoreInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStoreInternal.h.
        (WebKit::wrapper):
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (+[_WKWebsiteDataStore defaultDataStore]):
        (+[_WKWebsiteDataStore nonPersistentDataStore]):
        (-[_WKWebsiteDataStore dealloc]): Deleted.
        (-[_WKWebsiteDataStore isNonPersistent]): Deleted.
        (toWebsiteDataTypes): Deleted.
        (toSystemClockTime): Deleted.
        (-[_WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]): Deleted.
        (-[_WKWebsiteDataStore _apiObject]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2015-04-15  Timothy Horton  <timothy_horton@apple.com>

        Custom CSS cursors do not use -webkit-image-set on retina displays
        https://bugs.webkit.org/show_bug.cgi?id=120783

        Reviewed by Beth Dakin.
        Patch by Evan Wallace <evan.exe@gmail.com>.

        Serialize the cursor image scale for SetCursor messages so custom
        CSS cursors work with -webkit-image-set on retina displays.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::ArgumentCoder<Cursor>::encode):
        (CoreIPC::ArgumentCoder<Cursor>::decode):

2015-04-15  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=143785

        Reviewed by Csaba Osztrogonác.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:

2015-04-15  Anders Carlsson  <andersca@apple.com>

        Make WKWebsiteDataRecord public
        https://bugs.webkit.org/show_bug.cgi?id=143796

        Reviewed by Dan Bernstein.

        Rename _WKWebsiteDataRecord and associated files to WKWebsiteDataRecord and
        add a new _WKWebsiteDataRecord.h with a class @interface declaration that just
        inherits from WKWebsiteDataRecord. We don't need an @implementation since nobody is expected
        to allocate _WKWebsiteDataRecord objects.

        * Shared/API/Cocoa/WebKit.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataRecord.h.
        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm: Renamed from Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataRecord.mm.
        (-[WKWebsiteDataRecord dealloc]):
        (dataTypesToString):
        (-[WKWebsiteDataRecord description]):
        (-[WKWebsiteDataRecord displayName]):
        (-[WKWebsiteDataRecord dataTypes]):
        (-[WKWebsiteDataRecord _apiObject]):
        * UIProcess/API/Cocoa/WKWebsiteDataRecordInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataRecordInternal.h.
        (WebKit::wrapper):
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (toWebsiteDataRecords):
        * WebKit2.xcodeproj/project.pbxproj:

2015-04-13  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] ChromeClient::exitVideoFullscreen() should take a pointer to a HTMLVideoElement.
        https://bugs.webkit.org/show_bug.cgi?id=143674

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::enterVideoFullscreenForVideoElement): Takes a reference.
        (WebKit::WebChromeClient::exitVideoFullscreenForVideoElement): Renamed from exitVideoFullscreen().
        (WebKit::WebChromeClient::exitVideoFullscreen): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/ios/WebVideoFullscreenManager.h:
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement): Ditto.
        (WebKit::WebVideoFullscreenManager::exitVideoFullscreenForVideoElement): Renamed from exitVideoFullscreen().
        (WebKit::WebVideoFullscreenManager::didEnterFullscreen): Pass a reference.
        (WebKit::WebVideoFullscreenManager::didCleanupFullscreen): Ditto.
        (WebKit::WebVideoFullscreenManager::exitVideoFullscreen): Deleted.

2015-04-15  Antti Koivisto  <antti@apple.com>

        Network Cache: Inline small body data to record file
        https://bugs.webkit.org/show_bug.cgi?id=143783

        Reviewed by Chris Dumez.

        We currently save all body data as separate files. We can improve space efficiency and do less reads and writes
        by inlining smaller resource bodies with the header.

        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::readSync):
        (WebKit::NetworkCache::IOChannel::write):

            Add WorkQueue argument to allow specifying which queue the result is submitted to.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::decodeRecordMetaData):

            Add a boolean indicating whether the body is inlined.

        (WebKit::NetworkCache::decodeRecordHeader):
        (WebKit::NetworkCache::Storage::decodeRecord):
        (WebKit::NetworkCache::encodeRecordMetaData):
        (WebKit::NetworkCache::Storage::storeBodyAsBlob):
        (WebKit::NetworkCache::Storage::encodeRecord):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):

            Read the record first, then read the blob if needed.
            Submit the read operation directly from the main queue. Only thing we do is opening an IO channel
            and that uses O_NONBLOCK.
            Process the read results in the IO work queue where we now do the blob retrieval.

        (WebKit::NetworkCache::shouldStoreBodyAsBlob):

            The current threshold for saving a separate blob is 16KB.

        (WebKit::NetworkCache::Storage::dispatchWriteOperation):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::createRecord): Deleted.
        (WebKit::NetworkCache::encodeRecordHeader): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-04-15  Tim Horton  <timothy_horton@apple.com>

        Non-local keyboards don't update scroll view parameters
        https://bugs.webkit.org/show_bug.cgi?id=143791
        <rdar://problem/18974020>

        * Platform/spi/ios/UIKitSPI.h:
        Fix the build.

2015-04-15  Tim Horton  <timothy_horton@apple.com>

        Non-local keyboards don't update scroll view parameters
        https://bugs.webkit.org/show_bug.cgi?id=143791
        <rdar://problem/18974020>

        Reviewed by Enrica Casucci.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _shouldUpdateKeyboardWithInfo:]):
        (-[WKWebView _keyboardWillChangeFrame:]):
        (-[WKWebView _keyboardWillShow:]):
        Make sure that we update scroll view parameters (obscured insets, etc.)
        if we have a non-local keyboard, in addition to the cases where we have an assisted node.

2015-04-15  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/20549298> No matching __NSi_ definition for postprocessed value of WK_{MAC,IOS}_TBA
        https://bugs.webkit.org/show_bug.cgi?id=143786

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKFoundation.h: Added a placeholder for the postprocessing script to
        insert a definition of __NSi_* for the current deployment target. Import CoreFoundation.h so
        that we can check if the macro is already defined.
        * WebKit2.xcodeproj/project.pbxproj: In the Postprocess WKFoundation.h script build phase,
        replace the placeholder with a definition of __NSi_{current deployment target} if not
        already defined.

2015-04-14  Anders Carlsson  <andersca@apple.com>

        Make creating send rights from shared memory more robust
        https://bugs.webkit.org/show_bug.cgi?id=143730
        rdar://problem/16595870

        Reviewed by Darin Adler.

        This cleans up creation of handles and send rights and also fixes a bug where it would be impossible
        to send more than 128 MB of shared memory in a single object.

        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::makeMemoryEntry):
        New helper function that creates a memory entry send right. This uses MAP_MEM_VM_SHARE which ensures
        that memory objects larger than 128 MB will be handled correctly.

        (WebKit::SharedMemory::create):
        Call makeMemoryEntry.

        (WebKit::SharedMemory::createHandle):
        Call createSendRight.

        (WebKit::SharedMemory::createSendRight):
        Call makeMemoryEntry and add the necessary assertions.

2015-04-15  Eric Carlson  <eric.carlson@apple.com>

        Generalize "isPlayingAudio" to include other media characteristics
        https://bugs.webkit.org/show_bug.cgi?id=143713

        Reviewed by Jer Noble.

        * UIProcess/API/C/WKPage.cpp:
        (toGenericCallbackFunction): Scope CallbackBase.
        (WKPageForceRepaint): Ditto.
        (WKPageValidateCommand): Ditto.
        (WKPageComputePagesForPrinting): Ditto.

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView _requestSnapshotIfNeeded]): Ditto.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView becomeFirstResponder]): Ditto.
        (-[WKView updateFontPanelIfNeeded]): Ditto.
        (-[WKView validateUserInterfaceItem:]): Ditto.
        (-[WKView startSpeaking:]): Ditto.
        (-[WKView selectedRangeWithCompletionHandler:]): Ditto.
        (-[WKView markedRangeWithCompletionHandler:]): Ditto.
        (-[WKView hasMarkedTextWithCompletionHandler:]): Ditto.
        (-[WKView attributedSubstringForProposedRange:completionHandler:]): Ditto.
        (-[WKView firstRectForCharacterRange:completionHandler:]): Ditto.
        (-[WKView characterIndexForPoint:completionHandler:]): Ditto.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::isPlayingMediaDidChange): Rename from isPlayingAudioDidChange.
        (WebKit::WebPageProxy::isPlayingAudioDidChange): Deleted.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController dealloc]): Scope CallbackBase.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Ditto.

        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]): Ditto.
        (-[WKPrintingView _askPageToComputePageRects]): Ditto.
        (-[WKPrintingView _drawPreview:]): Ditto.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setPluginIsPlayingAudio):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::isPlayingMediaDidChange):
        (WebKit::WebChromeClient::isPlayingAudioDidChange): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2015-04-15  Antti Koivisto  <antti@apple.com>

        Network Cache: Add thread-safe accessors for storage paths
        https://bugs.webkit.org/show_bug.cgi?id=143668

        Reviewed by Darin Adler.

        Less need to use StringCapture.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::dumpFilePath):
        (WebKit::NetworkCache::Cache::storagePath):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::makeRecordsDirectoryPath):
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::basePath):
        (WebKit::NetworkCache::Storage::versionPath):
        (WebKit::NetworkCache::Storage::recordsPath):
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::remove):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::Storage::finishReadOperation):
        (WebKit::NetworkCache::Storage::dispatchWriteOperation):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::clear):
        (WebKit::NetworkCache::Storage::shrink):
        (WebKit::NetworkCache::Storage::deleteOldVersions):
        (WebKit::NetworkCache::makeRecordDirectoryPath): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::baseDirectoryPath): Deleted.
        (WebKit::NetworkCache::Storage::directoryPath): Deleted.

2015-04-14  Tim Horton  <timothy_horton@apple.com>

        Update gesture swipe shadow style
        https://bugs.webkit.org/show_bug.cgi?id=143616
        <rdar://problem/19295843>

        Reviewed by Darin Adler.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        For the modern shadow style, use a layer stretched along the edge of the swiping content
        with the newly added PNGs as the layer contents.

        Add a dimming layer over the lower layer of content which fades in/out
        during the swipe.

        (WebKit::ViewGestureController::handleSwipeGesture):
        Fade the dimming layer in and out during the entire swipe.
        Fade the shadow layer out during the last few pixels of the swipe.

        (WebKit::ViewGestureController::removeSwipeSnapshot):
        Unparent the new layers.

        * WebKit2.xcodeproj/project.pbxproj:
        * Resources/SwipeShadow.png:
        * Resources/SwipeShadow@2x.png:
        Add the new resources.

2015-04-14  Brian Weinstein  <bweinstein@apple.com>

        Add SPI to clear HSTS hosts added since a date.
        https://bugs.webkit.org/show_bug.cgi?id=143726
        and
        rdar://problem/16664597

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextResetHSTSHostsAddedAfterDate): Call into the WebProcessPool.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::resetHSTSHostsAddedAfterDate): Call CFNetwork SPI to clear HSTS hosts added
        after the given date.
        * UIProcess/WebProcessPool.h:

2015-04-14  Anders Carlsson  <andersca@apple.com>

        More work on making the SharedMemory interface more sane
        https://bugs.webkit.org/show_bug.cgi?id=143718

        Reviewed by Andreas Kling.

        Get rid of m_shouldVMDeallocateData. The idea is that shared memory created by calling
        SharedMemory::allocate has a non-null m_data pointer, and a null m_port. Shared memory created
        by calling SharedMemory::create with a pointer and a length has a non-null port but a null m_data
        since the data can be unmapped by the caller and we don't want to hold on to dangling pointers.

        * Platform/SharedMemory.h:
        (WebKit::SharedMemory::data):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::allocate):
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::map):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):

2015-04-14  Antti Koivisto  <antti@apple.com>

        Network Cache: Deduplicate body data
        https://bugs.webkit.org/show_bug.cgi?id=143652

        Reviewed by Darin Adler.

        It is common to have cache entries with identical body data. This happens when the same resource is loaded from
        a different URL (https vs http, slash vs no-slash at end, etc.). It also happens when the same URL is
        referenced from different cache partitions.

        We can improve disk space efficiency and use less memory by sharing identical body data between cache entries.

        This patch splits the body data out from the record file. The new record file contains meta data and response
        headers only. Body data is stored using the new BlobStorage interface. Files are deduplicated by computing
        SHA1 hash over the data and looking for an existing blob with the same hash. If found the existing entry
        is reused by creating a hard link to it.

        The new disk structure looks like this:

        WebKitCache/
            Version 3/
                Blobs/
                    0A3C9A970ADA27FAE9BD7BC630BAD0B929C293C0
                    0A6B8060BA77DF92C82A2FD7AF58F79524D8F34C
                    ...
                Records/
                    apple.com/
                        0B8645B04E7EC78C178B7460052601C2
                        0B8645B04E7EC78C178B7460052601C2-body
                        0CB1A3638D1C5A09C5E3283A74FA040B
                        0CB1A3638D1C5A09C5E3283A74FA040B-body
                        ...

        Each record file has an associated -body which is a hard link to a file in the Blobs directory.

        The patch increases effective capacity by 10-20% with a typical cache. It also saves memory especially when identical
        resources are used in multiple tabs.

        Currently all >0 sized resources are stored as shared blobs. In future small resources should be integrated into record
        files and blobs used for larger files only.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::update):

            Adopt the new storage interface.

        (WebKit::NetworkCache::Cache::dumpContentsToFile):
        * NetworkProcess/cache/NetworkCacheBlobStorage.cpp: Added.
        (WebKit::NetworkCache::BlobStorage::BlobStorage):
        (WebKit::NetworkCache::BlobStorage::synchronize):

            Compute size and delete unused files from the Blobs directory (link count == 1).

        (WebKit::NetworkCache::BlobStorage::blobPath):
        (WebKit::NetworkCache::BlobStorage::add):
        (WebKit::NetworkCache::BlobStorage::get):

            Interface for storing and retrieving data blobs. Blobs are deduplicated on add.

        (WebKit::NetworkCache::BlobStorage::remove):

            Removes the link but doesn't remove the blob even if there are no other clients. That happens on next synchronize().

        (WebKit::NetworkCache::BlobStorage::shareCount):

            Checks the link count to get the number of clients.

        * NetworkProcess/cache/NetworkCacheBlobStorage.h: Added.
        (WebKit::NetworkCache::BlobStorage::approximateSize):
        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCache::Coder<SHA1::Digest>::encode):
        (WebKit::NetworkCache::Coder<SHA1::Digest>::decode):
        * NetworkProcess/cache/NetworkCacheCoders.h:
        * NetworkProcess/cache/NetworkCacheData.h:
        (WebKit::NetworkCache::Data::isEmpty):
        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::empty):
        (WebKit::NetworkCache::Data::fromMap):
        (WebKit::NetworkCache::mapFile):
        (WebKit::NetworkCache::computeSHA1):
        (WebKit::NetworkCache::bytesEqual):

            Add some helpers.

        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::asJSON):
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::IOChannel):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::makeRecordDirectoryPath):
        (WebKit::NetworkCache::makeBlobDirectoryPath):
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::approximateSize):
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::partitionPathForKey):
        (WebKit::NetworkCache::recordPathForKey):
        (WebKit::NetworkCache::bodyPath):
        (WebKit::NetworkCache::decodeRecordMetaData):
        (WebKit::NetworkCache::decodeRecordHeader):
        (WebKit::NetworkCache::createRecord):
        (WebKit::NetworkCache::encodeRecordMetaData):
        (WebKit::NetworkCache::encodeRecordHeader):
        (WebKit::NetworkCache::Storage::remove):
        (WebKit::NetworkCache::Storage::updateFileModificationTime):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):

            Read both the blob and the record entry.

        (WebKit::NetworkCache::Storage::finishReadOperation):

            Factor to a function.

        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::dispatchPendingWriteOperations):
        (WebKit::NetworkCache::Storage::dispatchWriteOperation):

            We don't need separate full write and header write paths anymore. Everything is treated
            as a full write and deduplication stops us writing the body again.

            This simplifies the code and data structures.

        (WebKit::NetworkCache::Storage::finishWriteOperation):

            Factor to a function.

        (WebKit::NetworkCache::Storage::clear):
        (WebKit::NetworkCache::deletionProbability):

            Take the sharing count into account when computing deletion probability.
            It is less useful to delete a record that shares its body with others as data won't get deleted.

        (WebKit::NetworkCache::Storage::shrinkIfNeeded):
        (WebKit::NetworkCache::Storage::shrink):
        (WebKit::NetworkCache::Storage::deleteOldVersions):
        (WebKit::NetworkCache::directoryPathForKey): Deleted.
        (WebKit::NetworkCache::filePathForKey): Deleted.
        (WebKit::NetworkCache::openFileForKey): Deleted.
        (WebKit::NetworkCache::decodeRecord): Deleted.
        (WebKit::NetworkCache::Storage::update): Deleted.

            No need for separate update interface anymore. Regular store() avoids unnecessary body write.

        (WebKit::NetworkCache::Storage::dispatchFullWriteOperation): Deleted.
        (WebKit::NetworkCache::Storage::dispatchHeaderWriteOperation): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-04-14  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r182603): [GTK] More than 500 crashes on the layout tests with the debug build.
        https://bugs.webkit.org/show_bug.cgi?id=143715

        Reviewed by Darin Adler.

        Enable assertions checking that calling editorState() does not cause a
        synchronous layout only on Mac and iOS. This assertion does not
        necessarily hold true on other ports as each one as its own
        platformEditorState() implementation. In particular, this assertion
        was being hit on GTK.

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

2015-04-13  Alexey Proskuryakov  <ap@apple.com>

        Build fixes after r182772.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateAutomaticallyComputedFixedLayoutSize]): Make a CGSize, not an NSSize.
        (-[WKView _setAutomaticallyComputesFixedLayoutSizeFromViewScale:]): Moved implementation
        to the correct place.
        (-[WKView _automaticallyComputesFixedLayoutSizeFromViewScale]): Ditto.
        (-[WKView _layoutMode]): Use a memeber from _data directly, not via a method.

2015-04-13  Alexey Proskuryakov  <ap@apple.com>

        More build fix.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage):

2015-04-13  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL][GTK] Fix build break after r182753 
        https://bugs.webkit.org/show_bug.cgi?id=143689

        Reviewed by Anders Carlsson.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::processMessage):
        (IPC::Connection::sendOutgoingMessage):
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::allocate):
        (WebKit::accessModeMMap):
        (WebKit::SharedMemory::map):
        (WebKit::SharedMemory::create): Deleted.

2015-04-13  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * UIProcess/mac/PageClientImpl.mm: (WebKit::PageClientImpl::setDragImage):

2015-04-13  Anders Carlsson  <andersca@apple.com>

        Keep track of each shared memory object's protection when deciding whether to return our existing port
        https://bugs.webkit.org/show_bug.cgi?id=143687

        Reviewed by Tim Horton.

        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::machProtection):
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::map):
        (WebKit::SharedMemory::createHandle):

2015-04-13  Tim Horton  <timothy_horton@apple.com>

        Add a persistent, fixed scale factor to make it easy to scale down WK(Web)Views
        https://bugs.webkit.org/show_bug.cgi?id=143560
        <rdar://problem/16302047>

        Reviewed by Darin Adler.

        Add a new "view" scale factor to WKView and WKWebView.

        Unlike page scale (or "magnification" in the API), view scale:
            - persists between page loads
            - persists between Web process crashes
            - is not user adjustable
            - can reliably be < 1

        The page scale and view scale are multiplied together whenever we push
        a new page scale down into WebCore, so the implementation of view scale
        is transparent to WebCore, and acts effectively as a constant multiplier
        for the (user-adjustable) page scale factor.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scaleView):
        Add scaleView, which updates our cached viewScaleFactor and pushes it to the Web process.

        (WebKit::WebPageProxy::creationParameters):
        Plumb viewScaleFactor through the page creation parameters.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::viewScaleFactor): Added.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        If the viewScaleFactor is not 1 at creation time, call scalePage with a page scale of 1.
        Internally, scalePage will multiply in the viewScaleFactor and push it all to the Web process.

        (WebKit::WebPage::scalePage):
        Multiply the page scale factor by the view scale factor before passing it to WebCore.

        (WebKit::WebPage::scalePageInViewCoordinates):
        Early returns need to check the total scale, not just the new page scale.

        (WebKit::WebPage::totalScaleFactor):
        The scale that we get back from WebCore::Page::pageScaleFactor is the product
        of WebKit2's view and page scales. So, here we'll call that the totalScaleFactor.
        (Might need a different name because it seems like "total" should include deviceScale too).

        (WebKit::WebPage::pageScaleFactor):
        WebKit2's notion of the pageScaleFactor does not include the view scale, so
        divide it out of WebCore's page scale.

        (WebKit::WebPage::scaleView):
        Apply a new view scale, maintaining the current scroll position.

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

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Plumb viewScaleFactor through the page creation parameters.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _viewScale]):
        (-[WKWebView _setViewScale:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _viewScale]):
        (-[WKView _setViewScale:]):
        Push the new view scale to WebPage.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setAutomaticallyComputesFixedLayoutSizeFromViewScale:]):
        (-[WKWebView _automaticallyComputesFixedLayoutSizeFromViewScale]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView setFrameSize:]):
        (-[WKView _updateAutomaticallyComputedFixedLayoutSize]):
        (-[WKView _setAutomaticallyComputesFixedLayoutSizeFromViewScale:]):
        (-[WKView _automaticallyComputesFixedLayoutSizeFromViewScale]):
        * UIProcess/API/mac/WKViewInternal.h:
        Add a new layout mode, "DynamicSizeComputedFromViewScale",
        which turns on fixed layout size mode, and sets the fixed layout size
        based on the view's frame and view scale. The fixed layout size is maintained
        as the frame of the view scaled by the inverse of the view scale. This
        makes it very easy to maintain a WK(Web)View that is scaled down by
        a constant amount, but is laid out as if it were not.
        
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::adjustTransientZoom):
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):
        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToPage):
        Because the transient zoom mechanism touches layers that WebCore owns,
        it mostly need to operate with totalScaleFactor, because that is what WebCore sees.

2015-04-10  Brent Fulgham  <bfulgham@apple.com>

        Expand test infrastructure to support scrolling tests
        https://bugs.webkit.org/show_bug.cgi?id=143286
        <rdar://problem/20375516>

        Reviewed by Simon Fraser.

        Extend the WK2 testing API to include a method for setting a JSC callback function to be triggered
        by the new WebCore::WheelEventTestTrigger singleton.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageStartMonitoringScrollOperations): WK2 method that causes the testing system to begin tracking wheel events.
        (WKBundlePageRegisterScrollOperationCompletionCallback): WK2 method to set the callback function for testing.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2015-04-13  Enrica Casucci  <enrica@apple.com>

        Clients of WKWebView should be able to override drag functions.
        https://bugs.webkit.org/show_bug.cgi?id=143618

        Reviewed by Darin Adler.

        WKWebView now implements the drag protocol functions and
        forwards the calls to the inner WKView.
        In the page client, when we receive a request to start drag
        from the WebProcess, we call _dragImageForView in WKView with
        the target view. The function calls dragImage on the given view,
        so that its clients can override the dragImage function.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView draggingEntered:]):
        (-[WKWebView draggingUpdated:]):
        (-[WKWebView draggingExited:]):
        (-[WKWebView prepareForDragOperation:]):
        (-[WKWebView performDragOperation:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dragImageForView:withImage:at:linkDrag:]):
        (-[WKView _setDragImage:at:linkDrag:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setDragImage):

2015-04-13  Alex Christensen  <achristensen@webkit.org>

        [iOS] Unreviewed build fix after r182760.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeSharedBuffer):
        (IPC::decodeSharedBuffer):
        Update SharedMemory function names.

2015-04-13  Anders Carlsson  <andersca@apple.com>

        Rename SharedMemory::create overloads
        https://bugs.webkit.org/show_bug.cgi?id=143679

        Reviewed by Beth Dakin.

        Rename the SharedMemory::create overload that allocates memory to SharedMemory::allocate,
        and the SharedMemory::create overload that maps in a handle to SharedMemory::map.

        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::allocate):
        (WebKit::SharedMemory::map):
        (WebKit::SharedMemory::create): Deleted.
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::createShareable):
        (WebKit::ShareableBitmap::create):
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::create):
        * Shared/ShareableResource.h:
        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::WebCompiledContentExtension::createFromCompiledContentExtensionData):
        * Shared/WebCompiledContentExtensionData.cpp:
        (WebKit::WebCompiledContentExtensionData::decode):
        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::Data):
        (WebKit::WebHitTestResult::Data::decode):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::resizeTable):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        (WebKit::WebPageProxy::setPromisedDataForImage):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::bufferForType):
        (WebKit::WebPlatformStrategies::setBufferForType):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::setVisitedLinkTable):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getDataSelectionForPasteboard):

2015-04-13  Brady Eidson  <beidson@apple.com>

        Share sheets from Share menus appear outside the browser window.
        <rdar://problem/20455592> and https://bugs.webkit.org/show_bug.cgi?id=143620

        Reviewed by Darin Adler.

        Refactor existing Sharing Service Picker code to also be used for the Share menu NSMenuItem.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        (WebKit::WebPageProxy::platformInitializeShareMenuItem):
        * UIProcess/WebPageProxy.h:

        * UIProcess/mac/WKSharingServicePickerDelegate.h: Added.
        * UIProcess/mac/WKSharingServicePickerDelegate.mm: Added.
        (+[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate]):
        (-[WKSharingServicePickerDelegate menuProxy]):
        (-[WKSharingServicePickerDelegate setMenuProxy:]):
        (-[WKSharingServicePickerDelegate setPicker:]):
        (-[WKSharingServicePickerDelegate setFiltersEditingServices:]):
        (-[WKSharingServicePickerDelegate setHandlesEditingReplacement:]):
        (-[WKSharingServicePickerDelegate sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
        (-[WKSharingServicePickerDelegate sharingServicePicker:delegateForSharingService:]):
        (-[WKSharingServicePickerDelegate sharingService:willShareItems:]):
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]):
        (-[WKSharingServicePickerDelegate sharingService:sourceWindowForShareItems:sharingContentScope:]):

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        (+[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate]): Deleted.
        (-[WKSharingServicePickerDelegate menuProxy]): Deleted.
        (-[WKSharingServicePickerDelegate setMenuProxy:]): Deleted.
        (-[WKSharingServicePickerDelegate setPicker:]): Deleted.
        (-[WKSharingServicePickerDelegate setIncludeEditorServices:]): Deleted.
        (-[WKSharingServicePickerDelegate sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]): Deleted.
        (-[WKSharingServicePickerDelegate sharingServicePicker:delegateForSharingService:]): Deleted.
        (-[WKSharingServicePickerDelegate sharingService:willShareItems:]): Deleted.
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]): Deleted.
        (-[WKSharingServicePickerDelegate sharingService:sourceWindowForShareItems:sharingContentScope:]): Deleted.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::platformInitializeShareMenuItem):

        * WebKit2.xcodeproj/project.pbxproj:

2015-04-13  Anders Carlsson  <andersca@apple.com>

        Begin cleaning up the shared memory interface
        https://bugs.webkit.org/show_bug.cgi?id=143677

        Reviewed by Andreas Kling.

        Rename createFromVMBuffer to create and add a protection parameter (which is currently unused).
        Also, turn SharedMemory::Protection into a proper enum class.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::store):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::initializeBufferFromStorageRecord):
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::tryGetShareableHandleFromCFData):
        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::create):
        (WebKit::machProtection):
        (WebKit::SharedMemory::createHandle):
        (WebKit::SharedMemory::createFromVMBuffer): Deleted.
        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ShareableBitmap.h:
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::create):
        (WebKit::ShareableResource::createHandle):
        * Shared/WebCompiledContentExtensionData.cpp:
        (WebKit::WebCompiledContentExtensionData::encode):
        (WebKit::WebCompiledContentExtensionData::decode):
        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::createExtension):
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
        (WebKit::WebPasteboardProxy::getPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::setPasteboardBufferForType):
        (WebKit::WebPasteboardProxy::readBufferFromPasteboard):
        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::sendTable):
        * UIProcess/mac/WKPrintingView.mm:
        (pageDidDrawToImage):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::dataSelectionForPasteboard):
        (WebKit::WebPageProxy::setPromisedDataForImage):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::bufferForType):
        (WebKit::WebPlatformStrategies::setBufferForType):
        (WebKit::WebPlatformStrategies::readBufferFromPasteboard):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::setVisitedLinkTable):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::takeSnapshot):
        (WebKit::WebPage::drawRectToImage):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getDataSelectionForPasteboard):

2015-04-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Cannot click "Next" button on Google two-factor auth setup page

        <https://bugs.webkit.org/show_bug.cgi?id=143624>
        <rdar://problem/19175714>

        This issue occurs when this site focuses the submit button. When it
        receives focus, we try to assist it. While we consider ourselves to be
        assisting it, we ignore further gesture inputs for that node, including
        the tap gesture.

        To fix this, only assist input types that we know are assistable,
        including text fields, select and date elements, etc.

        Reviewed by Darin Adler.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (isAssistableInputType):
        If the type is a known-assistable type, return true.
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
        Call isAssistableInputType() to determine whether we should do any kind
        of assistance for this node.

2015-04-13  Beth Dakin  <bdakin@apple.com>

        Add force property to MouseEvents
        https://bugs.webkit.org/show_bug.cgi?id=143569
        -and corresponding-
        rdar://problem/20472954

        Reviewed by Darin Adler.

        In order to accommodate adding force to all PlatformMouseEvents, we have to add it 
        to pass a caches pressure event to NativeWebMouseEvent and add force to 
        WebMouseEvent.

        NativeWebMouseEvent now requires a second NSEvent for the pressureEvent. 
        * Shared/NativeWebMouseEvent.h:

        WebMouseEvent takes a force parameter.
        * Shared/WebEvent.h:
        (WebKit::WebMouseEvent::force):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::WebMouseEvent):
        (WebKit::WebMouseEvent::encode):
        (WebKit::WebMouseEvent::decode):
        * Shared/mac/NativeWebMouseEventMac.mm:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/mac/WebEventFactory.h:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebMouseEvent):

        Cache the most recent pressureEvent in _data so that it can be sent along to the 
        NativeWebMouseEvent constructor.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView pressureChangeWithEvent:]):
        (-[WKView acceptsFirstMouse:]):
        (-[WKView shouldDelayWindowOrderingForEvent:]):
        (-[WKView _postFakeMouseMovedEventForFlagsChangedEvent:]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):

        WebMouseEvent takes a force parameter.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::showContextMenuAtPoint):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::createWebEvent):

        MouseEvent and PlatformMouseEvent both take force parameters too.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::navigateToURLWithSimulatedClick):
        (WebKit::WebPage::contextMenuAtPointInWindow):
        (WebKit::WebPage::dragEnded):
        (WebKit::WebPage::simulateMouseDown):
        (WebKit::WebPage::simulateMouseUp):
        (WebKit::WebPage::simulateMouseMotion):

        The functions that dispatch the force events no longer take a PlatformMouseEvent 
        as a parameter.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::inputDeviceForceDidChange):
        (WebKit::WebPage::immediateActionDidCancel):

2015-04-13  Andreas Kling  <akling@apple.com>

        Don't segregate heap objects based on Structure immortality.
        <https://webkit.org/b/143638>

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Netscape/JSNPObject.h:

2015-04-13  Timothy Horton  <timothy_horton@apple.com>

        javascript: links in inline PDFs shouldn't execute JavaScript in the context of the host website
        https://bugs.webkit.org/show_bug.cgi?id=143642
        <rdar://problem/18259355>

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::clickedLink):
        Don't follow javascript: URLs.

2015-04-10  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Don't unmap shared memory while using it.
        https://bugs.webkit.org/show_bug.cgi?id=143625

        Reviewed by Darin Adler.

        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::WebCompiledContentExtension::createFromCompiledContentExtensionData):
        * Shared/WebCompiledContentExtensionData.h:
        (WebKit::WebCompiledContentExtensionData::WebCompiledContentExtensionData):
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::createExtension):
        Keep the Data object alive as long as the SharedMemory that uses it.

2015-04-12  Darin Adler  <darin@apple.com>

        [Cocoa] Localizable strings are inconsistent and need to be regenerated
        https://bugs.webkit.org/show_bug.cgi?id=143661

        Reviewed by Dan Bernstein.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction): Also added a comment
        about the fact that we have two copies of all the localizable strings.

2015-04-12  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix trival typos related to the word "coordinate".
        https://bugs.webkit.org/show_bug.cgi?id=143644

        Reviewed by Alexey Proskuryakov.

        No new tests, no behavior change.

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        (WebKit::WebPage::lookupTextAtLocation):

2015-04-12  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove PluginModuleInfo.cpp from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=143643

        Reviewed by Darin Adler.

        Remove PluginModuleInfo.cpp from WebKit2 because it is totally empty.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * Shared/Plugins/PluginModuleInfo.cpp: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2015-04-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Enable Symbol in web pages
        https://bugs.webkit.org/show_bug.cgi?id=143375

        Reviewed by Ryosuke Niwa.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2015-04-08  Sam Weinig  <sam@webkit.org>

        Allow LaunchServices to handle URLs on link navigations
        <rdar://problem/19446826>
        https://bugs.webkit.org/show_bug.cgi?id=143544

        Reviewed by Anders Carlsson.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::tryAppLink):
        (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
        Only let LaunchServices have a crack at the URL if the navigation is:
            1) a main frame navigation
            2) a result of a user gesture

2015-04-10  Tim Horton  <timothy_horton@apple.com>

        Replace setFixedLayoutSizeEnabled: with an enum of layout modes
        https://bugs.webkit.org/show_bug.cgi?id=143576

        Reviewed by Simon Fraser.

        * UIProcess/API/C/WKLayoutMode.h: Added.
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _layoutMode]):
        (-[WKWebView _setLayoutMode:]):
        (-[WKWebView _isFixedLayoutEnabled]): Deleted.
        (-[WKWebView _setFixedLayoutEnabled:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKLayoutMode.h: Added.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _layoutMode]):
        (-[WKView _setLayoutMode:]):
        (-[WKView _isFixedLayoutEnabled]): Deleted.
        (-[WKView _setFixedLayoutEnabled:]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:
        Add enums for "layout mode". Currently we have two values: "ViewSize",
        which is the normal behavior, and "FixedSize", which is fixed layout mode.
        More values will come in the future.

2015-04-10  Anders Carlsson  <andersca@apple.com>

        _WKWebsiteDataStore doesn't track and remove offline application cache entries
        https://bugs.webkit.org/show_bug.cgi?id=143614
        rdar://problem/20243235

        Reviewed by Andreas Kling.

        * Shared/WebsiteData/WebsiteDataTypes.h:
        Add WebsiteDataTypeOfflineWebApplicationCache.

        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.mm:
        (dataTypesToString):
        * UIProcess/API/Cocoa/_WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        Add WKWebsiteDataTypeOfflineWebApplicationCache.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        Create a custom application cache storage and fetch the origins from it.

        (WebKit::WebsiteDataStore::removeData):
        Delete either all the cache entries (since we don't track time in the application cache),
        or the ones specified by the given entries.

2015-04-10  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Refactor MediaPlaybackTarget
        https://bugs.webkit.org/show_bug.cgi?id=143571

        Reviewed by Jer Noble.

        Pass a MediaPlaybackTargetContext across process boundary instead of a MediaPlaybackTarget.
        * Shared/WebCoreArgumentCoders.h:
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encode): New.
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::decode): New.
        * Shared/mac/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::encodePlatformData): New.
        (IPC::ArgumentCoder<MediaPlaybackTargetContext>::decodePlatformData): New.
        (IPC::ArgumentCoder<MediaPlaybackTarget>::encode): Deleted.
        (IPC::ArgumentCoder<MediaPlaybackTarget>::decode): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChoosePlaybackTarget): Take a Ref<MediaPlaybackTarget>&&.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::playbackTargetSelected): Take a Ref<MediaPlaybackTarget>&&.

2015-04-10  Hunseop Jeong  <hs85.jeong@samsung.com>

        Fix some minor typos related to the WebProcessCreationParameter. 
        https://bugs.webkit.org/show_bug.cgi?id=143598

        Reviewed by Csaba Osztrogonác.

        No new tests, no behavior change.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2015-04-09  Andy Estes  <aestes@apple.com>

        [Cocoa] Add a HAVE(AVKIT) and use it
        https://bugs.webkit.org/show_bug.cgi?id=143593

        Reviewed by David Kilzer.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mayAutomaticallyShowVideoOptimized]): Returned false if !HAVE(AVKIT).
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Removed the check for < iOS 8.2.
        (WebKit::WebPageProxy::reattachToWebProcess): Ditto.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::create): Created a version of this function that returns nullptr if
        the minimum required version of iOS is less than 8.2 or if !HAVE(AVKIT).
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Only called Settings::setAVKitEnabled(true) if HAVE(AVKIT).

2015-04-09  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern loops in WebProcess 
        https://bugs.webkit.org/show_bug.cgi?id=143302

        Reviewed by Darin Adler.

        Use modern range for-loops in WebProcess.

        No new tests, no behavior change.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::focusedWebPage):
        (WebKit::WebProcess::webPageGroup):
        (WebKit::WebProcess::setTextCheckerState):
        (WebKit::WebProcess::resetAllGeolocationPermissions):

2015-04-09  Gordon Sheridan  <gordon_sheridan@apple.com>

        Track IconDatabase retain counts for WebContent processes. Balance retain/releases for processes that terminate before successfully doing it themselves.
        https://bugs.webkit.org/show_bug.cgi?id=143517.

        Reviewed by Brady Eidson.

        * UIProcess/WebIconDatabase.messages.in:
        Move RetainIconForPageURL and ReleaseIconForPageURL messages to WebProcessProxy so they can be associated with the appropriate web process.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionDidClose):
        Call releaseRemainingIconsForPageURLs() to balance retains/releases for this process.

        (WebKit::WebProcessProxy::retainIconForPageURL):
        Track retain counts for page URLs and call through to WebIconDatabase.

        (WebKit::WebProcessProxy::releaseIconForPageURL):
        Ditto.

        (WebKit::WebProcessProxy::releaseRemainingIconsForPageURLs):
        Call releaseIconForPageURL() once for each outstanding retain count, for each page URL.

        * UIProcess/WebProcessProxy.h:
        Declare methods for retainIconForPageURL(), releaseIconForPageURL(), and releaseRemainingIconsForPageURLs().
        Declare hash map to track number of retains per page URL.

        * UIProcess/WebProcessProxy.messages.in:
        Moved RetainIconForPageURL and ReleaseIconForPageURL messages here from WebIconDatabase.

        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::retainIconForPageURL):
        Modify the receiver of the message to be WebProcessProxy.

        (WebKit::WebIconDatabaseProxy::releaseIconForPageURL):
        Ditto.

2015-04-09  Chris Dumez  <cdumez@apple.com>

        [WK2] Regression(r182194): The NetworkProcess is calling the wrong memory pressure handler before suspending
        https://bugs.webkit.org/show_bug.cgi?id=143575
        <rdar://problem/20484338>

        Reviewed by Andreas Kling.

        After r182194, the NetworkProcess is calling the memory pressure
        handler before getting suspended to free-up as much memory as possible
        at this point.

        However, we were calling the default memory pressure handling code
        instead of the custom handler registered by the NetworkProcess. This
        patch fixes the problem.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::processWillSuspend):
        * NetworkProcess/NetworkProcess.h:

2015-04-09  Brady Eidson  <beidson@apple.com>

        REGRESSION (r182573): Action Menus no longer appear for WebKit2 views displaying an image
        rdar://problem/20486551 and https://bugs.webkit.org/show_bug.cgi?id=143574

        Reviewed by Brent Fulgham.

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::Data): Clear up a name scoping issue.

2015-04-09  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] editorState() should not cause a synchronous layout
        https://bugs.webkit.org/show_bug.cgi?id=142536
        <rdar://problem/20041506>

        Reviewed by Enrica Casucci.

        platformEditorState() on iOS does a synchronous layout to compute some
        of the EditorState members (e.g. caretRectAtStart / caretRectAtEnd).
        This is bad for performance as this is called every time the selection
        is changed (which happens for e.g. when you set the value of a focused
        HTMLInputElement).

        This patch updates the behavior on iOS to only send a partial EditorState
        on selection change so that the UIProcess gets most of the information
        (the ones that do not require style recalc or layout) ASAP. A full Editor
        state is then sent after the asynchronous layout is done.

        With this change, I see a 38% improvement on Speedometer (26.4 +/- 0.37
        -> 36.5 +/- 0.54) on iPhone 6 Plus.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        (WebKit::EditorState::PostLayoutData::encode):
        (WebKit::EditorState::PostLayoutData::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState): Deleted.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLayerTree:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (WebKit::WKSelectionDrawingInfo::WKSelectionDrawingInfo):
        (-[WKContentView webSelectionRects]):
        (-[WKContentView _addShortcut:]):
        (-[WKContentView selectedText]):
        (-[WKContentView isReplaceAllowed]):
        (-[WKContentView _promptForReplace:]):
        (-[WKContentView _transliterateChinese:]):
        (-[WKContentView textStylingAtPosition:inDirection:]):
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView _showDictionary:]):
        (-[WKContentView _characterBeforeCaretSelection]):
        (-[WKContentView _characterInRelationToCaretSelection:]):
        (-[WKContentView _selectionAtDocumentStart]):
        (-[WKContentView selectedTextRange]):
        (-[WKContentView hasContent]):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::didChangeSelectionAndUpdateLayout):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        (WebKit::WebPage::didChangeSelection):
        (WebKit::WebPage::sendPostLayoutEditorStateIfNeeded):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::platformEditorState):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformEditorState):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformEditorState):

2015-04-09  Antti Koivisto  <antti@apple.com>

        Network Cache: Crash in WebCore::CachedResource::tryReplaceEncodedData
        https://bugs.webkit.org/show_bug.cgi?id=143562

        Reviewed by Anders Carlsson.

        If another thread comes and truncates the file before we map it we end up with a map that crashes when accessed.

        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::IOChannel):

            When creating a new file unlink any existing file instead of using O_TRUNC.

2015-04-09  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][GTK] WebKit2's generate-forwarding-headers.pl runs too many times
        https://bugs.webkit.org/show_bug.cgi?id=142907

        Unreviewed typo fix after r182595.

        * PlatformGTK.cmake:

2015-04-09  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][GTK] WebKit2's generate-forwarding-headers.pl runs too many times
        https://bugs.webkit.org/show_bug.cgi?id=142907

        Reviewed by Carlos Garcia Campos.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Scripts/generate-forwarding-headers.pl: Make it work with more path and platform arguments.

2015-04-08  Joseph Pecoraro  <pecoraro@apple.com>

        Exception in console and broken right click after attempting to show context menu in Inspector
        https://bugs.webkit.org/show_bug.cgi?id=143556

        Reviewed by Brady Eidson.

        * Shared/mac/NativeContextMenuItem.mm:
        (WebKit::NativeContextMenuItem::NativeContextMenuItem):
        Add an ASSERT to immediately catch a menu item created with a nil native menu item.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        Gracefully handle a null share context menu item.

2015-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Unreviewed test fix after r182584
        https://bugs.webkit.org/show_bug.cgi?id=143452

        Correct bit comparison to use the correct value for the Control-key

        * Shared/mac/WebEventFactory.mm:
        (WebKit::typeForEvent):

2015-04-08  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL] Create PageUIClientEfl after sending CreateWebPage message
        https://bugs.webkit.org/show_bug.cgi?id=143514

        Reviewed by Gyuyoung Kim.

        UIProcess sends some messages to WebPage before WebPage is created. It makes some error logs on debug build.
        So this patch moves the initialization of m_pageUIClient after calling WKViewInitialize().

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):

2015-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Mac] WebKit is not honoring OS preferences for secondary click behaviors
        https://bugs.webkit.org/show_bug.cgi?id=143452
        <rdar://problem/20437483>

        Reviewed by Tim Horton.

        We cannot rely on the event's button number to decide behavior. The OS settings might have
        mapped middle button to context menu, etc. Instead, we should ask the OS (via NSMenu) what
        the proper button press behavior is.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::mouseButtonForEvent): Ask NSMenu what kind of button press we have received.

2015-04-08  Brady Eidson  <beidson@apple.com>

        Expose the "Share" menu for links, images, and media.
        <rdar://problem/20435340> and https://bugs.webkit.org/show_bug.cgi?id=143502

        Reviewed by Tim Horton.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::Data):
        * Shared/WebHitTestResult.h:

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

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::shareMenuItem):
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:

        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::shareSelectedTextMenuItem): Deleted.

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

2015-04-08  Anders Carlsson  <andersca@apple.com>

        Add encoding and decoding of ints to WKRemoteObjectCoder
        https://bugs.webkit.org/show_bug.cgi?id=143538

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (-[WKRemoteObjectEncoder encodeInt:forKey:]):
        (-[WKRemoteObjectDecoder decodeIntForKey:]):

2015-04-08  Anders Carlsson  <andersca@apple.com>

        Delete ApplicationCache static member functions
        https://bugs.webkit.org/show_bug.cgi?id=143534

        Reviewed by Tim Horton.

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearApplicationCacheForOrigin):
        (WebKit::InjectedBundle::appCacheUsageForOrigin):

2015-04-08  Enrica Casucci  <enrica@apple.com>

        32-bit build fix after r182554.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView resignFirstResponder]):

2015-04-08  Beth Dakin  <bdakin@apple.com>

        Force events should not require preventDefault in order to fire
        https://bugs.webkit.org/show_bug.cgi?id=143503
        -and corresponding-
        rdar://problem/20458916

        Reviewed by Tim Horton.

        We no longer need m_lastActionMenuHitTestPreventsDefault since we’ll always 
        dispatch the events to Element.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        (WebKit::WebPage::inputDeviceForceDidChange):
        (WebKit::WebPage::immediateActionDidCancel):

2015-04-08  Enrica Casucci  <enrica@apple.com>

        Calling makeFirstResponder on WKWebView doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=143482
        rdar://problem/20298166

        Reviewed by Dan Bernstein.

        Adding forwarding of the responder status to the WKView.
        We also need to avoid doing any cleanup in resignFirstResponder
        if we know we are about to regain responder status again.
        Same goes for becomeFirstResponder.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView becomeFirstResponder]):
        (-[WKWebView acceptsFirstResponder]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView becomeFristResponder]):
        (-[WKView resignFirstResponder]):

2015-04-07  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setFixedLayoutSize:]):

2015-04-07  Tim Horton  <timothy_horton@apple.com>

        Expose and test fixedLayoutSize via modern WebKit SPI
        https://bugs.webkit.org/show_bug.cgi?id=143500

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isFixedLayoutEnabled]):
        (-[WKWebView _setFixedLayoutEnabled:]):
        (-[WKWebView _fixedLayoutSize]):
        (-[WKWebView _setFixedLayoutSize:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _isFixedLayoutEnabled]):
        (-[WKView _setFixedLayoutEnabled:]):
        (-[WKView _fixedLayoutSize]):
        (-[WKView _setFixedLayoutSize:]):
        Add API for adjusting the fixed layout size, and whether or not we use it.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        Repair a mistake I made in r139822, where I brought odd TILED_BACKING_STORE-only
        logic (which disables scrollbars if fixedLayoutSize is enabled) to the rest of the ports.
        Put it back as TILED_BACKING_STORE-only.

        Persist the fixedLayoutSize through view creation; we already persist the enabled state,
        but not the size, which doesn't make any sense.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::fixedLayoutSize):
        * WebProcess/WebPage/WebPage.h:
        Add a fixedLayoutSize() getter.

2015-04-07  Brady Eidson  <beidson@apple.com>

        ContextMenuItem refactoring
        https://bugs.webkit.org/show_bug.cgi?id=143485

        Reviewed by Beth Dakin.

        * Shared/mac/NativeContextMenuItem.mm:
        (WebKit::NativeContextMenuItem::NativeContextMenuItem):

2015-04-07  Simon Fraser  <simon.fraser@apple.com>

        Add a new setting, AntialiasedFontDilationEnabled, exposed via WK2.
        https://bugs.webkit.org/show_bug.cgi?id=143495

        Reviewed by Tim Horton.
        
        Exposed the antialiasedFontDilationEnabled setting via WK C SPI and Objective-C SPI.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAntialiasedFontDilationEnabled):
        (WKPreferencesGetAntialiasedFontDilationEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _antialiasedFontDilationEnabled]):
        (-[WKPreferences _setAntialiasedFontDilationEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-04-07  Beth Dakin  <bdakin@apple.com>

        Should only propagate pressure events with relevant phases
        https://bugs.webkit.org/show_bug.cgi?id=143494
        -and corresponding-
        rdar://problem/20453738

        Reviewed by Tim Horton.

        We only care about the changed, began, and ended phases. 
        * UIProcess/API/mac/WKView.mm:
        (-[WKView pressureChangeWithEvent:]):

2015-04-07  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; make calls to new SPI conditional on iOS version.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame):

2015-04-06  Anders Carlsson  <andersca@apple.com>

        Create the web inspector process pool lazily
        https://bugs.webkit.org/show_bug.cgi?id=143456
        rdar://problem/20146520

        Reviewed by Mark Lam.

        Add and implement WebInspectorProxy::isInspectorProcessPool instead of always creating the inspector process pool
        when trying to determine if a given process pool is the inspector process pool.

        This should speed up initialization somewhat and avoid creating a storage manager for example.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectorProcessPool):
        (WebKit::WebInspectorProxy::isInspectorProcessPool):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):

2015-04-06  Brady Eidson  <beidson@apple.com>

        Combine ActionMenuHitTestResult with WebHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=143444

        Reviewed by Beth Dakin.

        * Shared/mac/ActionMenuHitTestResult.h: Removed.
        * Shared/mac/ActionMenuHitTestResult.mm: Removed.

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::Data):
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        (WebKit::WebHitTestResult::Data::platformEncode):
        (WebKit::WebHitTestResult::Data::platformDecode):
        * Shared/WebHitTestResult.h:
        * Shared/mac/WebHitTestResult.mm: Added.
        (WebKit::WebHitTestResult::Data::platformEncode):
        (WebKit::WebHitTestResult::Data::platformDecode):

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didPerformActionMenuHitTest:forImmediateAction:contentPreventsDefault:userData:]):
        (-[WKView _didPerformActionMenuHitTest:forImmediateAction:userData:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPerformActionMenuHitTest):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformActionMenuHitTest):
        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController willDestroyView:]):
        (-[WKActionMenuController _clearActionMenuState]):
        (-[WKActionMenuController didPerformActionMenuHitTest:userData:]):
        (-[WKActionMenuController _hitTestResultDataImage]):
        (-[WKActionMenuController _defaultMenuItemsForImage]):
        (-[WKActionMenuController _copyImage:]):
        (-[WKActionMenuController _addImageToPhotos:]):
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        (-[WKActionMenuController _defaultMenuItemsForEditableTextWithSuggestions]):
        (-[WKActionMenuController _defaultMenuItemsForDataDetectableLink]):
        (-[WKActionMenuController _webHitTestResult]):
        (-[WKActionMenuController _defaultMenuItems]):
        (-[WKActionMenuController _hitTestResultImage]): Deleted.
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController willDestroyView:]):
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController didPerformActionMenuHitTest:contentPreventsDefault:userData:]):
        (-[WKImmediateActionController immediateActionRecognizerDidUpdateAnimation:]):
        (-[WKImmediateActionController _webHitTestResult]):
        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController _updateImmediateActionItem]):
        (-[WKImmediateActionController _menuItemForDataDetectedText]):
        (-[WKImmediateActionController _animationControllerForText]):
        (-[WKImmediateActionController didPerformActionMenuHitTest:userData:]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):

2015-04-06  Jer Noble  <jer.noble@apple.com>

        Synchronize fullscreen animation between processes.
        https://bugs.webkit.org/show_bug.cgi?id=143131

        Reviewed by Simon Fraser.

        Support synchronize resizing by animating within the UIProcess. Since setVideoLayerFrameFenced() is now only
        ever called from within a 0-duration transaction, make that the official contract of the function and wrap
        the WebProcess side of that method in its own 0-duration transaction.

        * Platform/spi/ios/BackBoardServicesSPI.h: Added.
        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): Remember the initial rect.
        (WebKit::WebVideoFullscreenManagerProxy::videoLayerFrame): Added; simple getter.
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame): Use a different synchronization fence primative.
            Save the cached frame value.
        (WebKit::WebVideoFullscreenManagerProxy::videoLayerGravity): Added; simple getter.
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerGravity): Save the cached gravity value.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::setVideoLayerFrameFenced): Wrap in a 0-length transaction.

2015-04-06  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Regression(r182323): ASSERTION FAILED: WebCore::SQLiteDatabaseTracker::hasTransactionInProgress() in NetworkCache::Statistics::initialize()
        https://bugs.webkit.org/show_bug.cgi?id=143451
        <rdar://problem/20437994>

        Reviewed by Anders Carlsson.

        Initialize WebProcess::m_webSQLiteDatabaseTracker and
        NetworkProcess::m_webSQLiteDatabaseTracker in their respective class
        constructors instead of doing it later in the initializeWebProcess() /
        initializeNetworkProcess() methods.

        If we do it later, it can happen that the tracker gets set after
        a SQLiteTransactionInProgressAutoCounter initialization and before
        the actual transaction. When this happens, the
        SQLiteTransactionInProgressAutoCounter variable fails to increment the
        transaction count. Then when the transaction is executed,
        SQLiteDatabaseTracker::hasTransactionInProgress() can return false.
        This would lead to possible assertions on start up on iOS.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:

2015-04-06  Beth Dakin  <bdakin@apple.com>

        https://trac.webkit.org/changeset/182338 introduced a build failure that I 
        attempted to fix with https://trac.webkit.org/changeset/182341 , but that disabled 
        the feature accidentally.  This should do the right thing.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView pressureChangeWithEvent:]):

2015-04-06  Commit Queue  <commit-queue@webkit.org>

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

        This will disturb network cache efficacy logging, we should
        reland this later. (Requested by cdumez__ on #webkit).

        Reverted changeset:

        "[WK2][NetworkCache] Drop HTTP method from NetworkCache::Key"
        https://bugs.webkit.org/show_bug.cgi?id=143348
        http://trac.webkit.org/changeset/182296

2015-04-06  Žan Doberšek  <zdobersek@igalia.com>

        [WK2] API::Array::copy() should move the resulting Vector<> of copies into the Array::create() call
        https://bugs.webkit.org/show_bug.cgi?id=143413

        Reviewed by Darin Adler.

        Move the Vector<> object containing the copied elements into the Array::create()
        call, avoiding copying all the elements again.

        While here, change the Vector<> parameters for Array::create() and the Array
        constructor to rvalue references. This will ensure that the passed-in object
        is moved into the Array::create() call if possible, or explicitly copied
        otherwise. The constructor is moved into the header for inlining opportunities
        and the unnecessary parameter in the create(Vector<>&&) method declaration
        removed.

        * Shared/API/APIArray.cpp:
        (API::Array::create):
        (API::Array::copy):
        (API::Array::Array): Deleted.
        * Shared/API/APIArray.h:

2015-04-06  Žan Doberšek  <zdobersek@igalia.com>

        UserScript, UserStyleSheet constructors should take in Vector<String> rvalues
        https://bugs.webkit.org/show_bug.cgi?id=143411

        Reviewed by Darin Adler.

        Move the whitelist and blacklist Vector<String> objects into the
        UserScript and UserStyleSheet constructors in ArgumentCoder<T>::decode
        functions.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<UserStyleSheet>::decode):
        (IPC::ArgumentCoder<UserScript>::decode):

2015-04-05  Darin Adler  <darin@apple.com>

        [Mac] Spins seen in WKSetApplicationInformationItem, so it should not be called on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=143423
        rdar://problem/18773785

        Reviewed by Alexey Proskuryakov.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::origin): Factored out this helper function from updateActivePages below, so
        the function below is easier to read.
        (WebKit::WebProcess::updateActivePages): Refactored to use the new origin function.
        Use dispatch_async to call WKSetApplicationInformationItem without blocking.

2015-04-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use constants of sqlite3 directly for status of SQL result in webdatabase
        https://bugs.webkit.org/show_bug.cgi?id=143329

        Reviewed by Darin Adler.

        In webdatabase, it has used own constant variables as well as using sqlite3 constants directly.
        If sqlite3 constants are changed in the library, we should modify many files as well. Besides
        it can cause to use if~else statement which consumes more cpu cycles compared to switch~case.

        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp:
        (WebKit::SQLiteIDBCursor::createSQLiteStatement):
        (WebKit::SQLiteIDBCursor::resetAndRebindStatement):
        (WebKit::SQLiteIDBCursor::bindArguments):
        (WebKit::SQLiteIDBCursor::internalAdvanceOnce):
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::createOrMigrateRecordsTableIfNecessary):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createAndPopulateInitialMetadata):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::extractExistingMetadata):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::changeDatabaseVersion):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::deleteObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::clearObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::deleteIndex):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::generateKeyNumber):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::updateKeyGeneratorNumber):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::keyExistsInObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::putRecord):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::uncheckedPutIndexRecord):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::deleteRecord):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::getKeyRecordFromObjectStore):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::getKeyRangeRecordFromObjectStore):
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::executeSQLStatement):
        (WebKit::NetworkCache::Statistics::initialize):
        (WebKit::NetworkCache::Statistics::queryWasEverRequested):
        (WebKit::NetworkCache::Statistics::addHashesToDatabase):
        (WebKit::NetworkCache::Statistics::addStoreDecisionsToDatabase):
        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::importItems):
        (WebKit::LocalStorageDatabase::updateDatabaseWithChangedItems):
        (WebKit::LocalStorageDatabase::databaseIsEmpty):
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::deleteAllDatabases):
        (WebKit::LocalStorageDatabaseTracker::importOriginIdentifiers):
        (WebKit::LocalStorageDatabaseTracker::addDatabaseWithOriginIdentifier):
        (WebKit::LocalStorageDatabaseTracker::removeDatabaseWithOriginIdentifier):
        (WebKit::LocalStorageDatabaseTracker::pathForDatabaseWithOriginIdentifier):
        * WebProcess/Cookies/soup/WebKitSoupCookieJarSqlite.cpp:
        (webkitSoupCookieJarSqliteLoad):
        (webkitSoupCookieJarSqliteInsertCookie):
        (webkitSoupCookieJarSqliteDeleteCookie):

2015-04-05  Simon Fraser  <simon.fraser@apple.com>

        Remove "go ahead and" from comments
        https://bugs.webkit.org/show_bug.cgi?id=143421

        Reviewed by Darin Adler, Benjamin Poulain.

        Remove the phrase "go ahead and" from comments where it doesn't add
        anything (which is almost all of them).

        * Platform/unix/EnvironmentUtilities.cpp:
        (WebKit::EnvironmentUtilities::stripValuesEndingWithString):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didClose):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:replacementRange:]):
        (-[WKView _pluginFocusOrWindowFocusChanged:pluginComplexTextInputIdentifier:]):
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::removeDatabaseWithOriginIdentifier):

2015-04-05  Antti Koivisto  <antti@apple.com>

        Bloom filter should support longer hashes
        https://bugs.webkit.org/show_bug.cgi?id=143419

        Reviewed by Dan Bernstein.

        Use the hash digest directly in the contents filter instead of going via shortHash.

        * NetworkProcess/cache/NetworkCacheKey.h:
        (WebKit::NetworkCache::Key::hash):
        (WebKit::NetworkCache::Key::shortHash): Deleted.
        (WebKit::NetworkCache::Key::toShortHash): Deleted.

            No longer needed.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::synchronize):
        (WebKit::NetworkCache::Storage::addToContentsFilter):
        (WebKit::NetworkCache::Storage::mayContain):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-04-05  Antti Koivisto  <antti@apple.com>

        Network cache Bloom filter is too big
        https://bugs.webkit.org/show_bug.cgi?id=143400

        Follow-up: Fix an ineffective assert.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::setMaximumSize): Average resource size is closer to 50KB than 50MB.

2015-04-05  Antti Koivisto  <antti@apple.com>

        Rename Cache::setMaximumSize to setCapacity
        https://bugs.webkit.org/show_bug.cgi?id=143418

        Reviewed by Dan Bernstein.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::setCapacity):
        (WebKit::NetworkCache::Cache::setMaximumSize): Deleted.
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::retrieve):
        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::Storage::update):
        (WebKit::NetworkCache::Storage::setCapacity):
        (WebKit::NetworkCache::Storage::shrinkIfNeeded):
        (WebKit::NetworkCache::Storage::shrink):
        (WebKit::NetworkCache::Storage::setMaximumSize): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformSetCacheModel):

2015-04-04  Antti Koivisto  <antti@apple.com>

        Network cache Bloom filter is too big
        https://bugs.webkit.org/show_bug.cgi?id=143400

        Reviewed by Chris Dumez.

        It is currently 1MB.

        This patch switches the cache from a counting filter (CountingBloomFilter) to a bit filter (BloomFilter).

        It also reduces the filter size from 2^20 to 2^18 elements which is good for ~26000 cache entries while
        still keeping false positive rate below 1%. The current cache capacity allows around 4000 entries
        with typical web contents.

        The new filter size is 32KB.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::synchronize):

            Turn initialization function into general purpose synchronization function.

        (WebKit::NetworkCache::Storage::addToContentsFilter):

            Collect newly added hashes so we don't miss entries that were added during synchronization.

        (WebKit::NetworkCache::Storage::mayContain):
        (WebKit::NetworkCache::Storage::remove):
        (WebKit::NetworkCache::Storage::retrieve):
        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::Storage::dispatchPendingWriteOperations):
        (WebKit::NetworkCache::Storage::dispatchFullWriteOperation):
        (WebKit::NetworkCache::Storage::dispatchHeaderWriteOperation):
        (WebKit::NetworkCache::Storage::setMaximumSize):
        (WebKit::NetworkCache::Storage::clear):
        (WebKit::NetworkCache::Storage::shrinkIfNeeded):
        (WebKit::NetworkCache::Storage::shrink):

            Non-counting Bloom filter does not support removals so this requires a new strategy.

            Shrink code now simply deletes entries. The filter is updated by calling synchronize() at the end.
            While we could synchronize the filter during traversal it is better to just have one function for that.

        (WebKit::NetworkCache::Storage::initialize): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::mayContain):
        (WebKit::NetworkCache::Storage::cacheMayContain): Deleted.

2015-04-04  Andy Estes  <aestes@apple.com>

        [Content Filtering] Blocked page is not always displayed when it should be
        https://bugs.webkit.org/show_bug.cgi?id=143410

        Reviewed by Andreas Kling.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad): Stopped clearing m_contentFilterUnblockHandler here.
        (WebKit::WebFrameProxy::didHandleContentFilterUnblockNavigation): Started doing it here instead.

2015-04-04  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Add a way to temporarily disable the WebKit Network Cache for testing
        https://bugs.webkit.org/show_bug.cgi?id=143392
        <rdar://problem/20315669>

        Reviewed by Antti Koivisto.

        Add a way to temporarily disable the WebKit Network Cache for testing.
        It will be used temporarily for comparing page load times with and
        without the WebKit network disk cache enabled.

        This is in addition to the existing "WebKitNetworkCacheEnabled"
        NSUserDefaults:
        webkitNetworkCacheIsEnabled = [defaults boolForKey:WebKitNetworkCacheEnabledDefaultsKey]
            && ![defaults boolForKey:WebKitNetworkCacheTemporarilyDisabledForTestingKey];

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

2015-04-04  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r182215): Feedly crashes when closing article
        https://bugs.webkit.org/show_bug.cgi?id=143405
        rdar://problem/20382734, rdar://problem/20395497

        Reviewed by Tim Horton.
        
        Calling computeNonFastScrollableRegion() eagerly when scrollable areas come and go
        is bad, because it can cause FrameView::layout() to get called in the middle of
        RenderObject destruction, which leaves the render tree in a bad state.
        
        Fix by calling computeNonFastScrollableRegion() lazily, just before scrolling tree commit.
        
        AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged() now just sets
        a flag to say that the non-fast region needs to be recomputed, and that schedules
        a scrolling tree commit. When the commit happens, we recompute the region. If the
        region didn't change, and no other changes are pending, there's no need to commit.

        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::buildTransaction):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers): Outdent #ifdefs.

2015-04-03  Beth Dakin  <bdakin@apple.com>

        Attempted build fix.

        * UIProcess/API/mac/WKView.mm:

2015-04-03  Simon Fraser  <simon.fraser@apple.com>

        Fix the firing of the ReachedSessionRestorationRenderTreeSizeThreshold milestone on iOS
        https://bugs.webkit.org/show_bug.cgi?id=143394

        Reviewed by Tim Horton.
        
        A client reshuffle at some point broke the dispatch of the ReachedSessionRestorationRenderTreeSizeThreshold
        milestone. Fix by using WebPageProxy::didLayout() to fire the milestone.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):

2015-04-03  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=143387
        Improvements to webkitmouseforce web API
        -and corresponding-
        rdar://problem/20281808
        rdar://problem/20281853

        Reviewed by Darin Adler.

        This patch:
        1. Dispatches webkitmouseforceup and webkitmouseforceclick at the right time.
        2. Dispatches webkitmouseforcechanged from mousedown all the way through through 
        mouseup.
        3. Uses force values from pressureChangeWithEvent instead of the immediate action 
        gesture recognizer.

        Listen for this NSResponder method, and pass the relevant info to WebPageProxy to 
        dispatch to the web process.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView pressureChangeWithEvent:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::inputDeviceForceDidChange):
        (WebKit::WebPageProxy::immediateActionDidUpdate):
        * UIProcess/WebPageProxy.h:

        The web process still needs to know when the immediate action gesture recognizer 
        is updating, but it doesn’t need the force information. That will come from 
        pressureChangeWithEvent.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController immediateActionRecognizerDidUpdateAnimation:]):

        Cache m_lastForceStage so that we can determine if we are 
        transitioning to a new stage.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:

        New message for InputDeviceForceDidChange and modified message for 
        ImmediateActionDidUpdate
        * WebProcess/WebPage/WebPage.messages.in:

        inputDeviceForceDidChange now takes care of dispatching mouseforcechanged, 
        mouseforcedown, mouseforceup, and mouseforceclick.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::inputDeviceForceDidChange):

        We still need to keep track of the ImmediateActionStages in WebCore::EventHandler 
        so that we can have the right default behavior on mouseup based on whether or not 
        that action began and was completed. (In other words, to ensure we don’t navigate 
        to a link after force clicking it.)
        (WebKit::WebPage::immediateActionDidUpdate):
        (WebKit::WebPage::immediateActionDidComplete):

2015-04-03  Said Abou-Hallawa  <sabouhallawa@apple.com>

        InjectedBundleNodeHandle::renderedImage() needs to be exposed from the Cocoa WebAPI layer.
        https://bugs.webkit.org/show_bug.cgi?id=143341.

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle renderedImageWithOptions:]): Expose rendered
        image injected bundle API from the Cocoa layer. A node in the page can be
        rendered to an NSImage on MacOS and to a UIImage on iOS.

2015-04-03  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] We should prevent NetworkProcess suspension while it has pending SQL transactions
        https://bugs.webkit.org/show_bug.cgi?id=143278
        <rdar://problem/20180799>

        Reviewed by Anders Carlsson.

        Prevent NetworkProcess suspension while it has pending SQL transactions,
        similarly to what we already did for WebProcesses. This patch moves the
        WebSQLiteDatabaseTracker from WebProcess/ to Shared/ and make it usable
        by the NetworkProcess class as well.

        Whenever there are locked files to due SQL transactions, the
        NetworkProcess will send an IPC message to the NetworkProcessProxy
        which will hold a background process assertion until the NetworkProcess'
        SQL transactions are complete. This way, it is no longer possible for
        the NetworkProcess to get suspended while SQL transactions are running
        and a database file is locked.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * Shared/WebSQLiteDatabaseTracker.cpp: Renamed from Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.cpp.
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker):
        (WebKit::m_childProcessType):
        (WebKit::WebSQLiteDatabaseTracker::willBeginFirstTransaction):
        (WebKit::WebSQLiteDatabaseTracker::didFinishLastTransaction):
        (WebKit::WebSQLiteDatabaseTracker::hysteresisUpdated):
        * Shared/WebSQLiteDatabaseTracker.h: Renamed from Source/WebKit2/WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::setIsHoldingLockedFiles):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:

2015-04-03  Antti Koivisto  <antti@apple.com>

        Add non-counting Bloom filter implementation
        https://bugs.webkit.org/show_bug.cgi?id=143366

        Reviewed by Sam Weinig.

        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-04-03  Zan Dobersek  <zdobersek@igalia.com>

        Fix the EFL and GTK build after r182243
        https://bugs.webkit.org/show_bug.cgi?id=143361

        Reviewed by Csaba Osztrogonác.

        * PlatformGTK.cmake: Add a custom command that copies the
        InspectorBackendCommands.js file into the proper directory
        under DerivedSources/WebInspectorUI/.

2015-04-03  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix.

        * UIProcess/API/gtk/WebKitContextMenuClient.cpp:
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        * UIProcess/gtk/WebContextMenuProxyGtk.h:

2015-04-02  Csaba Osztrogonác  <ossy@webkit.org>

        Typo fix.

        * PlatformGTK.cmake:

2015-04-02  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r182303, stub NativeContextMenuItem implemetations added for EFL and GTK.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Shared/efl/NativeContextMenuItemEfl.cpp: Added.
        (WebKit::NativeContextMenuItem::NativeContextMenuItem):
        * Shared/gtk/NativeContextMenuItemGtk.cpp: Added.
        (WebKit::NativeContextMenuItem::NativeContextMenuItem):

2015-04-02  Timothy Horton  <timothy_horton@apple.com>

        De-PLATFORM(IOS)-ify LayerHostingContext::setFencePort
        https://bugs.webkit.org/show_bug.cgi?id=143342

        * Platform/mac/LayerHostingContext.h:
        * Platform/mac/LayerHostingContext.mm:
        Actually, not available on Mavericks. Fix the build.

2015-04-02  Brady Eidson  <beidson@apple.com>

        Unreviewed: Re-applied change after rollout.

        Expose the "Share" menu for text selections on platforms where it's available.
        rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318

        * Shared/API/c/WKContextMenuItemTypes.h: Add a constant for the Share menu.
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::selectedText):

        Add a "cross platform" menu item wrapper, right now only for NSMenuItem.
        * Shared/NativeContextMenuItem.h:
        (WebKit::NativeContextMenuItem::~NativeContextMenuItem):
        (WebKit::NativeContextMenuItem::nsMenuItem):
        * Shared/mac/NativeContextMenuItem.mm:
        (WebKit::NativeContextMenuItem::NativeContextMenuItem):

        Let WebContextMenuItem hold on to a NativeContextMenuItem to maintain full fidelity of the platform.
        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::WebContextMenuItem):
        * Shared/WebContextMenuItem.h:
        (WebKit::WebContextMenuItem::create):
        (WebKit::WebContextMenuItem::nativeContextMenuItem):

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::getContextMenuFromProposedMenu):
        (API::ContextMenuClient::showContextMenu):

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

        * UIProcess/WebContextMenuProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu): Translate the placeholder item from the web process into the
          native Share menu before consulting the context menu client. Also create the API items here so the native NSMenuItem
          can be attached to them.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKMenuTarget forwardContextMenuAction:]):
        (WebKit::nsMenuItem):
        (WebKit::nsMenuItemVector):
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::shareSelectedTextMenuItem): In the web process, mark the Share menu's place in the
          context menu with a placeholder item. It will be translated into the real Share menu in the UI process.

2015-04-02  Commit Queue  <commit-queue@webkit.org>

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

        Broke GTK and EFL builds. (Requested by bfulgham on #webkit).

        Reverted changeset:

        "Expose the "Share" menu for text selections on platforms
        where it's available."
        https://bugs.webkit.org/show_bug.cgi?id=143318
        http://trac.webkit.org/changeset/182293

2015-04-02  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Drop HTTP method from NetworkCache::Key
        https://bugs.webkit.org/show_bug.cgi?id=143348

        Reviewed by Antti Koivisto.

        Drop HTTP method from NetworkCache::Key as we only cache GET responses
        for now. Even when we start caching HEAD responses, we likely will not
        want the method to be part of the key because:
        - A HEAD response can be used to update the headers of a previously cached response to GET
        - A cached GET response may be used to satisfy subsequent HEAD requests

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeCacheKey):
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::Key):
        (WebKit::NetworkCache::Key::operator=):
        (WebKit::NetworkCache::Key::computeHash):
        (WebKit::NetworkCache::Key::operator==):
        (WebKit::NetworkCache::Key::encode):
        (WebKit::NetworkCache::Key::decode):
        * NetworkProcess/cache/NetworkCacheKey.h:
        (WebKit::NetworkCache::Key::method): Deleted.

2015-04-02  Jer Noble  <jer.noble@apple.com>

        [Mac][WK2] Fullscreen animation incorrect when initiated on non-primary monitor
        https://bugs.webkit.org/show_bug.cgi?id=143237

        Reviewed by Brent Fulgham.

        The animation calculations have an implicit assumptions of a screen whose origin is 0,0. Account
        for the screen origin by passing the window's screen's frame into the zoomAnimation() and maskAnimation()
        methods.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:]):
        (zoomAnimation):
        (maskAnimation):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):

2015-04-02  Brady Eidson  <beidson@apple.com>

        Expose the "Share" menu for text selections on platforms where it's available.
        rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318

        Reviewed by Sam Weinig.

        * Shared/API/c/WKContextMenuItemTypes.h: Add a constant for the Share menu.
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::selectedText):

        Add a "cross platform" menu item wrapper, right now only for NSMenuItem.
        * Shared/NativeContextMenuItem.h:
        (WebKit::NativeContextMenuItem::~NativeContextMenuItem):
        (WebKit::NativeContextMenuItem::nsMenuItem):
        * Shared/mac/NativeContextMenuItem.mm:
        (WebKit::NativeContextMenuItem::NativeContextMenuItem):

        Let WebContextMenuItem hold on to a NativeContextMenuItem to maintain full fidelity of the platform.
        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::WebContextMenuItem):
        * Shared/WebContextMenuItem.h:
        (WebKit::WebContextMenuItem::create):
        (WebKit::WebContextMenuItem::nativeContextMenuItem):

        * UIProcess/API/APIContextMenuClient.h:
        (API::ContextMenuClient::getContextMenuFromProposedMenu):
        (API::ContextMenuClient::showContextMenu):

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

        * UIProcess/WebContextMenuProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu): Translate the placeholder item from the web process into the
          native Share menu before consulting the context menu client. Also create the API items here so the native NSMenuItem
          can be attached to them.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKMenuTarget forwardContextMenuAction:]):
        (WebKit::nsMenuItem):
        (WebKit::nsMenuItemVector):
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::shareSelectedTextMenuItem): In the web process, mark the Share menu's place in the
          context menu with a placeholder item. It will be translated into the real Share menu in the UI process.

2015-04-02  Timothy Horton  <timothy_horton@apple.com>

        De-PLATFORM(IOS)-ify LayerHostingContext::setFencePort
        https://bugs.webkit.org/show_bug.cgi?id=143342

        Reviewed by Myles C. Maxfield.

        * Platform/mac/LayerHostingContext.h:
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::setFencePort):
        There's nothing iOS specific about this.

2015-04-02  Oliver Hunt  <oliver@apple.com>

        Ensure that we always set network ATS context in the network process
        https://bugs.webkit.org/show_bug.cgi?id=143343

        Reviewed by Dan Bernstein.

        If a custom cache location or size we were early returning before setting
        the CFNetwork ATS context. This is clearly an error.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):

2015-04-02  Alexey Proskuryakov  <ap@apple.com>

        Make checkURLReceivedFromWebProcess not rely on details of platform URL implementation.
        https://bugs.webkit.org/show_bug.cgi?id=143222
        rdar://problem/19978997

        Reviewed by Sam Weinig.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):

2015-04-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Clean up EnumerationMode to easily extend
        https://bugs.webkit.org/show_bug.cgi?id=143276

        Reviewed by Geoffrey Garen.

        Use default EnumerationMode().

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::enumerate):

2015-04-02  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Update the WebContent process' sandbox profile for AWD
        https://bugs.webkit.org/show_bug.cgi?id=143340
        <rdar://problem/20375170>

        Reviewed by Alexey Proskuryakov.

        Update the WebContent process' sandbox profile for AWD.

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

2015-04-01  Antti Koivisto  <antti@apple.com>

        Use std::chrono types to represent time in response and cache classes
        https://bugs.webkit.org/show_bug.cgi?id=143316

        Reviewed by Andreas Kling.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::responseHasExpired):
        (WebKit::NetworkCache::responseNeedsRevalidation):
        (WebKit::NetworkCache::makeStoreDecision):
        (WebKit::NetworkCache::Cache::store):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):
        (WebKit::NetworkCache::Entry::asJSON):
        * NetworkProcess/cache/NetworkCacheEntry.h:
        (WebKit::NetworkCache::Entry::timeStamp):
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::decodeRecordMetaData):
        (WebKit::NetworkCache::decodeRecord):

            Sanity check the timestamp on decode.

        (WebKit::NetworkCache::encodeRecordMetaData):
        (WebKit::NetworkCache::encodeRecordHeader):
        (WebKit::NetworkCache::Storage::traverse):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::lastModifiedDateMS):
        (WebKit::PluginView::Stream::didReceiveResponse):
        (WebKit::PluginView::manualLoadDidReceiveResponse):
        (WebKit::lastModifiedDate): Deleted.

2015-04-01  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Add didFailProvisionalLoadWithErrorForFrame callback to WKWebProcessPlugInLoadDelegate
        https://bugs.webkit.org/show_bug.cgi?id=143319
        <rdar://problem/19463834>

        Reviewed by Dan Bernstein.

        Add didFailProvisionalLoadWithErrorForFrame callback to
        WKWebProcessPlugInLoadDelegate so that the client side can track all
        types page load completions:
        - didFailProvisionalLoadWithErrorForFrame
        - didFailLoadWithErrorForFrame
        - didFinishLoadForFrame

        Note that this event is already exposed on UIProcess side via the
        WKPageLoaderClient.didFailLoadWithErrorForFrame callback.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didFailProvisionalLoadWithErrorForFrame):
        (setUpPageLoaderClient):

2015-04-01  Enrica Casucci  <enrica@apple.com>

        Injected bundle messages should be at the page level.
        https://bugs.webkit.org/show_bug.cgi?id=143283

        Reviewed by Alexey Proskuryakov.

        All the messages between the injected bundle and the UI
        process should be page level messages instead of context.
        The author of this patch is Tim Horton, I just finished it.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageInjectedBundleClient):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPageInjectedBundleClient.h: Added.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _pageForTesting]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/WebPageInjectedBundleClient.cpp: Added.
        (WebKit::WebPageInjectedBundleClient::didReceiveMessageFromInjectedBundle):
        (WebKit::WebPageInjectedBundleClient::didReceiveSynchronousMessageFromInjectedBundle):
        * UIProcess/WebPageInjectedBundleClient.h: Added.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setInjectedBundleClient):
        (WebKit::WebPageProxy::handleMessage):
        (WebKit::WebPageProxy::handleSynchronousMessage):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::injectedBundleClient):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::handleMessage):
        * WebKit2.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePagePostMessage):
        (WKBundlePagePostSynchronousMessage):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postMessage):
        (WebKit::WebPage::postSynchronousMessage):
        * WebProcess/WebPage/WebPage.h:

2015-04-01  Alexey Proskuryakov  <ap@apple.com>

        [iOS] WebContent should have access to the entirety of its caches directory
        https://bugs.webkit.org/show_bug.cgi?id=143312
        rdar://problem/20314916

        Reviewed by Oliver Hunt.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::networkingCachesDirectory):
        (WebKit::WebProcessPool::webContentCachesDirectory):
        (WebKit::WebProcessPool::openGLCacheDirectory): Deleted.
        (WebKit::WebProcessPool::networkingHSTSDatabasePath): Deleted.
        (WebKit::WebProcessPool::webContentHSTSDatabasePath): Deleted.
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        (WebKit::WebProcessPool::createNewWebProcess):
        * UIProcess/WebProcessPool.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2015-04-01  Timothy Horton  <timothy_horton@apple.com>

        Smart magnification gesture sometimes shoots to the middle of the page
        https://bugs.webkit.org/show_bug.cgi?id=143296
        <rdar://problem/18209280>

        Reviewed by Dean Jackson.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::didCollectGeometryForSmartMagnificationGesture):
        Constrain the target rect to the viewport, and if it had overflowed the viewport,
        scroll halfway towards the gesture origin.

2015-03-31  Simon Fraser  <simon.fraser@apple.com>

        Remove scrolling tree dependency on wheel event handler counts, and use fast scrolling even when there are wheel handlers
        https://bugs.webkit.org/show_bug.cgi?id=143288
        rdar://problem/16049624

        Reviewed by Beth Dakin.

        Remove the wheel event counting that Document does, and passes into the scrolling tree.
        The ScrollingTree now just uses the non-fast scrollable region to determine when to
        fast scroll on pages with wheel event handlers.
        
        If a handler includes position:fixed renderers, we just cover the whole document
        with the slow-scrolling region currently. This could be improved.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        (WebKit::RemoteScrollingTreeTextStream::dump):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::wheelEventHandlersChanged):
        (WebKit::WebChromeClient::numWheelEventHandlersChanged): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::wheelEventHandlersChanged):
        (WebKit::WebPage::recomputeShortCircuitHorizontalWheelEventsState):
        (WebKit::WebPage::numWheelEventHandlersChanged): Deleted.
        * WebProcess/WebPage/WebPage.h:

2015-03-31  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/20365675> [iOS] Include Add to Reading List link action only where supported
        https://bugs.webkit.org/show_bug.cgi?id=143289

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKElementAction.h: Excluded _WKElementActionTypeAddToReadingList from
        the _WKElementActionType enum when Reading List is not supported.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction elementActionWithType:customTitle:]): Made Add to Reading List code
        conditional on HAVE(SAFARI_SERVICES_FRAMEWORK).

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]): Ditto.
        (-[WKActionSheetAssistant showLinkSheet]): Ditto.

        * config.h: Defined HAVE_SAFARI_SERVICES_FRAMEWORK.

2015-03-31  Timothy Horton  <timothy_horton@apple.com>

        TextIndicator for <span> inside an <a> only highlights the <span>, should highlight the whole <a>
        https://bugs.webkit.org/show_bug.cgi?id=143287
        <rdar://problem/20318342>

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Instead of just highlighting the hit element, highlight the whole
        element that the link URL comes from.

2015-03-31  Timothy Horton  <timothy_horton@apple.com>

        WKView should stop using endGestureWithEvent
        https://bugs.webkit.org/show_bug.cgi?id=143285
        <rdar://problem/20357007>

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView magnifyWithEvent:]):
        (-[WKView endGestureWithEvent:]): Deleted.
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::endMagnificationGesture):
        (WebKit::ViewGestureController::endActiveGesture): Deleted.
        While there is no visible symptom, it is recommended that we check
        the phase of normal magnification events instead of using the
        special gesture end events.

2015-03-31  Timothy Horton  <timothy_horton@apple.com>

        Swipes occur in the wrong direction in RTL
        https://bugs.webkit.org/show_bug.cgi?id=143257
        <rdar://problem/20300862>

        Reviewed by Simon Fraser.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (-[WKSwipeTransitionController gestureRecognizerForInteractiveTransition:WithTarget:action:]):
        When choosing which edge to attach our gesture recognizers to,
        flip them in RTL.

        (-[WKSwipeTransitionController directionForTransition:]):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::canSwipeInDirection):
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::scrollEventCanBecomeSwipe):
        (WebKit::ViewGestureController::trackSwipeGesture):
        (WebKit::ViewGestureController::determineLayerAdjacentToSnapshotForParent):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::handleSwipeGesture):
        Adjust SwipeDirection to be in logical back-forward list direction
        instead of physical edge direction.

2015-03-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Move ExpansionBehaviorFlags and TextDirection to their own file
        https://bugs.webkit.org/show_bug.cgi?id=143273

        Reviewed by Simon Fraser.

        This is a mechanical change. It just moves code around.

        This is getting ready for https://bugs.webkit.org/show_bug.cgi?id=142608

        * Shared/WebPopupItem.h:
        * UIProcess/API/C/efl/WKAPICastEfl.h:
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/WebPopupMenuProxy.h:
        * UIProcess/efl/WebUIPopupMenuClient.h:

2015-03-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Clean up Identifier factories to clarify the meaning of StringImpl*
        https://bugs.webkit.org/show_bug.cgi?id=143146

        Reviewed by Filip Pizlo.

        Just change to Identifier::fromString.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertyNames):
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::identifierFromIdentifierRep):

2015-03-31  Timothy Horton  <timothy_horton@apple.com>

        WebKit briefly shows wrong webpage after swiping back (gigaom.com, or any site on a slow network)
        https://bugs.webkit.org/show_bug.cgi?id=143256
        <rdar://problem/19458648>

        Reviewed by Dan Bernstein.

        Instead of allowing a flash of the previous page when the swipe snapshot
        timeouts fire (removing the snapshot before the new page is loaded), show
        the snapshotted background color.

        This fixes the problem on iOS, where UI-side compositing makes it easy to fix,
        but not yet on OS X.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (baseScrollViewBackgroundColor):
        (scrollViewBackgroundColor):
        If the ViewGestureController returns a valid background color, use that
        instead of the page's background color.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Expose _updateScrollViewBackground.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didChangeBackgroundColor):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didChangeBackgroundColor):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeBackgroundColor):
        * UIProcess/WebPageProxy.h:
        Add and plumb didChangeBackgroundColor, which calls
        _updateScrollViewBackground on iOS.
        
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        Hide the content of the drawing area until the next commit. This way,
        even if the snapshot is removed (say, because a timeout fired), we won't
        ever show the old page content (but we will show background color).

        Store the background color associated with the current snapshot.

        Let WKWebView know that it needs to recompute the background color.

        (WebKit::ViewGestureController::removeSwipeSnapshot):
        Clear the background color so that the next time we commit, WKWebView
        will get an invalid color from ViewGestureController and fall back
        to the page's extended background color instead.

        * UIProcess/mac/ViewGestureController.h:
        (WebKit::ViewGestureController::backgroundColorForCurrentSnapshot):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        Keep backgroundColorForCurrentSnapshot up to date on Mac too, even
        though we don't use it yet.

2015-03-31  Timothy Horton  <timothy_horton@apple.com>

        [iOS] Rotating PDF in Safari scrolls to the wrong position
        https://bugs.webkit.org/show_bug.cgi?id=143259
        <rdar://problem/19872693>

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setMinimumSize:]):
        Maintan the relative top/left within the rescaled document.

2015-03-31  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Extend ProcessThrottler use to the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=143249
        <rdar://problem/20231539>

        Reviewed by Gavin Barraclough.

        Extend ProcessThrottler use to the NetworkProcess instead of only the
        WebProcesses. This is needed so that the NetworkProcess gets notified
        before suspension. We now use this notification to free-up memory
        before suspending by calling the critical memory pressure handler, as
        we already do for WebProcesses (rdar://problem/20231539). In the
        future, this infrastructure will be used to delay suspension until the
        pending SQL transactions are done as well (rdar://problem/20180799).

        Previously, the NetworkProcessProxy would hold a foreground assertion
        on behalf of the NetworkProcess but would never release that assertion.
        In this patch, we change this so that WebProcessProxies hold assertions
        on behalf of the NetworkProcess, and release those assertions before
        suspending. As a result, the NetworkProcess gets suspended when all
        WebProcesses are suspended.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::processWillSuspend):
        (WebKit::NetworkProcess::cancelProcessWillSuspend):
        (WebKit::NetworkProcess::processDidResume):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        (WebKit::NetworkProcessProxy::sendProcessWillSuspend):
        (WebKit::NetworkProcessProxy::sendCancelProcessWillSuspend):
        (WebKit::NetworkProcessProxy::didCancelProcessSuspension):
        (WebKit::NetworkProcessProxy::sendProcessDidResume):
        (WebKit::NetworkProcessProxy::processReadyToSuspend):
        * UIProcess/Network/NetworkProcessProxy.h:
        (WebKit::NetworkProcessProxy::throttler):
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::ProcessThrottler):
        (WebKit::ProcessThrottler::didConnectToProcess):
        (WebKit::ProcessThrottler::didConnnectToProcess): Deleted.
        * UIProcess/ProcessThrottler.h:
        * UIProcess/ProcessThrottlerClient.h: Added.
        (WebKit::ProcessThrottlerClient::~ProcessThrottlerClient):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        (WebKit::WebProcessProxy::initializeNetworkProcessActivityToken):
        (WebKit::WebProcessProxy::sendProcessDidResume):
        (WebKit::WebProcessProxy::processReadyToSuspend):
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-03-31  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, revert accidental change by r182138.

        * Scripts/generate-forwarding-headers.pl:
        (createForwardingHeadersForFramework):

2015-03-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build with REDIRECTED_XCOMPOSITE_WINDOW disabled in X11 platform.

        Also fix some unused parameter warnings when
        REDIRECTED_XCOMPOSITE_WINDOW is disabled.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewRenderAcceleratedCompositingResults):
        (resizeWebKitWebViewBaseFromAllocation):

2015-03-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] DnD icon/widget has odd background
        https://bugs.webkit.org/show_bug.cgi?id=143217

        Reviewed by Martin Robinson.

        Use gtk_drag_set_icon_surface() to set the drag icon image,
        instead of DragIcon class.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::startDrag):
        * UIProcess/gtk/DragAndDropHandler.h:

2015-03-30  Commit Queue  <commit-queue@webkit.org>

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

        Since this class is an API object, we don't know for sure when
        it will be destroyed. (Requested by kling on #webkit).

        Reverted changeset:

        "WebBackForwardList doesn't need to manually clear the
        snapshot of an entry when removing it."
        https://bugs.webkit.org/show_bug.cgi?id=143231
        http://trac.webkit.org/changeset/182172

2015-03-30  Andreas Kling  <akling@apple.com>

        WebBackForwardList doesn't need to manually clear the snapshot of an entry when removing it.
        <https://webkit.org/b/143231>

        Reviewed by Tim Horton.

        Now that we don't keep WebBackForwardListItem objects alive forever, it's not necessary
        to clear the snapshot when removing them from the WebBackForwardList, since the entire
        object will be deleted shortly after that anyway.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::didRemoveItem):

2015-03-30  Enrica Casucci  <enrica@apple.com>

        [iOS] WebContent crashing at WebCore: WebCore::Range::collectSelectionRects.
        https://bugs.webkit.org/show_bug.cgi?id=143234
        <rdar://problem/18571345>

        Reviewed by Tim Horton.

        This is a speculative fix that adds a null check before referencing the range.
        In both places where the check has been added the range returned by the call
        that should create it could be null.

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

2015-03-30  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Flesh out the UserContentExtensionStore
        https://bugs.webkit.org/show_bug.cgi?id=143123

        Reviewed by Benjamin Poulain.

        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::WebCompiledContentExtension::createFromCompiledContentExtensionData):
        * Shared/WebCompiledContentExtensionData.cpp:
        (WebKit::WebCompiledContentExtensionData::encode):
        (WebKit::WebCompiledContentExtensionData::decode):
        * Shared/WebCompiledContentExtensionData.h:
        (WebKit::WebCompiledContentExtensionData::WebCompiledContentExtensionData):
        Switch the order in memory of actions and bytecode (and switch the order of the
        variables as well, to keep it clear). This will become necessary when streaming
        the data to disk, as actions are created before the bytecode and we would have to keep them
        in memory until the bytecode was finished compiling if they didn't come before in the file.

        * UIProcess/API/APIUserContentExtensionStore.h:
        * UIProcess/API/APIUserContentExtensionStore.cpp:
        (API::UserContentExtensionStore::defaultStore):
        Add accessor for the processes default shared store.

        (API::constructedPath):
        Helper for constructing the path to a file in the store based on identifier.

        (API::encodeContentExtensionMetaData):
        (API::decodeContentExtensionMetaData):
        Helpers for encoding/decoding the file metadata (version, bytecode size, actions size).

        (API::openAndMapContentExtension):
        Helper to open and map a filed back content extension.

        (API::writeDataToFile):
        Helper to write a Data object to a file.

        (API::compiledToFile):
        Helper to run the content extension compiler and write it to disk. It first
        writes it to a temporary file and then does an atomic rename operation to put
        the file in the final location. Doing this means that if the process crashes while
        the compile is taking place, the partially written file won't end up in the cache, 
        but rather, will be cleaned up by the OS.
 
        (API::UserContentExtensionStore::lookupContentExtension):
        API entry point to lookup an extension that has been compiled to disk. On a background queue,
        it attempts to open and map the extension (based on the identifier passed in) and return it
        to the caller via the callback function passed in.
        
        (API::UserContentExtensionStore::compileContentExtension):
        API entry point to compile an extension and write it to store. On a background queue, it 
        compiles the file to disk and if successful, returns the memory mapped data via the callback
        function passed in.

        (API::UserContentExtensionStore::removeContentExtension):
        API entry point to remove an extension from the store. On a background queue, it 
        unlinks the extension (based on the identifier passed in) and tells the caller it completed
        the action vial the callback function passed in.

        (API::UserContentExtensionStore::synchronousRemoveAllContentExtensions):
        Helper for testing which synchronously unlinks all the files in the store.

        (API::userContentExtensionStoreErrorCategory):
        std::error_code adaptor for some generic errors that can happen in the store. We will want
        to flesh these out further.

        * UIProcess/API/Cocoa/APIUserContentExtensionStoreCocoa.mm: Added.
        (API::UserContentExtensionStore::defaultStorePath):
        Helper to get the platform specific path for the store.

        * UIProcess/API/C/WKUserContentExtensionStoreRef.cpp:
        (WKUserContentExtensionStoreGetTypeID):
        Add ENABLE(CONTENT_EXTENSIONS) guards.

        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm:
        (-[_WKUserContentExtensionStore dealloc]):
        (+[_WKUserContentExtensionStore defaultStore]):
        (-[_WKUserContentExtensionStore compileContentExtensionForIdentifier:encodedContentExtension:completionHandler:]):
        (-[_WKUserContentExtensionStore lookupContentExtensionForIdentifier:completionHandler:]):
        (-[_WKUserContentExtensionStore removeContentExtensionForIdentifier:completionHandler:]):
        (-[_WKUserContentExtensionStore _removeAllContentExtensions]):
        (-[_WKUserContentExtensionStore init]): Deleted.
        * UIProcess/API/Cocoa/_WKUserContentExtensionStoreInternal.h:
        * UIProcess/API/Cocoa/_WKUserContentExtensionStorePrivate.h: Added.
        SPI wrappers for the store.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

2015-03-30  Antti Koivisto  <antti@apple.com>

        Don't cache resources that are very unlikely to be reused
        https://bugs.webkit.org/show_bug.cgi?id=143226

        Reviewed by Chris Dumez.

        Follow-up to cover Cache-control: no-cache case which also has zero cache lifetime.

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

2015-03-30  Antti Koivisto  <antti@apple.com>

        Include cache entry worth to json dump
        https://bugs.webkit.org/show_bug.cgi?id=143202

        Follow-up fix.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::computeRecordWorth):

            This accidentally gave the error case worth 1 rather than 0 as it should be.

2015-03-30  Antti Koivisto  <antti@apple.com>

        Don't cache resources that are very unlikely to be reused
        https://bugs.webkit.org/show_bug.cgi?id=143226
        <rdar://problem/20347160>

        Reviewed by Geoff Garen.

        We are writing lots of resources to the cache that are never used again.

        In browse-around-randomly test this reduced number of cache entries created by ~20% and bytes written by ~5%.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::makeUseDecision):
        (WebKit::NetworkCache::makeRetrieveDecision):

            Rename for clarity.

        (WebKit::NetworkCache::makeStoreDecision):

            Store only if the resource has non-zero expiration or has validation headers.

            Very High priority resources (main resources) keep the existing policy to minimize impact
            on back navigation and tab restore.

        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::canUse): Deleted.
        (WebKit::NetworkCache::canRetrieve): Deleted.
        (WebKit::NetworkCache::canStore): Deleted.
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatistics.cpp:
        (WebKit::NetworkCache::storeDecisionToDiagnosticKey):

2015-03-30  Tim Horton  <timothy_horton@apple.com>

        Swipe snapshot removed too early (jumps around) on arstechnica and NYT
        https://bugs.webkit.org/show_bug.cgi?id=143199
        <rdar://problem/18420467>

        Reviewed by Dan Bernstein.

        Make ViewGestureControllerIOS's snapshot removal timing behave more like the Mac version.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        Let ViewGestureController know when the page has finished state restoration.

        (-[WKWebView _didFinishLoadForMainFrame]):
        (-[WKWebView _didSameDocumentNavigationForMainFrame:]):
        Forward these to ViewGestureController.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didFinishLoadForMainFrame):
        Forward didFinishLoadForMainFrame to WKWebView.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::endSwipeGesture):
        Split the swipe snapshot removal state into a bunch of bools.

        (WebKit::ViewGestureController::willCommitPostSwipeTransitionLayerTree):
        (WebKit::ViewGestureController::setRenderTreeSize):
        (WebKit::ViewGestureController::removeSwipeSnapshotIfReady):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        Unify the snapshot removal logic into one function; removeSwipeSnapshotIfReady
        completely owns the decision. For now, we're waiting for everything, but
        we can do better in the future (using firstVisuallyNonEmptyLayout like Mac used to).

        (WebKit::ViewGestureController::didRestoreScrollPosition):
        (WebKit::ViewGestureController::didFinishLoadForMainFrame):
        (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame):
        (WebKit::ViewGestureController::activeLoadMonitoringTimerFired):
        Add more conditions for swipe snapshot removal. We'll now wait for
        didFinishLoadForMainFrame (or didSameDocumentNavigationForMainFrame),
        for active loads to finish, and for the scroll position to be restored.
        This brings the iOS implementation in line with the slightly better Mac
        implementation, and also sets the stage for deduplication of all of this code.
        
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::ViewGestureController):

2015-03-30  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Add support for "Cache-Control: max-stale" request header
        https://bugs.webkit.org/show_bug.cgi?id=143159
        <rdar://problem/20333296>

        Reviewed by Antti Koivisto.

        Add support for "Cache-Control: max-stale" request header:
        https://tools.ietf.org/html/rfc7234#section-5.2.1.2

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::responseHasExpired):
        (WebKit::NetworkCache::requestRequiresRevalidation):
        (WebKit::NetworkCache::canUse):

2015-03-30  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][GTK] WebKit2's generate-forwarding-headers.pl should fail if clashing headers found
        https://bugs.webkit.org/show_bug.cgi?id=142909

        Reviewed by Philippe Normand.

        * Scripts/generate-forwarding-headers.pl:
        (createForwardingHeadersForFramework):

2015-03-29  Antti Koivisto  <antti@apple.com>

        Include cache entry worth to json dump
        https://bugs.webkit.org/show_bug.cgi?id=143202

        Reviewed by Darin Adler.

        This is useful for analyzing cache performance.
        Also include the body size, total item count and average worth.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::traverse):
        (WebKit::NetworkCache::Cache::dumpContentsToFile):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::asJSON):
        * NetworkProcess/cache/NetworkCacheEntry.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::traverse):

            Add flags for specificying what sort of information is needed.

        (WebKit::NetworkCache::computeRecordWorth):

            Factor to a function.

        (WebKit::NetworkCache::deletionProbability):
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-03-29  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS scrollperf crash after a web process crash
        https://bugs.webkit.org/show_bug.cgi?id=143110

        Reviewed by Dean Jackson.
        
        When we destroy the drawing area after a web process crash, we also need to destroy
        the scrollingPerformanceData which has a reference to the drawing area.

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

2015-03-29  Simon Fraser  <simon.fraser@apple.com>

        Convert arguments to ScrollingCoordinator functions to references
        https://bugs.webkit.org/show_bug.cgi?id=143198

        Reviewed by Darin Adler.

        Convert all the FrameView* and ScrollableArea* arguments to ScrollingCoordinator functions to
        references, and use references in a few other places.

        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::coordinatesScrollingForFrameView):

2015-03-29  Enrica Casucci  <enrica@apple.com>

        [iOS WK2] WKContentView should implement _selectionClipRect
        https://bugs.webkit.org/show_bug.cgi?id=143143
        rdar://problem/20330075

        Reviewed by Benjamin Poulain.

        UIKit checks if the text delegate responds to this selector
        to retrieve the clipping rectangle for the editable element
        where the selection is being create.

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

2015-03-29  Antti Koivisto  <antti@apple.com>

        Use st_mtime instead of st_atime to track file access time
        https://bugs.webkit.org/show_bug.cgi?id=143200

        Reviewed by Darin Adler.

        On OS X atime updates automatically on read so calling Storage::traverse() would always ends up updating access times
        for all cache entries to the current time. This would make entry worth computation produce unexpected results.
        We update mtime manually on successful cache retrieve only so switching to it fixes the problem.

        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h:
        (WebKit::NetworkCache::fileTimes):
        (WebKit::NetworkCache::updateFileModificationTimeIfNeeded):
        (WebKit::NetworkCache::updateFileAccessTimeIfNeeded): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::updateFileModificationTime):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::deletionProbability):
        (WebKit::NetworkCache::Storage::updateFileAccessTime): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-03-27  Gwang Yoon Hwang  <yoon@igalia.com>

        [TexMap] Seperate BitmapTexture related classes implementations from TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=142386

        Reviewed by Žan Doberšek.

        TextureMapper and TextureMapperGL are bloated and tightly coupled with
        BitmapTexture. We should move these classes to seperated file of their own.
        Also, this patch removes friend relationship from TextureMapperGL and  its
        subsidiary classes.

        The main purpose of this refactoring is to expose BitmapTexturePool to
        renderers of platformlayers like Video and Canvas. By doing this, each
        renderer can acquire textures from the global texture pool to paint
        their contents directly.

        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp: Include BitmapTextureGL.h explicitly

2015-03-27  Anders Carlsson  <andersca@apple.com>

        Use a typedef for the WKPluginLoadClientPolicy enum
        https://bugs.webkit.org/show_bug.cgi?id=143161

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPluginLoadPolicy.h:

2015-03-27  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Use WTF::WorkQueue abstraction inside NetworkCacheStatistics
        https://bugs.webkit.org/show_bug.cgi?id=143154

        Reviewed by Antti Koivisto.

        Use WTF::WorkQueue abstraction inside NetworkCacheStatistics, like we
        already do in NetworkCacheStorage.

        * NetworkProcess/cache/NetworkCacheStatistics.cpp: Renamed from Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm.
        (WebKit::NetworkCache::executeSQLCommand):
        (WebKit::NetworkCache::executeSQLStatement):
        (WebKit::NetworkCache::Statistics::open):
        (WebKit::NetworkCache::Statistics::Statistics):
        (WebKit::NetworkCache::Statistics::initialize):
        (WebKit::NetworkCache::Statistics::bootstrapFromNetworkCache):
        (WebKit::NetworkCache::Statistics::shrinkIfNeeded):
        (WebKit::NetworkCache::Statistics::recordRetrievalRequest):
        (WebKit::NetworkCache::Statistics::recordNotCachingResponse):
        (WebKit::NetworkCache::retrieveDecisionToDiagnosticKey):
        (WebKit::NetworkCache::Statistics::recordNotUsingCacheForRequest):
        (WebKit::NetworkCache::storeDecisionToDiagnosticKey):
        (WebKit::NetworkCache::Statistics::recordRetrievalFailure):
        (WebKit::NetworkCache::cachedEntryReuseFailureToDiagnosticKey):
        (WebKit::NetworkCache::Statistics::recordRetrievedCachedEntry):
        (WebKit::NetworkCache::Statistics::markAsRequested):
        (WebKit::NetworkCache::Statistics::writeTimerFired):
        (WebKit::NetworkCache::Statistics::queryWasEverRequested):
        (WebKit::NetworkCache::Statistics::clear):
        (WebKit::NetworkCache::Statistics::addHashesToDatabase):
        (WebKit::NetworkCache::Statistics::addStoreDecisionsToDatabase):
        * NetworkProcess/cache/NetworkCacheStatistics.h:
        (WebKit::NetworkCache::Statistics::serialBackgroundIOQueue):
        * WebKit2.xcodeproj/project.pbxproj:

2015-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Safari clears selection when its window gets activated via mouse down
        https://bugs.webkit.org/show_bug.cgi?id=143157

        Reviewed by Anders Carlsson.

        The bug was caused by PlatformMouseEvent created in WebKit2 not having its event number
        even though we were correctly calling setActivationEventNumber in WebPage::acceptsFirstMouse.

        Fixed the bug by storing [NSEvent eventNumber] in WebMouseEvent on Mac in WebKit2 as done in WebKit1.

        * Shared/WebEvent.h:
        (WebKit::WebMouseEvent::eventNumber):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::WebMouseEvent):
        (WebKit::WebMouseEvent::encode):
        (WebKit::WebMouseEvent::decode):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebMouseEvent):

2015-03-27  Anders Carlsson  <andersca@apple.com>

        Only do the Connection::setShouldCloseConnectionOnMachExceptions() hack where necessary
        https://bugs.webkit.org/show_bug.cgi?id=143141
        rdar://problem/19471284

        Reviewed by Andreas Kling.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::platformInitialize):
        (IPC::Connection::open):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):

2015-03-27  Tim Horton  <timothy_horton@apple.com>

        Implement iOS WebKit2 PDF Find-in-Page
        https://bugs.webkit.org/show_bug.cgi?id=143065
        <rdar://problem/16793370>

        Reviewed by Dan Bernstein.

        * Platform/spi/ios/CorePDFSPI.h:
        Add some SPI.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _countStringMatches:options:maxCount:]):
        (-[WKWebView _findString:options:maxCount:]):
        (-[WKWebView _hideFindUI]):
        If we have a custom content view, forward find-in-page methods to it.
        
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKFindOptions.h:
        Move _WKFindOptions into its own file.

        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        Add find-related methods to the WKWebViewContentProvider protocol.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_initWithFrame:webView:]):
        (-[WKPDFView dealloc]):
        Maintain a dispatch queue for searching the PDF.

        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):
        Fix a type.

        (-[WKPDFView _ensureViewForPage:]):
        Split the code to create/parent a page view out from _revalidateViews,
        so that the find code can create/parent the targetted UIPDFPageView
        in order to install the find highlight in it, but before it is scrolled into view.

        (-[WKPDFView _revalidateViews]):
        Use the stored page index instead of counting again.
        Don't unparent page views that have find-in-page highlights in them, because
        we won't know enough to recreate them later.

        (-[WKPDFView _computePageAndDocumentFrames]):
        Put the page index in PDFPageInfo, for reference elsewhere.

        (-[WKPDFView _stringCompareOptionsFromWKFindOptions:]):
        (-[WKPDFView _computeMatchesForString:options:maxCount:completionHandler:]):
        Asynchronously (and on our serial queue) search the PDF for the given string.
        We'll cache the most recent results to avoid searching more than once,
        cancel existing searches when another begins (since it's a serial queue,
        this ensures we'll only have one search active at a time).

        (-[WKPDFView web_countStringMatches:options:maxCount:]):
        Count the number of matches for the given string, and inform the FindClient
        of the result.

        (-[WKPDFView _didFindMatch:]):
        When we find a match, create a view for it, highlight the match, and
        zoom so that it's in-view.

        (-[WKPDFView web_findString:options:maxCount:]):
        Incrementally search the document for the given string. We do an incremental
        search even if we have all of the results so that we can anchor the search
        in the right place if the new string is a prefix of the old string, etc.
        Wrap around appropriately when searching past the beginning or end of the
        document. If we have all of the results (there were less than maxCount results),
        look through the cached matches for the incrementally-found result and
        report its index to the client.

        (-[WKPDFView web_hideFindUI]):
        Dismiss the selection and clear some state so we start the next search afresh.

        * WebKit2.xcodeproj/project.pbxproj:

2015-03-27  Andreas Kling  <akling@apple.com>

        WebProcessProxy should not retain WebBackForwardListItems forever.
        <https://webkit.org/b/143152>
        <rdar://problem/19925709>

        Reviewed by Anders Carlsson.

        Have WebProcessProxy actually forget about a WebBackForwardListItem after it's removed from
        the WebBackForwardList.

        This ensures that we don't accumulate too many of these objects, which can get quite large
        due to the session state encoded in them.

        We already have graceful handling of the case where an incoming IPC message references
        a removed back/forward list item.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::didRemoveItem):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::backForwardRemovedItem):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeBackForwardItem):
        * UIProcess/WebProcessProxy.h:

2015-03-27  Simon Fraser  <simon.fraser@apple.com>

        Use the correct timebase to log scrollperf blank pixel counts on iOS
        https://bugs.webkit.org/show_bug.cgi?id=143149

        Reviewed by Tim Horton.
        
        MobileSafari and WebKit need to collect scrollperf data using the same timebase;
        MobileSafari can't call WTF::monotonicallyIncreasingTime(), so use CFAbsoluteTimeGetCurrent()
        everywhere.

        * UIProcess/Cocoa/RemoteLayerTreeScrollingPerformanceData.mm:
        (WebKit::RemoteLayerTreeScrollingPerformanceData::appendBlankPixelCount):

2015-03-27  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Rename requestNeedsRevalidation() to requestRequiresRevalidation()
        https://bugs.webkit.org/show_bug.cgi?id=143137

        Reviewed by Antti Koivisto.

        Rename requestNeedsRevalidation() to requestRequiresRevalidation() as I
        think it is more accurate. It is not the request that needs revalidating.
        The requests just requires us to revalidate the response.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::requestRequiresRevalidation):
        (WebKit::NetworkCache::canUse):
        (WebKit::NetworkCache::requestNeedsRevalidation): Deleted.

2015-03-27  Oliver Hunt  <oliver@apple.com>

        Forward additional CFNetwork ATS information to child processes
        https://bugs.webkit.org/show_bug.cgi?id=143136

        Reviewed by Anders Carlsson.

        Add additional process creation parameter information, and pass it
        to the child processes that actually use CFNetwork.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2015-03-27  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] We only cache responses with status codes that are cacheable by default
        https://bugs.webkit.org/show_bug.cgi?id=143125
        <rdar://problem/20321172>

        Reviewed by Antti Koivisto.

        We Previously only cached responses with status codes that are cacheable
        by default [1]. However, RFC 7234 [2] allows us to cache responses with
        other status codes, as long as they have explicit headers allowing
        caching:
        - 'Expires' header field
        - 'max-age' response directive

        This patch updates our caching policy accordingly to improve efficiency.

        [1] http://tools.ietf.org/html/rfc7231#page-48
        [2] http://tools.ietf.org/html/rfc7234#section-4.3.2

        Test: http/tests/cache/disk-cache/disk-cache-307-status-code.html

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::canStore):

2015-03-26  Antti Koivisto  <antti@apple.com>

        Respect cache-control directives in request
        https://bugs.webkit.org/show_bug.cgi?id=143121
        rdar://problem/19714040

        Reviewed by Chris Dumez.

        Better support for https://tools.ietf.org/html/rfc7234#section-5.2.1

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::canUse):

            Consider requests with Cache-control: no-cache and max-age=0 expired.

        (WebKit::NetworkCache::canStore):

            Don't store requests with Cache-control: no-store.

        (WebKit::NetworkCache::Cache::store):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:
        (WebKit::NetworkCache::storeDecisionToDiagnosticKey):

2015-03-25  Jon Honeycutt  <jhoneycutt@apple.com>

        iOS file upload panel menu items need icons
        <https://bugs.webkit.org/show_bug.cgi?id=143042>
        <rdar://problem/20178678>

        Reviewed by Andy Estes.

        * Platform/spi/ios/UIKitSPI.h:
        Declare new SPI methods _UIImageGetWebKitTakePhotoOrVideoIcon and
        _UIImageGetWebKitPhotoLibraryIcon().

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (photoLibraryIcon):
        (cameraIcon):
        If UIKit SPI exists, use it. Otherwise, return nil.

        (-[WKFileUploadPanel _showDocumentPickerMenu]):
        Use icons.

2015-03-26  Enrica Casucci  <enrica@apple.com>

        OS X build fix after r182037.

        Unreviewed.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _addFontPanelObserver]):
        (-[WKView removeWindowObservers]):
        (-[WKView observeValueForKeyPath:ofObject:change:context:]):

2015-03-26  Enrica Casucci  <enrica@apple.com>

        iOS build fix after r182037.

        Unreviewed.

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

2015-03-26  Enrica Casucci  <enrica@apple.com>

        REGRESSION(r1807689): Slower startup time for WKWebView.
        https://bugs.webkit.org/show_bug.cgi?id=143115
        rdar://problem/20233711

        Reviewed by Anders Carlsson.

        In http://trac.webkit.org/changeset/180768 we added an observer to
        track visibility of the NSFontPanel to ensure we could fetch the font
        information for the current selection when the panel first becomes visible.
        It turns out that adding the observer requires the shared font panel
        object to be created.
        That is apparently a very expensive operation that is regressing
        the initialization time for the WKWebView.
        We should initialize the NSFontPanel lazily, only when we make the entire
        view editable.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setEditable:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView _addFontPanelObserver]):
        (-[WKView removeWindowObservers]):
        (-[WKView observeValueForKeyPath:ofObject:change:context:]):
        * UIProcess/API/mac/WKViewInternal.h:

2015-03-26  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=143112

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:

2015-03-26  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Add private API to override the network disk cache size
        https://bugs.webkit.org/show_bug.cgi?id=143113
        <rdar://problem/20315669>

        Reviewed by Antti Koivisto.

        Add private API to let the client override the network disk cache size.
        By default, the network disk cache is automatically determined based on
        the CacheModel and the available disk space. However, for testing
        purposes, it can be used for the client-side to be able to override
        the disk cache size.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::setMaximumSize):
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformSetCacheModel):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::copy):
        * UIProcess/API/APIProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration diskCacheSizeOverride]):
        (-[_WKProcessPoolConfiguration setDiskCacheSizeOverride:]):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::ensureNetworkProcess):
        * UIProcess/WebProcessPool.h:

2015-03-26  Andreas Kling  <akling@apple.com>

        [Darwin] Boost the web process QoS level while handling a synchronous IPC message.
        <https://webkit.org/b/142988>
        <rdar://problem/20264346>

        Reviewed by Antti Koivisto and Anders Carlsson.

        Add a mechanism for IPC::Connection to boost the main thread for the duration
        of processing a synchronous message.

        This fixes an issue where the UI process would block on a synchronous request
        to the web process that was being carried out at a lower QoS level.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection): Save the main thread's pthread_t while we have
        a chance to retreive it.

        (IPC::Connection::processIncomingMessage): Optionally boost the main thread when
        processing an incoming message with the IsSyncMessage flag set.

        * Platform/IPC/Connection.h:
        (IPC::Connection::setShouldBoostMainThreadOnSyncMessage): Added. When this mode is
        enabled, Connection will give a temporary QoS override to the main thread when
        receiving a synchronous message. Ownership of the override is handed to the
        MessageDecoder, which resets the main thread QoS in its destructor.

        * Platform/IPC/MessageDecoder.cpp:
        (IPC::MessageDecoder::~MessageDecoder): Remove any QoS override owned by this message.

        * Platform/IPC/MessageDecoder.h:
        (IPC::MessageDecoder::setQOSClassOverride): Added. Takes ownership of a QoS override
        to make sure it stays in effect until this message has been dispatched.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection): Set up main thread QoS boosting for the
        web process's connection to the UI process.

2015-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        Cursor doesn't change back to pointer when leaving Mail
        https://bugs.webkit.org/show_bug.cgi?id=132038

        Reviewed by Anders Carlsson.

        Fixed the bug by adding a cursor rect and making the primary tracking area update the cursor so that
        AppKit will reset the cursor as it leaves the WebView.

        We use nil cursor here since we manually update the cursor by calling [NSCursor set].

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::recommendedScrollbarStyleDidChange):

2015-03-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Linux] SeccompFilters: improve the port-agnostic whitelist
        https://bugs.webkit.org/show_bug.cgi?id=140064

        Reviewed by Žan Doberšek.

        Allow the web process to access several files and directories that it
        was previously prohibited from accessing. This makes the web process
        much less likely to break.

        * Shared/linux/SeccompFilters/SyscallPolicy.cpp:
        (WebKit::SyscallPolicy::addDefaultWebProcessPolicy):

2015-03-26  Antti Koivisto  <antti@apple.com>

        Remove unneeded isConditionalRequest check from NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=143096

        Reviewed by Anders Carlsson.

        This check is leftover from implementation that allowed disk cache to validate conditional
        request itself. The case can't happen as NetworkCache canRetrieve test does not allow
        conditional requests in the first place.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        (WebKit::isConditionalRequest): Deleted.

2015-03-26  Antti Koivisto  <antti@apple.com>

        Rename Storage::Entry to Storage::Record
        https://bugs.webkit.org/show_bug.cgi?id=143101

        Reviewed by Chris Dumez.

        Lets have just one type called Entry in the cache code.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::update):
        (WebKit::NetworkCache::Cache::traverse):
        (WebKit::NetworkCache::Cache::dumpContentsToFile):
        * NetworkProcess/cache/NetworkCacheEntry.cpp:
        (WebKit::NetworkCache::Entry::Entry):
        (WebKit::NetworkCache::Entry::encodeAsStorageRecord):
        (WebKit::NetworkCache::Entry::decodeStorageRecord):
        (WebKit::NetworkCache::Entry::initializeBufferFromStorageRecord):
        (WebKit::NetworkCache::Entry::buffer):
        (WebKit::NetworkCache::Entry::shareableResourceHandle):
        (WebKit::NetworkCache::Entry::encode): Deleted.
        (WebKit::NetworkCache::Entry::decode): Deleted.
        (WebKit::NetworkCache::Entry::initializeBufferFromStorageEntry): Deleted.
        * NetworkProcess/cache/NetworkCacheEntry.h:
        (WebKit::NetworkCache::Entry::sourceStorageRecord):
        (WebKit::NetworkCache::Entry::sourceStorageEntry): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::RecordMetaData::RecordMetaData):
        (WebKit::NetworkCache::decodeRecordMetaData):
        (WebKit::NetworkCache::decodeRecordHeader):
        (WebKit::NetworkCache::decodeRecord):
        (WebKit::NetworkCache::encodeRecordMetaData):
        (WebKit::NetworkCache::encodeRecordHeader):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::retrieveFromMemory):
        (WebKit::NetworkCache::Storage::store):
        (WebKit::NetworkCache::Storage::update):
        (WebKit::NetworkCache::Storage::traverse):
        (WebKit::NetworkCache::Storage::dispatchPendingWriteOperations):
        (WebKit::NetworkCache::Storage::dispatchFullWriteOperation):
        (WebKit::NetworkCache::Storage::dispatchHeaderWriteOperation):
        (WebKit::NetworkCache::EntryMetaData::EntryMetaData): Deleted.
        (WebKit::NetworkCache::decodeEntryMetaData): Deleted.
        (WebKit::NetworkCache::decodeEntryHeader): Deleted.
        (WebKit::NetworkCache::decodeEntry): Deleted.
        (WebKit::NetworkCache::encodeEntryMetaData): Deleted.
        (WebKit::NetworkCache::encodeEntryHeader): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:

2015-03-26  Chris Dumez  <cdumez@apple.com>

        [WK2] Let the compiler generate the NetworkCache::Key move constructor
        https://bugs.webkit.org/show_bug.cgi?id=143079

        Reviewed by Antti Koivisto.

        Let the compiler generate the NetworkCache::Key move constructor. The
        generated one will do exactly the same thing as the one we had except
        that it will move the m_hash member as well. I don't see any reason why
        we weren't moving this member before (it is an std::array<uint8_t, 16>).

        Also have the compiler generate a move assignment operator for
        consistency. Although it is not currently useful, it could be at some
        point.

        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCache::Key::Key): Deleted.
        * NetworkProcess/cache/NetworkCacheKey.h:

2015-03-26  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Compute if a cached response has expired only when actually needed
        https://bugs.webkit.org/show_bug.cgi?id=143070

        Reviewed by Antti Koivisto.

        Compute if a cached response has expired only when actually needed:
        - This is not a history navigation
        and
        - It does not have "Cache-Control: no-cache" header

        Previously, we would always determine if the response has expired and
        we often end up not using this information.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::responseHasExpired):
        (WebKit::NetworkCache::canUse):

2015-03-26  Zan Dobersek  <zdobersek@igalia.com>

        Avoid the Vector<> copy in WebTouchEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=143043

        Reviewed by Carlos Garcia Campos.

        Have the WebTouchEvent accept a Vector<> rvalue.
        The relevant code is updated so the Vector<> object is moved
        through the call chain and finally into the WebTouchEvent constructor.

        * Shared/NativeWebTouchEvent.h:
        * Shared/WebEvent.h:
        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::WebTouchEvent):
        * Shared/efl/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/gtk/NativeWebTouchEventGtk.cpp:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/gtk/WebEventFactory.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseTouchEvent):

2015-03-25  Chris Dumez  <cdumez@apple.com>

        [WK2] WebFrameLoaderClient::dispatchDecidePolicyForResponse() should always call the FramePolicyFunction
        https://bugs.webkit.org/show_bug.cgi?id=143036
        <rdar://problem/20252438>
        <rdar://problem/13811738>

        Reviewed by Alexey Proskuryakov.

        WebFrameLoaderClient::dispatchDecidePolicyForResponse() should always
        call the FramePolicyFunction. Previously, it would fail to do in 2
        cases:
        - m_frame->page() returns null
        or
        - webPage->sendSync() returns false

        If the FramePolicyFunction is not called, we will fail to clear the
        callback in the PolicyChecker and
        DocumentLoader::continueAfterContentPolicy() will not be called.

        DocumentLoader::continueAfterContentPolicy() is in charge of resetting
        m_waitingForContentPolicy flag to false. This could therefore explain
        the following assertion being hit in DocumentLoader::detachFromFrame()
        (see <rdar://problem/20252438>):
        RELEASE_ASSERT(!m_waitingForContentPolicy)

        Also, as the PolicyChecker callback is not cleared, it could make it
        possible for DocumentLoader::continueAfterContentPolicy() to be called
        *after* the load is finished, when later canceling the PolicyCallback:
        FrameLoader::stopAllLoaders()
         -> PolicyChecker::stopCheck()
          -> PolicyCallback::cancel()
           -> DocumentLoader::continueAfterContentPolicy(PolicyIgnore)

        Calling continueAfterContentPolicy(PolicyIgnore) after the load is
        finished would be bad and could explain some of the crashes we've seen
        in DocumentLoader::continueAfterContentPolicy() ->
        DocumentLoader:: stopLoadingForPolicyChange() (see
        <rdar://problem/13811738>).

        This patch also applies the same fix to
        dispatchDecidePolicyForNewWindowAction() and
        dispatchDecidePolicyForNavigationAction() as they use the same pattern.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2015-03-25  Tim Horton  <timothy_horton@apple.com>

        Add a preference to prevent "user-scalable=no" from having any effect
        https://bugs.webkit.org/show_bug.cgi?id=143032

        Reviewed by Sam Weinig.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Add a preference and push it to the ViewportConfiguration.

2015-03-25  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r181660): Force click url preview doesn't have a TextIndicator in Mail
        https://bugs.webkit.org/show_bug.cgi?id=143064
        -and corresponding-
        rdar://problem/20251440

        Reviewed by Tim Horton.

        The TextIndicator was getting set to nil by the call to 
        _dismissContentRelativeChildWindows in mouseDown. That line of code was added by 
        http://trac.webkit.org/changeset/177242 to work around a bug in another component 
        that has now been resolved, so it no longer appears to be necessary. 

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseDown:]):

2015-03-25  Anders Carlsson  <andersca@apple.com>

        Add network and application cache directories to WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=143063

        Reviewed by Sam Weinig.

        Create a WebKit directory under ~/Library/Caches/<Bundle ID> for non-sandboxed applications,
        and ~/Library/Caches for sandboxed applications. Create NetworkCache and OfflineWebApplicationCache
        subdirectories. These directories will be used with the modern WebKit API.

        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::cacheDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2015-03-25  Sam Weinig  <sam@webkit.org>

        Address additional review feedback from https://bugs.webkit.org/show_bug.cgi?id=143059.

        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::WebCompiledContentExtension::createFromCompiledContentExtensionData):
        * UIProcess/API/C/WKUserContentFilterRef.cpp:
        (WKUserContentFilterCreate):
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter initWithName:serializedRules:]):

2015-03-25  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Convert content extension compiling to return error codes and write its output using a client
        https://bugs.webkit.org/show_bug.cgi?id=143059

        Reviewed by Alex Christensen.

        * Shared/WebCompiledContentExtension.cpp:
        * Shared/WebCompiledContentExtension.h:
        (WebKit::LegacyContentExtensionCompilationClient::LegacyContentExtensionCompilationClient):
        (WebKit::LegacyContentExtensionCompilationClient::writeBytecode):
        (WebKit::LegacyContentExtensionCompilationClient::writeActions):
        Add subclass of ContentExtensionCompilationClient for use with the non-file backed content
        extensions.

        * UIProcess/API/C/WKUserContentFilterRef.cpp:
        (WKUserContentFilterCreate):
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter initWithName:serializedRules:]):
        Update to use the new interface of compileRuleList().

2015-03-25  Ryosuke Niwa  <rniwa@webkit.org>

        Web Inspector: Switching tabs to window with inspector open prohibits typing into console
        https://bugs.webkit.org/show_bug.cgi?id=126800

        Reviewed by Anders Carlsson.

        This is a regression from r85356 and r83814. These two patches made WKWebView clear its selection
        when WKView resigns the first responder without ever restoring it even if WKView later becomes
        the first responder again. This is problematic when a text field or a editing host element had been
        focused and selected prior to the resignation since the editing code uses the selection to determine
        the editability of the element.

        Fixed the bug by restoring selection in [WKView becomeFirstResponder] if the selection is empty.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView becomeFirstResponder]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::restoreSelectionInFocusedEditableElement):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreSelectionInFocusedEditableElement):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-03-25  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r181660): Safari navigates to link after a starting and canceling a 
        force preview
        https://bugs.webkit.org/show_bug.cgi?id=143057
        -and corresponding-
        rdar://problem/20251436

        Reviewed by Tim Horton.

        Always call _page->immediateActionDidUpdate() so that the EventHandler’s 
        ImmediateActionStage is appropriately updated.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController immediateActionRecognizerDidUpdateAnimation:]):

        Update the EventHandler’s ImmediateActionStage.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::immediateActionDidUpdate):

2015-03-25  Antti Koivisto  <antti@apple.com>

        Separate entry decoding from validation
        https://bugs.webkit.org/show_bug.cgi?id=143052

        Reviewed by Chris Dumez.

        Make NetworkCache::Cache a class and move it to a file of its own.
        Move the encoding/decoding code there.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        (WebKit::clearDiskCacheEntries):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::sendReplyToSynchronousRequest):
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::sendBufferMaybeAborting):
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry):
        (WebKit::NetworkResourceLoader::validateCacheEntry):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::collectVaryingRequestHeaders):
        (WebKit::NetworkCache::canUse):

            Focused function for deciding if we can use a cache entry and if it needs validation.

        (WebKit::NetworkCache::Cache::retrieve):
        (WebKit::NetworkCache::Cache::store):
        (WebKit::NetworkCache::Cache::update):
        (WebKit::NetworkCache::Cache::traverse):
        (WebKit::NetworkCache::encodeStorageEntry): Deleted.
        (WebKit::NetworkCache::decodeStorageEntry): Deleted.
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheEntry.cpp: Added.
        (WebKit::NetworkCache::Entry::Entry):
        (WebKit::NetworkCache::Entry::encode):
        (WebKit::NetworkCache::Entry::decode):
        (WebKit::NetworkCache::Entry::initializeBufferFromStorageEntry):
        (WebKit::NetworkCache::Entry::buffer):
        (WebKit::NetworkCache::Entry::shareableResourceHandle):
        (WebKit::NetworkCache::Entry::needsValidation):
        (WebKit::NetworkCache::Entry::setNeedsValidation):
        * NetworkProcess/cache/NetworkCacheEntry.h: Added.
        (WebKit::NetworkCache::Entry::key):
        (WebKit::NetworkCache::Entry::timeStamp):
        (WebKit::NetworkCache::Entry::response):
        (WebKit::NetworkCache::Entry::varyingRequestHeaders):
        (WebKit::NetworkCache::Entry::sourceStorageEntry):
        * NetworkProcess/cache/NetworkCacheStatistics.h:
        * NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:
        (WebKit::NetworkCache::cachedEntryReuseFailureToDiagnosticKey):
        (WebKit::NetworkCache::Statistics::recordRetrievedCachedEntry):
        * WebKit2.xcodeproj/project.pbxproj:

2015-03-25  David Hyatt  <hyatt@apple.com>

        Add a pref to enable the new block-inside-inline model
        https://bugs.webkit.org/show_bug.cgi?id=143050

        Reviewed by Sam Weinig.

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

2015-03-25  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] WebUserMediaClient::pageDestroyed() virtual method should be marked as override
        https://bugs.webkit.org/show_bug.cgi?id=143046

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebCoreSupport/WebUserMediaClient.h: Mark the WebUserMediaClient::pageDestroyed()
        method, inherited from the WebCore::UserMediaClient, as an override.

2015-03-25  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] WebPageProxy::failedToShowPopupMenu() virtual method should be marked as override
        https://bugs.webkit.org/show_bug.cgi?id=143045

        Reviewed by Carlos Garcia Campos.

        * UIProcess/WebPageProxy.h: Mark the failedToShowPopupMenu(), inherited from
        the WebPopupMenuProxy::Client class, as overridden.

2015-03-25  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Clean up DrawingAreaImpl vtable overrides
        https://bugs.webkit.org/show_bug.cgi?id=143044

        Reviewed by Carlos Garcia Campos.

        Declare virtual methods of the DrawingAreaImpl class as overridden where necessary.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        (WebKit::DrawingAreaImpl::layerTreeStateIsFrozen): Deleted.
        (WebKit::DrawingAreaImpl::layerTreeHost): Deleted.

2015-03-24  Ryosuke Niwa  <rniwa@webkit.org>

        Inspector doesn't get focused when opened in dock mode
        https://bugs.webkit.org/show_bug.cgi?id=143030

        Reviewed by Anders Carlsson.

        The bug was caused by platformBringToFront and platformAttach calling makeFirstResponder on WKWebView,
        which aren't intended to become the first responder. Fixed the bug by calling makeFirstResponder on the WKView
        subview of the WKWebView, which is intended to be used as the first responder on behalf of the web view.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformBringToFront):
        (WebKit::WebInspectorProxy::platformAttach):

2015-03-24  Chris Dumez  <cdumez@apple.com>

        [WK2] Responses with 302 HTTP Status Code should not be cached
        https://bugs.webkit.org/show_bug.cgi?id=143028
        <rdar://problem/19714040>

        Reviewed by Antti Koivisto.

        Responses with 302 HTTP Status Code should not be cached as per
        RFC 7231:
        http://tools.ietf.org/html/rfc7231#section-6.1

        This patch updates our disk cache policy accordingly.

        Test: http/tests/cache/disk-cache/disk-cache-302-status-code.html

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::canStore):

2015-03-24  Anders Carlsson  <andersca@apple.com>

        Fix crash in WebKit::RemoteObjectRegistry::sendInvocation
        https://bugs.webkit.org/show_bug.cgi?id=143027
        rdar://problem/20208674

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController dealloc]):
        Make sure to invalidate the _WKRemoteObjectRegistry like we do in the UI process.

2015-03-24  Chris Dumez  <cdumez@apple.com>

        [WK2] Responses with 204 HTTP Status Code should be cacheable by default
        https://bugs.webkit.org/show_bug.cgi?id=143020
        <rdar://problem/20281529>

        Reviewed by Antti Koivisto.

        Make responses with 204 HTTP Status Code cacheable by default, as
        per RFC 7231:
        http://tools.ietf.org/html/rfc7231#section-6.3.5

        Test: http/tests/cache/disk-cache/disk-cache-204-status-code.html

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::canStore):

2015-03-24  Enrica Casucci  <enrica@apple.com>

        [iOS] Remove unused keyboard code in WKSelectPopover class.
        https://bugs.webkit.org/show_bug.cgi?id=143021

        Reviewed by Joseph Pecoraro.

        WKSelectPopover created an instance of UIKeyboard that was
        initialized in initWithView but never used. Removing the
        obsolete code.

        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]):

2015-03-24  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/20282863> Transforms are flattened in snapshots of on-screen WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=143023

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]): If the view is in a
        window, use CARenderServerRenderLayerWithTransform to synchronously capture a snapshot of
        its layer tree into an IOSurfcae, then call the completion handler with an image created
        from the IOSurface.

2015-03-24  Beth Dakin  <bdakin@apple.com>

        Add events related to force click gesture
        https://bugs.webkit.org/show_bug.cgi?id=142836
        -and corresponding-
        rdar://problem/20210239

        Reviewed by Dean Jackson.

        ActionMenuHitTestResult has a new bool indicating whether to not the HitTestResult 
        will prevent default. 
        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):

        Send immediateActionDidUpdate and the normalized force over the the WebProcess.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::immediateActionDidUpdate):
        * UIProcess/WebPageProxy.h:

        We need a dummy animation controller when web content is overriding the default 
        behavior.
        * UIProcess/mac/WKImmediateActionController.mm:

        Send along the update information.
        (-[WKImmediateActionController immediateActionRecognizerDidUpdateAnimation:]):

        Use the dummy animation controller if default has been prevented.
        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController _updateImmediateActionItem]):

        Keep track of whether m_lastActionMenuHitTes prevented the default immediate 
        action behavior.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Call dispatchMouseForceMayBegin() at hit test time.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):

        Call dispatchMouseForceChanged() if appropriate.
        (WebKit::WebPage::immediateActionDidUpdate):

        Call dispatchMouseForceCancelled() if appropriate.
        (WebKit::WebPage::immediateActionDidCancel):

        Call dispatchMouseForceDown() if appropriate.
        (WebKit::WebPage::immediateActionDidComplete):

2015-03-24  Anders Carlsson  <andersca@apple.com>

        Fix designated initializer violations
        https://bugs.webkit.org/show_bug.cgi?id=143016
        rdar://problem/20268858

        Reviewed by Dan Bernstein.

        Move -[WKProcessPool _initWithConfiguration:] to a class extension so we can make it the designated initializer.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _initWithConfiguration:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

2015-03-24  Chris Dumez  <cdumez@apple.com>

        [WK2] Responses with 404 HTTP Status Code should be cacheable by default
        https://bugs.webkit.org/show_bug.cgi?id=143014
        <rdar://problem/20280310>

        Reviewed by Antti Koivisto.

        Make responses with 404 HTTP Status Code cacheable by default, as
        per RFC 7231:
        http://tools.ietf.org/html/rfc7231#section-6.5.4

        Test: http/tests/cache/disk-cache/disk-cache-404-status-code.html

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::canStore):

2015-03-24  Chris Dumez  <cdumez@apple.com>

        [WK2] Remove NetworkCache FIXME comment about caching responses to OPTIONS requests
        https://bugs.webkit.org/show_bug.cgi?id=143009

        Reviewed by Andreas Kling.

        Remove NetworkCache FIXME comment about caching responses to OPTIONS
        method as RFC 7234 says "Responses to the OPTIONS method are not
        cacheable" [1].

        [1] http://tools.ietf.org/html/rfc7231#page-31

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::canRetrieve):

2015-03-24  Chris Dumez  <cdumez@apple.com>

        [WK2] NetworkCache retrievals fail for entries with no body
        https://bugs.webkit.org/show_bug.cgi?id=142979
        <rdar://problem/20264100>

        Reviewed by Antti Koivisto.

        NetworkCache retrievals were failing for entries with no body because
        decodeEntry() doesn't correctly handle this case. In particular, the
        following check fails:
        "metaData.bodyOffset + metaData.bodySize == fileData.size()".
        This is because bodyOffset is pageSize-aligned.

        As a result, the following resource on apple.com is stored in the cache
        but we fail to reuse it and reload it from the network every time:
        http://images.apple.com/home/styles/promos.css

        This patch updates decodeEntry() to create a null Data object for the
        body if bodySize is 0.

        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::data):
        Do not attempt to initialize m_data if m_dispatchData is null as the
        call to dispatch_data_create_map() would then crash. We now return
        null in this case. This is needed as decodeStorageEntry() in
        NetworkCache.cpp constructs a SharedBuffer from
        storageEntry.body.data() and the body may be null.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::decodeEntry):

2015-03-24  Chris Dumez  <cdumez@apple.com>

        [WK2] The WebKit network cache does not cache responses with "Content-Disposition: attachment" header
        https://bugs.webkit.org/show_bug.cgi?id=142989
        <rdar://problem/20265992>

        Reviewed by Antti Koivisto.

        Update our WebKit network cache policy to cache responses with
        "Content-Disposition: attachment" header. There is no reason we cannot
        cache these and our memory cache already does.

        This was causing a decent amount of cache misses in the wild. I have
        noticed for example that when loading disney.com, we fail to cache the
        following resources because of this policy:
        http://pagead2.googlesyndication.com/pagead/osd.js
        http://pagead2.googlesyndication.com/pagead/show_companion_ad.js

        Those resources have Cache-Control headers that indicate they are meant
        to be cacheable.

        Test: http/tests/cache/disk-cache-validation-attachment.html

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::canStore):

2015-03-23  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed, another attempt to fix 32-bit build after r181881.

        * UIProcess/WebInspectorProxy.h:

2015-03-23  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed, attempt to fix 32-bit build after r181881.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:

2015-03-19  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Support attaching to another view other than the WKView
        https://bugs.webkit.org/show_bug.cgi?id=142892

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorAttach): Drive by fix so it used the last attachment side.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _inspectorAttachmentView]): Added.
        (-[WKView _setInspectorAttachmentView:]): Added.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::attachAvailabilityChanged):
        Use platformCanAttach as a final check incase there is a different
        attachment view that the platform knows about.

        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::attachmentSide): Added.
        (WebKit::WebInspectorProxy::platformCanAttach): Added.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::attachmentViewDidChange): Added.
        (WebKit::WebInspectorProxy::closeTimerFired):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformCanAttach):
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        Use the _inspectorAttachmentView and change how the frame change notification
        is observed and follow the attachment view as it changes.

2015-03-23  Tim Horton  <timothy_horton@apple.com>

        Images shared to photos via action menu are padded with zeroes at the end
        https://bugs.webkit.org/show_bug.cgi?id=142985

        Reviewed by Anders Carlsson.

        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Send the size of the image separately from the SharedMemory.
        The SharedMemory's size can be rounded up, so we need to keep the original
        size around in order to write the data to disk.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _hitTestResultImage]):
        (-[WKActionMenuController _addImageToPhotos:]):
        Use the image size instead of the SharedMemory size.

2015-03-23  Enrica Casucci  <enrica@apple.com>

        [iOS] WebContent crash attempting to select text with a gesture at RenderObject::absoluteBoundingBoxRect.
        https://bugs.webkit.org/show_bug.cgi?id=142913
        rdar://problem/16400033

        Reviewed by Sam Weinig.

        When looking for the best candidate range at the given position,
        we should skip nodes that don't have a renderer.
        This is a speculative fix.

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

2015-03-23  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (Yosemite): WKView visibility notifications are messed up
        https://bugs.webkit.org/show_bug.cgi?id=142945

        Reviewed by Tim Horton.

        As these notifications cannot be used by NSView subclasses, create a separate
        object for observing them.

        * UIProcess/API/mac/WKView.mm:
        (-[WKWindowVisibilityObserver initWithView:]):
        (-[WKWindowVisibilityObserver startObserving:]):
        (-[WKWindowVisibilityObserver stopObserving:]):
        (-[WKWindowVisibilityObserver _windowDidOrderOnScreen:]):
        (-[WKWindowVisibilityObserver _windowDidOrderOffScreen:]):
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]): Also, don't try to remove NSWindowWillOrderOffScreenNotification,
        which we never start to observe.
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        * UIProcess/API/mac/WKViewInternal.h:

2015-03-23  Anders Carlsson  <andersca@apple.com>

        Make platform/mac-wk2/plugins/destroy-during-async-npp-new.html work again.
        https://bugs.webkit.org/show_bug.cgi?id=133692
        rdar://problem/17255947

        Reviewed by Alexey Proskuryakov.

        Add plug-in destruction protectors around message receiver code that can call out to NPObjects or JavaScript
        where we need the plug-in to stay around after the call.

        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        (WebKit::NPObjectMessageReceiver::invoke):
        (WebKit::NPObjectMessageReceiver::invokeDefault):
        (WebKit::NPObjectMessageReceiver::getProperty):
        (WebKit::NPObjectMessageReceiver::setProperty):
        (WebKit::NPObjectMessageReceiver::construct):

2015-03-23  Anders Carlsson  <andersca@apple.com>

        Put the WK_NULLABLE_SPECIFIER in the right place for block parameters
        https://bugs.webkit.org/show_bug.cgi?id=142975
        rdar://problem/19863930

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKWebView.h:

2015-03-23  Tim Horton  <timothy_horton@apple.com>

        Add a share item to the link action menu
        https://bugs.webkit.org/show_bug.cgi?id=142961
        <rdar://problem/19198374>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _hitLinkURL]):
        Factor out _hitLinkURL from various places.

        (-[WKActionMenuController _openURLFromActionMenu:]):
        (-[WKActionMenuController _addToReadingListFromActionMenu:]):
        (-[WKActionMenuController _defaultMenuItemsForVideo]):
        (-[WKActionMenuController _defaultMenuItemsForImage]):
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        (-[WKActionMenuController _createShareActionMenuItemForTag:withItems:]):
        Adopt -[NSMenuItem standardShareMenuItemWithItems].
        All of the null-checking is unnecessary as it's impossible to enter
        these functions with a null image/etc.

        (-[WKActionMenuController _defaultMenuItemsForLink]):
        * Shared/API/c/WKActionMenuItemTypes.h:
        Add a 'Share' item to the link menu.

2015-03-23  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Use std::abs() in ClickCounter::currentClickCountForGdkButtonEvent()
        https://bugs.webkit.org/show_bug.cgi?id=142964

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (ClickCounter::currentClickCountForGdkButtonEvent): Use the STL's std::abs()
        instead of C's abs(). The templated nature of std::abs() ensures the proper
        computation that matches the types of the passed-in values, and shuts down
        a warning when compiling with Clang.

2015-03-23  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] webkitBackForwardListChanged() should operate on a Vector reference
        https://bugs.webkit.org/show_bug.cgi?id=142963

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        (webkitBackForwardListChanged): This function only reads from the passed-in
        Vector of removed items, so only a const lvalue reference to the Vector
        is needed.
        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h:

2015-03-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add a configure option to build without Redirected XComposite Window
        https://bugs.webkit.org/show_bug.cgi?id=142865

        Reviewed by Žan Doberšek.

        Use USE(REDIRECTED_XCOMPOSITE_WINDOW) instead of
        USE(TEXTURE_MAPPER_GL) && PLATFORM(X11).

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Use the XID of the WebKitWebView
        window as native surface handle when REDIRECTED_XCOMPOSITE_WINDOW
        is disabled.
        (webkitWebViewRenderAcceleratedCompositingResults):
        (resizeWebKitWebViewBaseFromAllocation):
        (webkitWebViewBaseEnterAcceleratedCompositingMode):
        (webkitWebViewBaseExitAcceleratedCompositingMode):
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        * UIProcess/gtk/RedirectedXCompositeWindow.h:

2015-03-22  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Enable WIRELESS_PLAYBACK_TARGET for WK1
        https://bugs.webkit.org/show_bug.cgi?id=142940

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::playbackTargetSelected): Argument to didChoosePlaybackTarget is now const.

2015-03-22  Anders Carlsson  <andersca@apple.com>

        _WKWebsiteDataStore should clear WebSQL databases
        https://bugs.webkit.org/show_bug.cgi?id=142947
        rdar://problem/20242174

        Reviewed by Sam Weinig.

        * Shared/WebsiteData/WebsiteDataTypes.h:
        Add WebsiteDataTypeWebSQLDatabases.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        Initialize configuration.webSQLDatabaseDirectory.

        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h:
        Add WKWebsiteDataTypeWebSQLDatabases.

        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.mm:
        (dataTypesToString):
        Handle WKWebsiteDataTypeWebSQLDatabases.

        * UIProcess/API/Cocoa/_WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        (WebKit::toWKWebsiteDataTypes):
        Handle WKWebsiteDataTypeWebSQLDatabases and WebsiteDataTypes::WebsiteDataTypeWebSQLDatabases.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        Initialize m_webSQLDatabaseDirectory and add a queue member variable.

        (WebKit::WebsiteDataStore::fetchData):
        Fetch database origins.
    
        (WebKit::WebsiteDataStore::removeData):
        Remove databases.

        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Add new members.

2015-03-22  Dan Bernstein  <mitz@apple.com>

        [iOS] Expose WebPageProxy::setInitialFocus as SPI
        https://bugs.webkit.org/show_bug.cgi?id=142951

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]): New SPI.
        Just calls through to WKWebContentView, but allows a nil completion handler.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        * UIProcess/API/mac/WKView.mm:
        (-[WKView becomeFirstResponder]): Pass an empty lambda for the new callback parameter to
        WebPageProxy::setInitialFocus.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setInitialFocus): Added a void callback parameter and made sure to
        call it.
        * UIProcess/WebPageProxy.h:

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]):
        Added. Calls WebPageProxy::setInitialFocus, and once that completes, checks if anything was
        focused and if so, becomes first responder, then calls the completion handler.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setInitialFocus): Added a callbackID parameter, and made sure to send the
        callback message. Added a temporary change of m_userIsInteracting to true, so that the UI
        process won’t ignore any StartAssistingNode message resulting from the focus change.
        * WebProcess/WebPage/WebPage.h:

        * WebProcess/WebPage/WebPage.messages.in: Added a callbackID parameter to SetInitialFocus.

2015-03-21  Dean Jackson  <dino@apple.com>

        Remove the prefix for CSS Transforms
        https://bugs.webkit.org/show_bug.cgi?id=142927
        <rdar://problem/11568151>

        Reviewed by Simon Fraser.

        Rename AnimatedPropertyWebkitTransform to AnimatedPropertyTransform.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextureMapperAnimation>::encode):

2015-03-21  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][GTK] Make WebKit2's generate-forwarding-headers.pl less verbose
        https://bugs.webkit.org/show_bug.cgi?id=142908

        Reviewed by Žan Doberšek.

        * Scripts/generate-forwarding-headers.pl:
        (createForwardingHeadersForFramework):

2015-03-21  Commit Queue  <commit-queue@webkit.org>

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

        Broke Windows build (Requested by ap on #webkit).

        Reverted changeset:

        "Remove the prefix for CSS Transforms"
        https://bugs.webkit.org/show_bug.cgi?id=142927
        http://trac.webkit.org/changeset/181824

2015-03-20  Dean Jackson  <dino@apple.com>

        Remove the prefix for CSS Transforms
        https://bugs.webkit.org/show_bug.cgi?id=142927
        <rdar://problem/11568151>

        Reviewed by Simon Fraser.

        Rename AnimatedPropertyWebkitTransform to AnimatedPropertyTransform.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextureMapperAnimation>::encode):

2015-03-20  Chris Dumez  <cdumez@apple.com>

        [WK2] NetworkCache retrievals sometimes fail on browser startup
        https://bugs.webkit.org/show_bug.cgi?id=142925
        <rdar://problem/20245368>

        Reviewed by Antti Koivisto.

        NetworkCache retrievals sometimes fail on browser startup for resources
        that are actually cached. The reason is that we are using a bloom filter
        for performance reasons to avoid unnecessary disk I/O and this bloom
        filter is populated on start up in a background thread by traversing the
        cache files on disk. However, when restoring the tabs on start-up we
        sometimes query this bloom filter before it is completely populated and
        we thus fail to retrieve cached entries because we think they don't
        exist and don't check the disk.

        This patch adds an "isPopulatingContentsFilter" flag that is turned ON
        on start up while we are populating the bloon filter. We then bypass
        the bloom filter and send queries directly to disk on start up if this
        flag is ON.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::initialize):
        (WebKit::NetworkCache::Storage::retrieve):
        (WebKit::NetworkCache::Storage::dispatchPendingWriteOperations):
        (WebKit::NetworkCache::Storage::dispatchHeaderWriteOperation):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::cacheMayContain):

2015-03-20  Chris Dumez  <cdumez@apple.com>

        [WK2] Allow stale content when restoring the browser's session state
        https://bugs.webkit.org/show_bug.cgi?id=142916
        <rdar://problem/20243493>

        Reviewed by Darin Adler.

        Allow stale content when restoring the browser's session state
        (restoring all tabs from previous session), e.g.
        - Via History > Reopen All windows from previous session on Safari
        - Happens on startup for MobileSafari

        I have verified that using "Open in tabs" on a bookmarks folder
        still does fresh loads (rdar://problem/8131355) as it is not using
        the restoreFromSessionState() code path.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::restoreFromSessionState):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goToBackForwardItem):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-03-20  Beth Dakin  <bdakin@apple.com>

        [Immediate Actions] Should re-enable immediate actions for iBooks
        https://bugs.webkit.org/show_bug.cgi?id=142915
        -and corresponding-
        rdar://problem/19585689

        Reviewed by Tim Horton.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:webView:]):

2015-03-20  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=136003

        Reviewed by Chris Dumez.

        * PlatformMac.cmake:
        Add include directories and forwarding headers.
        * Shared/API/APIObject.h:
        (API::ObjectImpl::operator new):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::intrinsicContentSizeDidChange):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        Fix some unused parameter warnings.

2015-03-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMake] Remove duplicated cmake function calls in WebKit2/CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=142901

        Reviewed by Csaba Osztrogonác.

        add_depencencies(), install() can support multiple targets or location.
        We don't need to call it twice.

        * CMakeLists.txt: Additionaly move -DBUILDING_WEBKIT to PlatformGTK.cmake,
        because it is only used by GTK port.

2015-03-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Disable accelerated compositing on Wayland
        https://bugs.webkit.org/show_bug.cgi?id=142877

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreateWebPage): As was done in the past, we should disable
        accelerated compositing on Wayland until the proper support for it lands.

2015-03-19  Andy Estes  <aestes@apple.com>

        [Content Filtering] Add tests for unblock requests
        https://bugs.webkit.org/show_bug.cgi?id=142900

        Reviewed by Andreas Kling.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrame): Called WebFrameProxy::contentFilterDidBlockLoad.
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad): Assigned a default-constructed ContentFilterUnblockHandler instead of calling clear().
        (WebKit::WebFrameProxy::didHandleContentFilterUnblockNavigation): Renamed from contentFilterDidHandleNavigationAction.
        Updated to use ContentFilterUnblockHandler's new API.
        (WebKit::WebFrameProxy::contentFilterDidHandleNavigationAction): Deleted.
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::contentFilterDidBlockLoad): Renamed from setContentFilterUnblockHandler.
        (WebKit::WebFrameProxy::setContentFilterUnblockHandler): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Called WebFrameProxy::didHandleContentFilterUnblockNavigation.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::contentFilterDidBlockLoad): If the unblock handler needs the UI process,
        send WebPageProxy::ContentFilterDidBlockLoadForFrame. Oterwise, call PolicyChecker::setContentFilterUnblockHandler.

2015-03-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Properly guard X11-specific code in BackingStore::createBackend()
        https://bugs.webkit.org/show_bug.cgi?id=142875

        Reviewed by Martin Robinson.

        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createBackend): Guard the GTK- and X11-specific
        bit of code with PLATFORM(GTK) and PLATFORM(X11). Testing GDK_WINDOWING_X11
        ensures that the GTK+ dependency has X11 support, but does not ensure
        that WebKitGTK+ has been configured to build for X11 environments (which
        is what PLATFORM(X11) ensures).

2015-03-19  Chris Dumez  <cdumez@apple.com>

        [WK2] We should allow stale content when restoring a killed / crashed WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=142893
        <rdar://problem/19633737>
        <rdar://problem/19869257>

        Reviewed by Antti Koivisto.

        Allow stale content when restoring a killed / crashed WebProcess
        (similarly to a history navigation). This is actually what was intended
        as we call WebPage::goToBackForwardItem() in this case, which uses
        IndexedBackForward load type. However, this value was then ignored in
        FrameLoader::loadDifferentDocumentItem().

        This patch gets rid of the special casing in
        FrameLoader::loadDifferentDocumentItem() and makes it clear at call
        sites when calling goToBackForwardItem() if we should allow stale
        content or not. If goToBackForwardItem() is called with the
        allowStaleContent flag off, we'll keep using the IndexedBackForward
        frame load type. However, if the flag is on, we'll use the Standard
        frame load type and do a fresh load.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        Set allowStaleContent flag to true as we want to allow stale content
        when reloading a WebProcess after it crashed or was killed (behavior
        change).

        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        Add allowStaleContent parameter so that call sites can decide which
        policy to use.

        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        Set allowStaleContent flag to true as this is our policy for history
        navigations.

        (WebKit::WebPageProxy::goToBackForwardItem):
        Add allowStaleContent parameter so that the call site can let us know
        what to do. This is useful as this is called not only for indexed
        back / forward navigations (allowing stale content) but also for
        restoring session state (forbidding state content:
        <rdar://problem/8131355>).

        (WebKit::WebPageProxy::restoreFromSessionState):
        Call goToBackForwardItem() with allowStaleContent flag set to false
        as users expect fresh contents in this case. This method is called
        when:
        - Tabs are restored on Safari / MobileSafari startup
        - Tabs are restored via "History > Reopen All windows from last session"

        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goToBackForwardItem):
        Add allowStaleContent parameter and use "Standard" frame load type
        instead of "IndexedBackForward" if it is false. This is needed as
        "IndexedBackForward" frame load type allows using stale content.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Add allowStaleContent flag to GoToBackForwardItem message.

2015-03-19  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Move MediaPlaybackTargetPicker
        https://bugs.webkit.org/show_bug.cgi?id=142889

        Move WebMediaPlaybackTargetPickerProxy to WebCore so it can be used by
        both WK2 and WK1.

        Reviewed by Tim Horton.

        * UIProcess/PageClient.h:
        * UIProcess/WebMediaPlaybackTargetPickerProxy.cpp: Removed.
        * UIProcess/WebMediaPlaybackTargetPickerProxy.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::devicePickerProxy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createPlaybackTargetPicker):
        * UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.h: Removed.
        * UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2015-03-19  Jessie Berlin  <jberlin@webkit.org>

        32-bit build fix after r181770.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:]):

2015-03-19  Anders Carlsson  <andersca@apple.com>

        Add support for deleting individual cache entries
        https://bugs.webkit.org/show_bug.cgi?id=142886

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        Remove an unnecessary call to cfURLCacheOrigins().

        (WebKit::clearDiskCacheEntries):
        Helper function for clearing disk cache entries. This handles both the old and new cache implementations.

        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        Call clearDiskCacheEntries if needed.

2015-03-19  Jer Noble  <jer.noble@apple.com>

        [WK2][Mac] Fullscreen animations with mismatched aspect ratios are "squished".
        https://bugs.webkit.org/show_bug.cgi?id=142132

        Reviewed by Tim Horton.

        Use CALayer animations for the transition into and out of fullscreen.

        The fullscreen transition consists of three separate animations:
        1. An opacity animation for the black backdrop behind the fullscreen content
        2. A scale/translation animation from fullscreen element's initial screen to its final one.
        3. A clip animation from the fullscreen element's initial aspect ratio to its final one.

        The opacity animation will apply to the fullscreen window's content view's layer's
        background color. To separately animate the transform and mask of the web view's content, a
        layer-backed subview is added to the content view, and the scale/translation & clip
        animations are applied to its transform property and mask layer respectively.

        Utility methods to create each animation have been added, and each includes a parameter for
        the direction of the animation, so that the same methods can be used for entering and
        exiting fullscreen transitions.

        The user-visible changes to this new transition are when the aspect ratios of the initial
        and final screen locations are different: previously the transition would use a scale
        transform to "squish" the fullscreen content into the initial aspect ratio. The new
        transition instead "clips" the fullscreen content to the initial aspect ratio. For common
        operations such a <video> element with a different aspect ratio than the screen, this makes
        the black letterbox "grow" during the transition, and makes the transition overall much
        smoother.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:]): Create and initialze the clipping view.
        (-[WKFullScreenWindowController applicationDidChangeScreenParameters:]): _backgroundWindow was removed.
        (-[WKFullScreenWindowController enterFullScreen:]): Add the webView to the _clipView, not the contentView.
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]): _backgroundWindow,
                _fadeAnimation, and _scaleAnimation are all removed.
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Ditto.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Ditto.  Hide the contentView's
                layer. Pause visibility updates.
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]): Resume visibility updates.
        (-[WKFullScreenWindowController close]): _fadeAnimation and _scaleAnimation are removed.
        (-[WKFullScreenWindowController customWindowsToEnterFullScreenForWindow:]): Return only the fullscreen
                window.
        (-[WKFullScreenWindowController customWindowsToExitFullScreenForWindow:]): Ditto.
        (zoomAnimation): Added.
        (maskAnimation): Added.
        (fadeAnimation): Added.
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]): Use the utility
                methods above to set up the animation.
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]): Ditto.
        (createBackgroundFullscreenWindow): Deleted.
        (windowFrameFromApparentFrames): Deleted.

2015-03-19  Enrica Casucci  <enrica@apple.com>

        <attachment> should put URLs on the pasteboard so that Finder can accept drops.
        https://bugs.webkit.org/show_bug.cgi?id=142801
        rdar://problem/19982527

        Reviewed by Tim Horton.

        This patch adds all the necessary support to write attachment elements into
        the pasteboard, including the promised type in WK2.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPromisedDataForImage:withFileName:withExtension:withTitle:withURL:withVisibleURL:withArchive:forPasteboard:]):
        (-[WKView _setPromisedDataForAttachment:withExtension:withTitle:withURL:withVisibleURL:forPasteboard:]):
        (-[WKView namesOfPromisedFilesDroppedAtDestination:]):
        (-[WKView _setPromisedData:withFileName:withExtension:withTitle:withURL:withVisibleURL:withArchive:forPasteboard:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setPromisedDataForImage):
        (WebKit::PageClientImpl::setPromisedDataForAttachment):
        (WebKit::PageClientImpl::setPromisedData): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setPromisedDataForImage):
        (WebKit::WebPageProxy::setPromisedDataForAttachment):
        (WebKit::WebPageProxy::setPromisedData): Deleted.
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteAttachment):
        (WebKit::WebDragClient::declareAndWriteDragImage):

2015-03-19  Anders Carlsson  <andersca@apple.com>

        Cache::remove should take a Key instead of an entry
        https://bugs.webkit.org/show_bug.cgi?id=142878

        Reviewed by Antti Koivisto.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::remove):
        * NetworkProcess/cache/NetworkCache.h:

2015-03-19  Chris Dumez  <cdumez@apple.com>

        Clean up DOMTimer related settings
        https://bugs.webkit.org/show_bug.cgi?id=142837

        Reviewed by Darin Adler.

        Stop setting the DOMTimers' default minimum interval to 4ms as this
        is now the default.

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

2015-03-19  Chris Dumez  <cdumez@apple.com>

        The network cache should ignore "cache-control: no-cache, must-revalidate" on history navigation
        https://bugs.webkit.org/show_bug.cgi?id=142831
        <rdar://problem/20209957>

        Reviewed by Antti Koivisto.

        The network cache should ignore "no-cache" and "must-revalidate" as
        Cache-Control policy for history navigations to avoid unnecessary
        revalidation in this case. Our memory cache already behaves this way.

        On history navigation, our disk cache implementation currently
        revalidates unconditionally resources if "cache-control: no-cache" is
        used. It also revalidates expired resources if "cache-control:
        must-revalidate" is used. This is sub-optimal.

        RFC 7234 does not require us to do so [1]:
        """
          User agents often have history mechanisms, such as "Back" buttons and
          history lists, that can be used to redisplay a representation
          retrieved earlier in a session.

          The freshness model (Section 4.2) does not necessarily apply to
          history mechanisms.  That is, a history mechanism can display a
          previous representation even if it has expired.
        """

        Chrome and IE9+ [2] already ignore "cache-control: must-revalidate" on history navigation.

        [1] https://tools.ietf.org/html/rfc7234#page-32
        [2] http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx

        Test: http/tests/cache/disk-cache-validation-back-navigation-policy.html

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::decodeStorageEntry):

2015-03-18  Simon Fraser  <simon.fraser@apple.com>

        Don't paint PDFs on every scroll
        https://bugs.webkit.org/show_bug.cgi?id=142857
        rdar://problem/20130207

        Reviewed by Tim Horton.
        
        Don't push a scale factor onto the PDF layer controller if it hasn't
        changed, since doing so causes a repaint.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::updatePageAndDeviceScaleFactors):

2015-03-18  Anders Carlsson  <andersca@apple.com>

        Use && instead of & when deciding if the network cache should be cleared
        https://bugs.webkit.org/show_bug.cgi?id=142845

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):

2015-03-18  Anders Carlsson  <andersca@apple.com>

        Add WKContextGetWebsiteDataStore API
        https://bugs.webkit.org/show_bug.cgi?id=142832
        rdar://problem/16544715

        Reviewed by Sam Weinig.

        Also add WKWebsiteDataStoreRef which is toll-free bridged to _WKWebsiteDataStore.

        * Shared/API/c/WKBase.h:
        Add new declaration.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::create):
        * UIProcess/API/APIWebsiteDataStore.h:
        Add a new function that takes a configuration.

        * UIProcess/API/C/WKAPICast.h:
        Add cast.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetWebsiteDataStore):
        Return the context's website data store.

        * UIProcess/API/C/WKContext.h:
        Add new declaration.

        * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: Added.
        * UIProcess/API/C/WKWebsiteDataStoreRef.h: Added.
        Add new files.

        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        Update now that WebProcessPool holds on to an API::WebsiteDataStore.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessPool.h:
        WebProcessPool should hold on to an API::WebsiteDataStore instead of a WebKit::WebsiteDataStore.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

2015-03-18  Tim Horton  <timothy_horton@apple.com>

        Cannot invoke action menus anymore
        https://bugs.webkit.org/show_bug.cgi?id=142797
        <rdar://problem/20032670>

        * UIProcess/API/mac/WKView.mm:
        Need one more respondsToSelector check.

2015-03-18  Chris Dumez  <cdumez@apple.com>

        [WK2] Log the number of network cache requests that we have never seen before
        https://bugs.webkit.org/show_bug.cgi?id=142828
        <rdar://problem/19632130>

        Reviewed by Antti Koivisto.

        Log the number of network cache requests that we have never seen before
        using diagnostic logging.

        * NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:
        (WebKit::NetworkCache::Statistics::recordNotUsingCacheForRequest):
        (WebKit::NetworkCache::Statistics::recordRetrievalFailure):

2015-03-17  Antti Koivisto  <antti@apple.com>

        Prune least valuable cache entries first
        https://bugs.webkit.org/show_bug.cgi?id=142810
        rdar://problem/19632130

        Reviewed by Darin Adler.

        When pruning the cache estimate relative value of each entry using formula

        age = current time - creation time
        accessAge = last access time - creation time
        value = accessAge / age

        That is, we value entries that have been accessed recently and survived in the cache longest.

        The most valuable entries don't get deleted at all while the deletion probablity ramps up for
        lower value entries.

        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h:
        (WebKit::NetworkCache::fileTimes):

            Get the creation time and access time for a file.

        (WebKit::NetworkCache::updateFileAccessTimeIfNeeded):

            Update access time manually if the file system doesn't do it automatically.

        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        (WebKit::NetworkCache::IOChannel::path):
        (WebKit::NetworkCache::IOChannel::type):
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::IOChannel):
        (WebKit::NetworkCache::IOChannel::open):

            Remember the file path and move most of the work to constructor.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::remove):
        (WebKit::NetworkCache::Storage::updateFileAccessTime):
        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::deletionProbability):

            Compute the probability based on entry age and access time.

        (WebKit::NetworkCache::Storage::shrinkIfNeeded):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::serialBackgroundIOQueue):
        (WebKit::NetworkCache::Storage::deleteQueue): Deleted.

            More generic name.

2015-03-18  Chris Dumez  <cdumez@apple.com>

        [WK2] Log total number of network cache queries using diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=142803
        <rdar://problem/19632130>

        Reviewed by Antti Koivisto.

        Log total number of network cache queries using diagnostic logging.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cache/NetworkCacheStatistics.h:
        * NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:
        (WebKit::NetworkCache::Statistics::recordCacheRetrievalRequest):

2015-03-18  Chris Dumez  <cdumez@apple.com>

        [WK2] We should not even try the network cache for non-HTTP protocol requests
        https://bugs.webkit.org/show_bug.cgi?id=142802
        <rdar://problem/19632130>

        Reviewed by Antti Koivisto.

        We should not even try the network cache for non-HTTP protocol requests
        and the network cache cannot handle those.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::canRetrieve):
        (WebKit::NetworkCache::Cache::retrieve):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:
        (WebKit::NetworkCache::retrieveDecisionToDiagnosticKey):

2015-03-17  Conrad Shultz  <conrad_shultz@apple.com>

        Ignore some deprecation warnings
        https://bugs.webkit.org/show_bug.cgi?id=142813

        Reviewed by Mark Rowe.

        Fixing the deprecations is tracked by: <rdar://problem/20201450>

        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate):

2015-03-17  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Expose JavaScript binding interface through ewk_extension
        https://bugs.webkit.org/show_bug.cgi?id=142033

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/extensions/extension_sample.cpp: Registered test object for new test case.
        * UIProcess/API/efl/tests/test_ewk2_javascript_binding.cpp: Added simple binding API test case.
        (EWK2ContextTestWithExtension::messageReceivedCallback):
        (EWK2ContextTestWithExtension::EWK2ContextTestWithExtension):
        (TEST_F):
        * WebProcess/InjectedBundle/API/efl/EWebKit_Extension.h:
        * WebProcess/InjectedBundle/API/efl/ewk_extension.cpp:
        (EwkExtension::didCreatePage):
        (EwkExtension::willDestroyPage):
        * WebProcess/InjectedBundle/API/efl/ewk_extension.h:
        * WebProcess/InjectedBundle/API/efl/ewk_extension_private.h:
        * WebProcess/InjectedBundle/API/efl/ewk_page.cpp: Added.
        (toEwkPage):
        (EwkPage::EwkPage):
        (EwkPage::append):
        (EwkPage::remove):
        (EwkPage::didFinishDocumentLoadForFrame):
        (ewk_page_js_global_context_get):
        (ewk_page_client_register):
        (ewk_page_client_unregister):
        * WebProcess/InjectedBundle/API/efl/ewk_page.h: Added.
        * WebProcess/InjectedBundle/API/efl/ewk_page_private.h: Added.
        (EwkPage::page):
        * efl/ewebkit2-extension.pc.in:

2015-03-17  Tim Horton  <timothy_horton@apple.com>

        Cannot invoke action menus anymore
        https://bugs.webkit.org/show_bug.cgi?id=142797
        <rdar://problem/20032670>

        * UIProcess/API/mac/WKView.mm:
        Need a respondsToSelector check.

2015-03-17  Tim Horton  <timothy_horton@apple.com>

        Cannot invoke action menus anymore
        https://bugs.webkit.org/show_bug.cgi?id=142797
        <rdar://problem/20032670>

        Reviewed by Beth Dakin.

        * UIProcess/API/mac/WKView.mm:
        Don't process mouse events that would make an action menu; call super
        and let AppKit take care of it. We have to duplicate the macro so that
        we can avoid calling super for the internal-only methods.
        Also, otherMouseMoved is simply not a thing, so remove it.

2015-03-17  Beth Dakin  <bdakin@apple.com>

        DOM mouse events have weird timing for force clickable elements in Safari 8.0.3 on 
        10.10.2
        https://bugs.webkit.org/show_bug.cgi?id=142700
        -and corresponding-
        rdar://problem/20165168

        Reviewed by Tim Horton.

        No need to tell the WKImmediateActionController about mouse down any more since we 
        are expecting it at the beginning of an immediate action interaction.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseDown:]):

        Set the delaysPrimaryMouseButtonEvents to NO for the 
        _immediateActionGestureRecognizer. This will cause AppKit to send up the mouse 
        events at the expected time.
        (-[WKView initWithFrame:processPool:configuration:webView:]):

        WebCore::EventHandler now needs to know if an immediate action cancelled or 
        completed. This plumbs that information down.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::immediateActionDidCancel):
        (WebKit::WebPageProxy::immediateActionDidComplete):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController immediateActionRecognizerDidCancelAnimation:]):
        (-[WKImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):
        (-[WKImmediateActionController wkView:willHandleMouseDown:]): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Call EventHandler::setImmediateActionStage() with the appropriate stage.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        (WebKit::WebPage::immediateActionDidCancel):
        (WebKit::WebPage::immediateActionDidComplete):

2015-03-17  Timothy Horton  <timothy_horton@apple.com>

        Reproducible null deref under ScriptedAnimationController::createDisplayRefreshMonitor
        https://bugs.webkit.org/show_bug.cgi?id=142776
        <rdar://problem/18921338>

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createDisplayRefreshMonitor):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Adjust to the new signature.

2015-03-17  Antti Koivisto  <antti@apple.com>

        Disk cache should support Vary: Cookie
        https://bugs.webkit.org/show_bug.cgi?id=142770
        rdar://problem/19764945

        Reviewed by Anders Carlsson.

        Cookies are not part of the original request but are added by the networking layer when submitting the request.
        Fetch them explicitly when resolving Vary: Cookie.

        The implementation is not perfect as it fetches the cookie for the cache entry when saving a Vary:Cookie response,
        not when making the request. In principle the cookie may have changed in-between. This should be enough to handle
        reasonable cases though. Fetching cookies for every request might be too expensive for this rarely used feature.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::headerValueForVary):
        (WebKit::NetworkCache::encodeStorageEntry):
        (WebKit::NetworkCache::verifyVaryingRequestHeaders):

2015-03-17  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Use C++ lambdas in IPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=138018

        Reviewed by Anders Carlsson.

        Replace uses of WTF::bind() in the IPC::Connection class with C++ lambdas.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::invalidate):
        (IPC::Connection::sendMessage):
        (IPC::Connection::processIncomingMessage): Simplify the error messages so we
        don't have to format strings on-the-fly, removing the issues of cross-thread
        string copying altogether.
        (IPC::Connection::dispatchDidReceiveInvalidMessage): The parameters are now
        of the StringReference type.
        (IPC::Connection::enqueueIncomingMessage):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::receiveSourceEventHandler):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::open):

2015-03-17  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Use a forwarding header for ANGLE's ShaderLang.h to avoid picking up ANGLE's EGL headers
        https://bugs.webkit.org/show_bug.cgi?id=142530

        Reviewed by Darin Adler.

        * CMakeLists.txt: Replace the Source/ThirdParty/ANGLE/include/GLSLANG entry
        in the list of inclusion directories for WebKit2 with Source/ThirdParty/ANGLE,
        possible due to the new forwarding header for ANGLE's ShaderLang.h.

2015-03-17  Gwang Yoon Hwang  <yoon@igalia.com>

        REGRESSION(r180924): Unable to build WebKitGTK+ with threaded compositor

        Unreviewed build fix.

        * WebProcess/WebPage/LayerTreeHost.h:
        Remove duplicated declaration of setNativeSurfaceHandleForCompositing.

2015-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Enable ES6 classes by default
        https://bugs.webkit.org/show_bug.cgi?id=142774

        Reviewed by Gavin Barraclough.

        * Configurations/FeatureDefines.xcconfig:

2015-03-16  Conrad Shultz  <conrad_shultz@apple.com>

        Don't pass nil as a fireDate for NSTimer
        https://bugs.webkit.org/show_bug.cgi?id=142765

        Reviewed by Dan Bernstein.

        While we're here, switch to a selector that conforms to documented NSTimer API.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController cancelOperation:]):
        Set the timer's fireDate as the future date matching the former interval; update the selector.
        (-[WKFullScreenWindowController _watchdogTimerFired:]):
        Timer callback; wrap -exitFullScreen.

2015-03-16  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=142747

        Reviewed by Chris Dumez.

        * PlatformMac.cmake:
        Started adding Mac-specific directories and headers.

2015-03-16  Alexey Proskuryakov  <ap@apple.com>

        ASSERT(m_plugin) on plugins/snapshotting/snapshot-plugin-not-quite-blocked-by-image.html
        https://bugs.webkit.org/show_bug.cgi?id=142637

        Reviewed by Dean Jackson.

        * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::pluginSnapshotTimerFired):
        m_plugin can be legitimately null.

2015-03-16  Csaba Osztrogonác  <ossy@webkit.org>

        One more URTBF after r181578.

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

2015-03-16  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r181578.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setCSSAnimationTriggersEnabled): Copy/paste error fixed.

2015-03-16  Dean Jackson  <dino@apple.com>

        Expose WK2 preference for Animation Triggers runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=142744

        Reviewed by Anders Carlsson.

        Expose CSSAnimationTriggersEnabled, linking it to the runtime enabled
        feature flag.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCSSAnimationTriggersEnabled):
        (WKPreferencesGetCSSAnimationTriggersEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        (WebKit::InjectedBundle::setCSSAnimationTriggersEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-03-16  Conrad Shultz  <conrad_shultz@apple.com>

        Allow clients to selectively disable plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=142506

        Reviewed by Anders Carlsson.

        Add new functionality allow clients to declaratively disable individual plug-ins (in a manner that conceals them
        from the page). As part of this:

        1) Introduce the concept of web-visible plug-ins and related concepts, as distinct from the real underlying
           set of plug-ins.

        2) Where applicable, plumb additional information about plug-ins (specifically, bundle identification) deeper
           down the stack.

        3) Add generic functionality to PluginStrategy to support filtering plug-ins for visibility and introduce
           a concrete implementation thereof in WebPlatformStrategies in WebKit2.

        4) Add messaging infrastructure to allow clients to set and clear plug-in policies.

        While currently only used in a very limited manner, the new declarative plug-in policies are written generically
        so that they could be easily used in the future to reduce synchronous messaging to the client when loading plug-ins.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        Set new PluginInfo members.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<PluginInfo>::encode):
        Handle new PluginInfo members.
        (IPC::ArgumentCoder<PluginInfo>::decode):
        Ditto.

        * Shared/WebProcessCreationParameters.h:
        Declare a member to store client plug-in policies.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        Encode the policies.
        (WebKit::WebProcessCreationParameters::decode):
        Decode the policies.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toWKPluginLoadClientPolicy):
        Teach how to cast between WebCore and WebKit2 policy definitions.
        (WebKit::toPluginLoadClientPolicy):
        Ditto.

        * UIProcess/API/C/WKPluginLoadPolicy.h:
        Declare WKPluginLoadClientPolicy, matching PluginLoadClientPolicy in WebCore.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextSetPluginLoadClientPolicy):
        New function; wrap WebProcessPool::setPluginLoadClientPolicy().
        (WKContextClearPluginClientPolicies):
        New function; wrap WebProcessPool::clearPluginClientPolicies().

        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        Copy any client plug-in policies to the new process' creation parameters.
        (WebKit::WebProcessPool::setPluginLoadClientPolicy):
        Send SetPluginLoadClientPolicy to all processes and stash the passed-in policy info.
        (WebKit::WebProcessPool::clearPluginClientPolicies):
        Send ClearPluginClientPolicies to all processes and clear any stashed policy info.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pluginInfo):
        Set new PluginInfo member.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::pluginSupportsExtension):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebKit::WebFrameLoaderClient::objectContentType):
        Update to reflect reflect function rename.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPluginInfo):
        Pass the Page to populatePluginCache().
        (WebKit::WebPlatformStrategies::getWebVisiblePluginInfo):
        New member function; wrap getPluginInfo(); if appropriate, filter out plug-ins the client has asked
        to block on the current page.
        (WebKit::WebPlatformStrategies::setPluginLoadClientPolicy):
        New member function; map empty inputs to a wildcard character and insert the new policy into the nested map.
        (WebKit::WebPlatformStrategies::clearPluginClientPolicies):
        New member function; empty m_hostsToPluginIdentifierData.
        (WebKit::WebPlatformStrategies::pluginLoadClientPolicyForHost):
        New member function; look up the most specific policy for the given plug-in and host.
        (WebKit::WebPlatformStrategies::populatePluginCache):
        If appropriate, set the client load policy on the plug-ins; do this irrespective of whether the cache has
        been populated since the Page, and therefore host, may change.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canShowMIMEType):
        Update to reflect function rename.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Enumerate and process the client plug-in policies in the creation parameters.
        (WebKit::WebProcess::setPluginLoadClientPolicy):
        New member function; wrap PluginStrategy::setPluginLoadClientPolicy.
        (WebKit::WebProcess::clearPluginClientPolicies):
        New member function; wrap PluginStrategy::clearPluginClientPolicies().

        * WebProcess/WebProcess.messages.in:
        Add messages for setting and clearing policies.

2015-03-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add new Notification classes to GTK+ API documentation.

        Add WebKitNotification and WebKitNotificationPermissionRequest to
        the documentation and fix some other typos causing warnings when
        generating HTML documentation.

        * UIProcess/API/gtk/WebKitUserContent.cpp:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:

2015-03-16  Przemyslaw Piorkowski  <p.piorkowski@samsung.com>

        [EFL][WK2] REGRESSION(r178526): test_ewk2_storage_manager has been failed for a long time
        https://bugs.webkit.org/show_bug.cgi?id=141249

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Enable test_ewk2_storage_manager for EFL port - it is passing now.

2015-03-16  David Kilzer  <ddkilzer@apple.com>

        [iOS] REGRESSION (r181511): Most layout tests crash with a NULL deref

        Follow-up fix for:
        [iOS] Presenting a modal sheet on top of a WKWebView causes it to lose focused, active state
        <http://webkit.org/b/142702>

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewWindowActive): Add NULL check for m_webView.
        (WebKit::PageClientImpl::isViewFocused): Ditto.

2015-03-15  Simon Fraser  <simon.fraser@apple.com>

        Clean up related to wheelEvent names
        https://bugs.webkit.org/show_bug.cgi?id=142713

        Reviewed by Anders Carlsson.

        Add EventNames::isWheelEventType() and use it in places that test for the
        two wheel event names.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEvent):

2015-03-15  Dan Bernstein  <mitz@apple.com>

        [iOS] Presenting a modal sheet on top of a WKWebView causes it to lose focused, active state
        https://bugs.webkit.org/show_bug.cgi?id=142702

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView becomeFirstResponder]): Override to delegate first responder status to the
        WKContentView if possible.
        (-[WKWebView _retainActiveFocusedState]): New SPI that prevents view hierarchy changes from
        affecting the active and focused state of the view. Increments a counter ivar and returns a
        completion block (which callers must call when they’re done) that decrements it back.
        * UIProcess/API/Cocoa/WKWebViewInternal.h: Declared new _activeFocusedStateRetainCount ivar
        with @package access.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared new method.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewWindowActive): Return true if active/focused state is to be
        maintained despite not being visible.
        (WebKit::PageClientImpl::isViewFocused): Return true if active/focused state is to be
        maintained despite not being active.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView resignFirstResponder]): Don’t blur the assisted node if active/focused
        state is to be maintained.

2015-03-14  Simon Fraser  <simon.fraser@apple.com>

        Clean up use of flags in localToContainer-type functions
        https://bugs.webkit.org/show_bug.cgi?id=142704

        Reviewed by Alexey Proskuryakov.
        
        Pass UseTransforms explicitly to localToContainerPoint()

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

2015-03-14  Brent Fulgham  <bfulgham@apple.com>

        [iOS] scroll snap points are animating to the wrong positions.
        https://bugs.webkit.org/show_bug.cgi?id=142705
        <rdar://problem/20136946>

        Reviewed by Simon Fraser.

        Scroll snapping was landing in the wrong place on iOS because of two problems:
        (1) It was searching for the closest snap offset point using unscaled 'screen' pixels,
        which caused it to always choose one of the earliest snap point options.
        (2) It was then selecting a scaled snap point coordinate and passing it back to UIKit
        to animate the snap. This caused it to select a target point beyond the 'screen' pixel
        we want to hit.
        
        The solution to both problems are to scale the scroll destination UIKit suggests so that
        we search among the scaled points with a valid value. Then, we need to scale the returned
        value back to screen units before handing it back to UIKit to process.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillBeginDragging:]): Drive-by fix. Get rid of extra ';' at
        the end of the line.
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::closestSnapOffsetForMainFrameScrolling):

2015-03-14  Dean Jackson  <dino@apple.com>

        Feature flag for Animations Level 2
        https://bugs.webkit.org/show_bug.cgi?id=142699
        <rdar://problem/20165097>

        Reviewed by Brent Fulgham.

        Add ENABLE_CSS_ANIMATIONS_LEVEL_2 and a runtime flag animationTriggersEnabled.

        * Configurations/FeatureDefines.xcconfig:

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

        [GStreamer] share GL context in pipeline
        https://bugs.webkit.org/show_bug.cgi?id=142693

        Reviewed by Philippe Normand.

        * WebProcess/gtk/WebProcessMainGtk.cpp: Enable XInitThreads() if
        GSTREAMER_GL is used, since GstGL elements use another thread for
        queuing GL operations.

2015-03-13  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=142680

        Reviewed by Gyuyoung Kim.

        * PlatformMac.cmake: Added.

2015-03-13  Commit Queue  <commit-queue@webkit.org>

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

        Caused use-after-free on many tests (Requested by ap on
        #webkit).

        Reverted changeset:

        "Allow clients to selectively disable plug-ins"
        https://bugs.webkit.org/show_bug.cgi?id=142506
        http://trac.webkit.org/changeset/181483

2015-03-13  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Enable WIRELESS_PLAYBACK_TARGET
        https://bugs.webkit.org/show_bug.cgi?id=142635

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2015-03-13  Timothy Horton  <timothy_horton@apple.com>

        Sites that use a device-width viewport but don't have enough height to fill the view are scaled up
        https://bugs.webkit.org/show_bug.cgi?id=142664
        <rdar://problem/18859470>

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView _rubberBandOffsetForOffset:maxOffset:minOffset:range:outside:]):
        Now that the WKContentView can (without pinching) be smaller than the unobscured
        region of the WKWebView, we need to take that into account when deciding where
        to retarget scrolling.

2015-03-13  Mark Lam  <mark.lam@apple.com>

        Replace TCSpinLock with a new WTF::SpinLock based on WTF::Atomic.
        <https://webkit.org/b/142674>

        Reviewed by Filip Pizlo.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::EventDispatcher):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::ViewUpdateDispatcher):
        * WebProcess/WebPage/ViewUpdateDispatcher.h:

2015-03-10  Conrad Shultz  <conrad_shultz@apple.com>

        Allow clients to selectively disable plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=142506

        Reviewed by Anders Carlsson.

        Add new functionality allow clients to declaratively disable individual plug-ins (in a manner that conceals them
        from the page). As part of this:

        1) Introduce the concept of web-visible plug-ins and related concepts, as distinct from the real underlying
           set of plug-ins.

        2) Where applicable, plumb additional information about plug-ins (specifically, bundle identification) deeper
           down the stack.

        3) Add generic functionality to PluginStrategy to support filtering plug-ins for visibility and introduce
           a concrete implementation thereof in WebPlatformStrategies in WebKit2.

        4) Add messaging infrastructure to allow clients to set and clear plug-in policies.

        While currently only used in a very limited manner, the new declarative plug-in policies are written generically
        so that they could be easily used in the future to reduce synchronous messaging to the client when loading plug-ins.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        Set new PluginInfo members.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<PluginInfo>::encode):
        Handle new PluginInfo members.
        (IPC::ArgumentCoder<PluginInfo>::decode):
        Ditto.

        * Shared/WebProcessCreationParameters.h:
        Declare a member to store client plug-in policies.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        Encode the policies.
        (WebKit::WebProcessCreationParameters::decode):
        Decode the policies.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toWKPluginLoadClientPolicy):
        Teach how to cast between WebCore and WebKit2 policy definitions.
        (WebKit::toPluginLoadClientPolicy):
        Ditto.

        * UIProcess/API/C/WKPluginLoadPolicy.h:
        Declare WKPluginLoadClientPolicy, matching PluginLoadClientPolicy in WebCore.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextSetPluginLoadClientPolicy):
        New function; wrap WebProcessPool::setPluginLoadClientPolicy().
        (WKContextClearPluginClientPolicies):
        New function; wrap WebProcessPool::clearPluginClientPolicies().

        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        Copy any client plug-in policies to the new process' creation parameters.
        (WebKit::WebProcessPool::setPluginLoadClientPolicy):
        Send SetPluginLoadClientPolicy to all processes and stash the passed-in policy info.
        (WebKit::WebProcessPool::clearPluginClientPolicies):
        Send ClearPluginClientPolicies to all processes and clear any stashed policy info.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pluginInfo):
        Set new PluginInfo member.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::pluginSupportsExtension):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebKit::WebFrameLoaderClient::objectContentType):
        Update to reflect reflect function rename.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPluginInfo):
        Pass the Page to populatePluginCache().
        (WebKit::WebPlatformStrategies::getWebVisiblePluginInfo):
        New member function; wrap getPluginInfo(); if appropriate, filter out plug-ins the client has asked
        to block on the current page.
        (WebKit::WebPlatformStrategies::setPluginLoadClientPolicy):
        New member function; map empty inputs to a wildcard character and insert the new policy into the nested map.
        (WebKit::WebPlatformStrategies::clearPluginClientPolicies):
        New member function; empty m_hostsToPluginIdentifierData.
        (WebKit::WebPlatformStrategies::pluginLoadClientPolicyForHost):
        New member function; look up the most specific policy for the given plug-in and host.
        (WebKit::WebPlatformStrategies::populatePluginCache):
        If appropriate, set the client load policy on the plug-ins; do this irrespective of whether the cache has
        been populated since the Page, and therefore host, may change.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canShowMIMEType):
        Update to reflect function rename.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Enumerate and process the client plug-in policies in the creation parameters.
        (WebKit::WebProcess::setPluginLoadClientPolicy):
        New member function; wrap PluginStrategy::setPluginLoadClientPolicy.
        (WebKit::WebProcess::clearPluginClientPolicies):
        New member function; wrap PluginStrategy::clearPluginClientPolicies().

        * WebProcess/WebProcess.messages.in:
        Add messages for setting and clearing policies.

2015-03-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Use UIDocumentMenuViewController to allow selection of files from
        iCloud Drive in WKFileUploadPanel

        Part of <https://bugs.webkit.org/show_bug.cgi?id=142596> WebKit on
        iOS should support file upload from iCloud Drive
        <rdar://problem/12178991>

        Reviewed by Andy Estes.

        * Platform/spi/ios/UIKitSPI.h:
        Include UIDocumentMenuViewController_Private.h if it exists. If not,
        declare this new SPI.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (fallbackIconForFile):
        Create a UIDocumentInteractionController for the file, and return a
        thumbnail image from its smallest icon.

        (iconForImageFile):
        If we can get a UIImage from the file, create a thumbnail from it.
        Otherwise, call fallbackIconForFile().

        (iconForVideoFile):
        Code moved from -[_WKVideoFileUploadItem displayImage].

        (iconForFile):
        Get the file's extension, and get the extension's preferred UTI. If the
        UTI is an image type, call iconForImageFile(). If it's a video type,
        call iconForVideoFile(). Otherwise, return the fallback icon.

        (-[_WKFileUploadItem initWithFileURL:]):
        Added an initializer that takes a file URL.

        (-[_WKFileUploadItem fileURL]):
        (-[_WKImageFileUploadItem initWithFileURL:originalImage:]):
        (-[_WKVideoFileUploadItem displayImage]):
        (WKFileUploadPanel):
        Inherit from UIDocumentPickerDelegate and UIDocumentMenuDelegate. Add
        an ivar for the document menu controller.

        (-[WKFileUploadPanel dealloc]):
        (-[WKFileUploadPanel presentWithParameters:resultListener:]):
        If instances of UIDocumentMenuViewController respond to
        -_setIgnoreApplicationEntitlementForImport:, meaning we can disable the
        assertion that the current app has the iCloud Documents entitlement,
        then show the document picker menu. Otherwise, show the current source
        selection UI. The runtime check will be removed when a newer UIKit is
        available.

        (UTIsForMIMETypes):
        Return the UTIs for the <input> element's "accept" attribute's MIME
        type list.

        (-[WKFileUploadPanel _mediaTypesForPickerSourceType:]):
        Call UTIsForMIMETypes(). Fall back to available source types for this
        picker type.

        (-[WKFileUploadPanel _documentPickerMenuMediaTypes]):
        Call UTIsForMIMETypes(). Fall back to the all-encompassing
        "public.item" UTI.

        (-[WKFileUploadPanel _photoLibraryButtonLabel]):
        (-[WKFileUploadPanel _cameraButtonLabel]):
        Factored out of -_showMediaSourceSelectionSheet. Return the
        appropriate label for the camera button, based on whether it can take a
        photo or video, or return nil if the camera is not available.

        (-[WKFileUploadPanel _showMediaSourceSelectionSheet]):
        Changed to use -_cameraButtonLabel and
        -_presentForCurrentInterfaceIdiom:.

        (-[WKFileUploadPanel _showDocumentPickerMenu]):
        Create a UIDocumentMenuViewController, and populate it with options to
        open the photo library or take a picture or video. If iCloud Drive or
        other document sources are available, they will be added automatically.

        (-[WKFileUploadPanel _presentForCurrentInterfaceIdiom:]):
        (-[WKFileUploadPanel documentMenu:didPickDocumentPicker:]):
        (-[WKFileUploadPanel documentMenuWasCancelled:]):
        (-[WKFileUploadPanel documentPicker:didPickDocumentAtURL:]):
        (-[WKFileUploadPanel documentPickerWasCancelled:]):
        (-[WKFileUploadPanel _uploadItemFromMediaInfo:successBlock:failureBlock:]):

        (-[_WKImageFileUploadItem initWithFilePath:originalImage:]): Deleted.
        (-[_WKImageFileUploadItem fileURL]): Deleted.
        (-[_WKVideoFileUploadItem initWithFilePath:mediaURL:]): Deleted.
        (-[_WKVideoFileUploadItem fileURL]): Deleted.

2015-03-11  Enrica Casucci  <enrica@apple.com>

        Adopt new API for keyboard event handling.
        https://bugs.webkit.org/show_bug.cgi?id=142602
        rdar://problem/19966087

        Reviewed by Sam Weinig.

        Adopts the new API.

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

2015-03-12  Alexey Proskuryakov  <ap@apple.com>

        testRunner.setAlwaysAcceptCookies does not work with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=138687

        Reviewed by Carlos Garcia Campos.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy): Don't change system-wide
        cookie accept policy when in testing mode. Also, update the policy in WebProcesses too,
        as we still do some networking there.

        * UIProcess/WebProcessPool.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAlwaysAcceptCookies): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAlwaysAcceptCookies): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:
        Remove WKBundleSetAlwaysAcceptCookies SPI, as WKTR now uses an API in UI process.

2015-03-12  Anders Carlsson  <andersca@apple.com>

        WKErrorDomain should be declared nonnull
        https://bugs.webkit.org/show_bug.cgi?id=142628

        Reviewed by Antti Koivisto.

        Add WK_ASSUME_NONNULL_BEGIN and WK_ASSUME_NONNULL_END so everything will be implicitly nonnull.

        * UIProcess/API/Cocoa/WKError.h:

2015-03-12  Ian Henderson  <ian@ianhenderson.org>

        PDFs don't snapshot properly in iOS Safari
        https://bugs.webkit.org/show_bug.cgi?id=142623

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        If we have a _customContentView, use UIView snapshotting instead of
        trying to snapshot the web page.

2015-03-12  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update AirPlay handling
        https://bugs.webkit.org/show_bug.cgi?id=142541

        Unreviewed, respond to post-review comments and add previously reviewed changes
        missed by a bungled merge.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        * UIProcess/WebMediaPlaybackTargetPickerProxy.cpp:
        (WebKit::WebMediaPlaybackTargetPickerProxy::~WebMediaPlaybackTargetPickerProxy):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createPlaybackTargetPicker):
        * UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.h: Added.
        * UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.mm: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/com.apple.WebProcess.sb.in:

2015-03-11  Antti Koivisto  <antti@apple.com>

        Cache traversal missing large entries
        https://bugs.webkit.org/show_bug.cgi?id=142601

        Reviewed by Andreas Kling.

        When traversing cache entries we only read the header data from disk. This didn't work
        correctly for entries larger than the read size.

        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::read):

            Partial reads only receive one callback with 'done' set to true.
            Ensure we actually return data in this case.

        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::decodeEntryHeader):

            Add some logging.

2015-03-11  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update AirPlay handling
        https://bugs.webkit.org/show_bug.cgi?id=142541

        Reviewed by Sam Weinig.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<AVPlaybackTarget>::encode):
        (IPC::ArgumentCoder<AVPlaybackTarget>::decode):
        * UIProcess/PageClient.h:
        * UIProcess/WebAVPlaybackTargetPickerProxy.cpp: Added.
        (WebKit::WebAVPlaybackTargetPickerProxy::WebAVPlaybackTargetPickerProxy):
        (WebKit::WebAVPlaybackTargetPickerProxy::~WebAVPlaybackTargetPickerProxy):
        (WebKit::WebAVPlaybackTargetPickerProxy::showPlaybackTargetPicker):
        (WebKit::WebAVPlaybackTargetPickerProxy::startingMonitoringPlaybackTargets):
        (WebKit::WebAVPlaybackTargetPickerProxy::stopMonitoringPlaybackTargets):
        * UIProcess/WebAVPlaybackTargetPickerProxy.h: Added.
        (WebKit::WebAVPlaybackTargetPickerProxy::Client::~Client):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::devicePickerProxy):
        (WebKit::WebPageProxy::showPlaybackTargetPicker):
        (WebKit::WebPageProxy::startingMonitoringPlaybackTargets):
        (WebKit::WebPageProxy::stopMonitoringPlaybackTargets):
        (WebKit::WebPageProxy::didChoosePlaybackTarget):
        (WebKit::WebPageProxy::externalOutputDeviceAvailableDidChange):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createPlaybackTargetPicker):
        * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.h: Added.
        * UIProcess/mac/WebAVPlaybackTargetPickerProxyMac.mm: Added.
        (WebKit::WebAVPlaybackTargetPickerProxyMac::create):
        (WebKit::WebAVPlaybackTargetPickerProxyMac::WebAVPlaybackTargetPickerProxyMac):
        (WebKit::WebAVPlaybackTargetPickerProxyMac::~WebAVPlaybackTargetPickerProxyMac):
        (WebKit::WebAVPlaybackTargetPickerProxyMac::outputeDeviceAvailabilityChangedTimerFired):
        (WebKit::WebAVPlaybackTargetPickerProxyMac::availableDevicesDidChange):
        (WebKit::WebAVPlaybackTargetPickerProxyMac::devicePicker):
        (WebKit::WebAVPlaybackTargetPickerProxyMac::showPlaybackTargetPicker):
        (WebKit::WebAVPlaybackTargetPickerProxyMac::currentDeviceDidChange):
        (WebKit::WebAVPlaybackTargetPickerProxyMac::startingMonitoringPlaybackTargets):
        (WebKit::WebAVPlaybackTargetPickerProxyMac::stopMonitoringPlaybackTargets):
        (-[WebAVOutputDevicePickerMenuControllerHelper initWithCallback:]):
        (-[WebAVOutputDevicePickerMenuControllerHelper clearCallback]):
        (-[WebAVOutputDevicePickerMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebAVPlaybackTargetPicker.cpp: Added.
        (WebKit::WebAVPlaybackTargetPicker::WebAVPlaybackTargetPicker):
        (WebKit::WebAVPlaybackTargetPicker::showPlaybackDevicePicker):
        (WebKit::WebAVPlaybackTargetPicker::configureWireLessTargetMonitoring):
        (WebKit::WebAVPlaybackTargetPicker::addClient):
        (WebKit::WebAVPlaybackTargetPicker::removeClient):
        (WebKit::WebAVPlaybackTargetPicker::didChoosePlaybackTarget):
        (WebKit::WebAVPlaybackTargetPicker::playbackTargetAvailabilityDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::showPlaybackTargetPicker):
        (WebKit::WebChromeClient::startingMonitoringPlaybackTargets):
        (WebKit::WebChromeClient::stopMonitoringPlaybackTargets):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::playbackTargetSelected):
        (WebKit::WebPage::playbackTargetAvailabilityDidChange):
        * WebProcess/com.apple.WebProcess.sb.in:

2015-03-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the build

        Unreviewed.

        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::start):
        (WebKit::Download::resume):

2015-03-10  Sam Weinig  <sam@webkit.org>

        Allow adding a button in input elements for auto fill related functionality
        <rdar://problem/19782066>
        https://bugs.webkit.org/show_bug.cgi?id=142564

        Reviewed by Anders Carlsson.

        - Adds new SPI to respond to clicks on the AutoFill button (both bundle and UIProcess).
        - Adds new SPI to enable/disable the display of the AutoFill button on an element.
        - Adds new SPI to get the bounds of the AutoFill button.
        - Updates spelling of AutoFill to be consistent.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didClickAutoFillButton):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleAutoFillButtonClick):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        (API::InjectedBundle::PageUIClient::didClickAutoFillButton):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::didClickAutoFillButton):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::handleAutoFillButtonClick):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageUIClient.h:
        Pipe the didClickAutoFillButton to the SPI layer.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle HTMLInputElementIsAutoFilled]):
        (-[WKWebProcessPlugInNodeHandle setHTMLInputElementIsAutoFilled:]):
        Update for new spelling of AutoFill.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleGetHTMLInputElementAutoFilled):
        (WKBundleNodeHandleSetHTMLInputElementAutoFilled):
        Added. Replaces WKBundleNodeHandleGetHTMLInputElementAutofilled/WKBundleNodeHandleSetHTMLInputElementAutofilled
        which are now deprecated due to inconsistent spelling of AutoFill.

        (WKBundleNodeHandleGetHTMLInputElementAutoFillButtonEnabled):
        (WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled):
        (WKBundleNodeHandleGetHTMLInputElementAutoFillButtonBounds):
        Added.

        (WKBundleNodeHandleGetHTMLInputElementAutofilled):
        (WKBundleNodeHandleSetHTMLInputElementAutofilled):
        Deprecated.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        (WebKit::InjectedBundleNodeHandle::create):
        (WebKit::InjectedBundleNodeHandle::InjectedBundleNodeHandle):
        (WebKit::InjectedBundleNodeHandle::~InjectedBundleNodeHandle):
        (WebKit::InjectedBundleNodeHandle::coreNode):
        (WebKit::InjectedBundleNodeHandle::document):
        (WebKit::InjectedBundleNodeHandle::elementBounds):
        (WebKit::InjectedBundleNodeHandle::renderRect):
        (WebKit::InjectedBundleNodeHandle::renderedImage):
        (WebKit::InjectedBundleNodeHandle::visibleRange):
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementValueForUser):
        (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutoFilled):
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutoFilled):
        (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutoFillButtonEnabled):
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutoFillButtonEnabled):
        (WebKit::InjectedBundleNodeHandle::htmlInputElementAutoFillButtonBounds):
        (WebKit::InjectedBundleNodeHandle::htmlInputElementLastChangeWasUserEdit):
        (WebKit::InjectedBundleNodeHandle::htmlTextAreaElementLastChangeWasUserEdit):
        (WebKit::InjectedBundleNodeHandle::isTextField):
        (WebKit::InjectedBundleNodeHandle::htmlTableCellElementCellAbove):
        (WebKit::InjectedBundleNodeHandle::documentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlFrameElementContentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlIFrameElementContentFrame):
        (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutofilled): Deleted.
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutofilled): Deleted.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        Fix-up InjectedBundleNodeHandle to store its underlying Node in a Ref, rather than a RefPtr.
        Add helpers to implement the new SPI for WKBundleNodeHandleRef.

2015-03-11  Timothy Horton  <timothy_horton@apple.com>

        Make it possible to zoom on pages that claim to lay out to device size and then fail to do so
        https://bugs.webkit.org/show_bug.cgi?id=142549

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesDefinitions.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Flip the pref on by default.

2015-03-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not look for child processes in the UI process binary path
        https://bugs.webkit.org/show_bug.cgi?id=135752

        Reviewed by Gustavo Noronha Silva.

        It's only useful for internal tools and tests, but never when
        installed, since we don't install the processes in the bin dir but
        in the libexec dir.

        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        (WebKit::findWebKitProcess): Only look or the executables in the
        UI process binary path or WEBKIT_EXEC_PATH for development builds.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (injectedBundleDirectory): Only check
        WEBKIT_INJECTED_BUNDLE_PATH env var for development builds.

2015-03-10  Antti Koivisto  <antti@apple.com>

        Add interface to delete disk cache entries
        https://bugs.webkit.org/show_bug.cgi?id=142546

        Reviewed by Anders Carlsson.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::Cache::remove):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.cpp:
        (WebKit::NetworkCache::Storage::Storage):
        (WebKit::NetworkCache::Storage::remove):

            Move deletion to a serial queue so we can't create large number of threads.

        (WebKit::NetworkCache::Storage::dispatchReadOperation):
        (WebKit::NetworkCache::Storage::dispatchHeaderWriteOperation):
        (WebKit::NetworkCache::Storage::removeEntry): Deleted.
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCache::Storage::deleteQueue):

2015-03-10  Chris Dumez  <cdumez@apple.com>

        5 tests fail on Apple Mac WK2 performance bots
        https://bugs.webkit.org/show_bug.cgi?id=142485

        Reviewed by Andreas Kling.

        Only log errors in debug builds if SandboxExtension::createHandle() fails
        so that performance tests don't fail because of it. Such error is not
        fatal and is expected under certain circumstances. In particular,
        SandboxExtension::createHandle() is sometimes called for non-existing
        files (e.g. from NetworkResourceLoadParameters::encode()).

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::createHandle):

2015-03-10  Timothy Horton  <timothy_horton@apple.com>

        Fix the build

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::startWithHandle):
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (-[WKCustomProtocolLoader initWithCustomProtocolManagerProxy:customProtocolID:request:connection:]):

2015-03-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Contents not shown when entering AC mode unless the window is resized
        https://bugs.webkit.org/show_bug.cgi?id=142347

        Reviewed by Žan Doberšek.

        The problem is once again that we are now creating the redirected
        X window in realize method. When entering AC mode we resize the
        redirected window to the drawing area size. Since the size hasn't
        changed from the drawing area point of view, the web process is
        not notified. The WebProcess always uses the window size, instead
        of the root layer size, to make sure it's in sync, see the comment
        in LayerTreeHostGtk::compositeLayersToContext(). So, we need to
        enforce a resize when we change the size of the redirected window
        when entering AC mode.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseEnterAcceleratedCompositingMode):
        * UIProcess/DrawingAreaProxyImpl.h:
        (WebKit::DrawingAreaProxyImpl::forceResize):

2015-03-10  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Handle unused parameter warnings as build errors except in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=142338

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:

2015-03-10  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/20086546> [Cocoa] Add an option to treat certificate chains with SHA1-signed certificates as insecure
        https://bugs.webkit.org/show_bug.cgi?id=142461

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Initialize
        webPageConfiguration.treatsSHA1SignedCertificatesAsInsecure from the WKWebViewConfiguration.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        Added _treatsSHA1SignedCertificatesAsInsecure ivar.
        (-[WKWebViewConfiguration copyWithZone:]): Copy _treatsSHA1SignedCertificatesAsInsecure.
        (-[WKWebViewConfiguration _treatsSHA1SignedCertificatesAsInsecure]): Added this getter.
        (-[WKWebViewConfiguration _setTreatsSHA1SignedCertificatesAsInsecure:]): Added this setter.

        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Declared new
        _treatsSHA1SignedCertificatesAsInsecure property.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::didCommitLoad): Use new hasInsecureContent parameter to initialize
        hasInsecureContent parameter in the uncommitted state.
        * UIProcess/PageLoadState.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize new m_treatsSHA1CertificatesAsInsecure
        member variable from the WebPageConfiguration.
        (WebKit::WebPageProxy::didCommitLoadForFrame): Pass true for the new hasInsecureContent to
        PageLoadState::didCommitLoad if we are treating SHA1-signed certificates as insecure and
        the certificate info contains a non-root SHA1-signed certificate.
        * UIProcess/WebPageProxy.h: Added m_treatsSHA1CertificatesAsInsecure member variable.

2015-03-09  Geoffrey Garen  <ggaren@apple.com>

        bmalloc: tryFastMalloc shouldn't crash
        https://bugs.webkit.org/show_bug.cgi?id=142443

        Reviewed by Anders Carlsson.

        Part 1: Stop using tryFastRealloc.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::resize): Deleted.
        * Shared/ShareableBitmap.h: Removed the resize function because it has
        no clients.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::updateBackingStore): Changed to allocate a new
        backing store instead of resizing the old one. This has three advantages:

        (1) Might be more memory-efficient, since you don't have to keep the old
        one around while allocating the new one.

        (2) Avoids the overhead of realloc() copying the contents of the old
        backing store even though we only want uninitialized memory.

        (3) Makes resize failure consistent with initial allocation failure.
        Previously, while initial allocation failure would set the backing store
        to null, resize failure would keep the old wrong backing store and then
        tell it not to paint. Now, resize failure also sets the backing store to
        null.

2015-03-09  Martin Robinson  <mrobinson@igalia.com>

        [EFL] Move DispatchQueue to WTF
        https://bugs.webkit.org/show_bug.cgi?id=142493

        Reviewed by Csaba Osztrogonác.

        * PlatformEfl.cmake: Remove DispatchQueue from the source list.

2015-03-08  Dean Jackson  <dino@apple.com>

        [iOS Media] Video buffer progress missing on iPhones
        https://bugs.webkit.org/show_bug.cgi?id=142462

        Reviewed by Eric Carlson.

        Coordinate the SetBufferedTime message between the Web and UI
        processes.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: New message SetBufferedTime.
        * WebProcess/ios/WebVideoFullscreenManager.h:
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::setBufferedTime):

2015-03-08  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Add scaffolding for the WKUserContentExtensionStore
        https://bugs.webkit.org/show_bug.cgi?id=142464

        Reviewed by Dan Bernstein.

        * Shared/API/APIObject.h:
        Add a UserContentExtensionStore type and move the UserContentExtension type into the correct section (UIProcess).

        * Shared/API/c/WKBase.h:
        Add the WKUserContentExtensionStoreRef C-SPI type.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Add allocation support for UserContentExtensionStore (and UserContentExtension while we are there, it will be
        needed shortly).

        * UIProcess/API/APIUserContentExtensionStore.cpp: Added.
        (API::UserContentExtensionStore::UserContentExtensionStore):
        (API::UserContentExtensionStore::~UserContentExtensionStore):
        * UIProcess/API/APIUserContentExtensionStore.h: Added.
        Stub out the UserContentExtensionStore.

        * UIProcess/API/C/WKAPICast.h:
        Add casting for the UserContentExtensionStore.

        * UIProcess/API/C/WKUserContentExtensionStoreRef.cpp: Added.
        (WKUserContentExtensionStoreGetTypeID):
        * UIProcess/API/C/WKUserContentExtensionStoreRef.h: Added.
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.h: Added.
        * UIProcess/API/Cocoa/_WKUserContentExtensionStore.mm: Added.
        (-[_WKUserContentExtensionStore init]):
        (-[_WKUserContentExtensionStore dealloc]):
        (-[_WKUserContentExtensionStore _apiObject]):
        * UIProcess/API/Cocoa/_WKUserContentExtensionStoreInternal.h: Added.
        (WebKit::wrapper):
        Stub out SPI for the UserContentExtensionStore.

        * WebKit2.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        Add new files.

2015-03-08  Sam Weinig  <sam@webkit.org>

        AX: Expose a frame's accessible name through WK2 C SPI
        <rdar://problem/19653068>
        https://bugs.webkit.org/show_bug.cgi?id=142468

        Reviewed by Dan Bernstein.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameSetAccessibleName):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::setAccessibleName):
        * WebProcess/WebPage/WebFrame.h:
        Add SPI to set a frame's accessible name. This matches the Legacy WebKit SPI -[WebFrame setAccessibleName:]. 

2015-03-08  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Pass compiled content extensions as read-only shared memory rather than copying them
        https://bugs.webkit.org/show_bug.cgi?id=142458

        Reviewed by Dan Bernstein.

        * Shared/WebCompiledContentExtensionData.cpp:
        (WebKit::WebCompiledContentExtensionData::encode):
        (WebKit::WebCompiledContentExtensionData::decode):
        * Shared/WebCompiledContentExtensionData.h:
        (WebKit::WebCompiledContentExtensionData::WebCompiledContentExtensionData):
        Store the compiled data as a SharedMemory block with offset/size pairs for the
        bytecode and actions. While the bytecode offset is currently always 0, this won't
        be the case when we map these in from files due to metadata that will be placed
        at the top of the files.

        * Shared/WebCompiledContentExtension.h:
        * Shared/WebCompiledContentExtension.cpp:
        (WebKit::WebCompiledContentExtension::createFromCompiledContentExtensionData):
        Temporary creation helper. In subsequent patches, this will be removed and replaced
        by always passing in shared/mapped data.

        (WebKit::WebCompiledContentExtension::create):
        (WebKit::WebCompiledContentExtension::WebCompiledContentExtension):
        (WebKit::WebCompiledContentExtension::bytecode):
        (WebKit::WebCompiledContentExtension::bytecodeLength):
        (WebKit::WebCompiledContentExtension::actions):
        (WebKit::WebCompiledContentExtension::actionsLength):
        Convert to work with the new WebCompiledContentExtension format.
        
        * UIProcess/API/C/WKUserContentFilterRef.cpp:
        (WKUserContentFilterCreate):
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter initWithName:serializedRules:]):
        Switch to using WebCompiledContentExtension::createFromCompiledContentExtensionData().

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserContentExtensions):
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::addUserContentExtension):
        Update to pass the WebCompiledContentExtensionData directly to the WebCompiledContentExtension.

2015-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove willDestroyFrame in WKBundlePageLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=142389

        Reviewed by Anders Carlsson.

        I added willDestroyFrame in r154540 but I realized recently that
        it has never actually worked. Adding the callback to
        WKBundlePageLoaderClient was the first mistake, since frames are
        handled by WebProcess and DidDestroyFrame message is indeed a
        WebProcessProxy not a WebPageProxy one. Second mistake was calling
        the callback from WebFrameLoaderClient::frameLoaderDestroyed(),
        since at that point the frame has already been detached from the
        page and so WebFrame::page() always returns nullptr. So, this in
        fact dead code and since r180211 nobody is using it.

        * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitWebPageCreate): Use verion 6 instead of version 7 of loader client.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::willDestroyFrame): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::frameLoaderDestroyed):

2015-03-06  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Move compiling of content extensions to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=142402

        Reviewed by Benjamin Poulain.

        * Shared/API/APIObject.h:
        Rename UserContentFilter type to UserContentExtension to match new unified naming.

        * Shared/WebCompiledContentExtension.cpp: Added.
        (WebKit::WebCompiledContentExtension::create):
        (WebKit::WebCompiledContentExtension::WebCompiledContentExtension):
        (WebKit::WebCompiledContentExtension::~WebCompiledContentExtension):
        (WebKit::WebCompiledContentExtension::bytecode):
        (WebKit::WebCompiledContentExtension::bytecodeLength):
        (WebKit::WebCompiledContentExtension::actions):
        (WebKit::WebCompiledContentExtension::actionsLength):
        * Shared/WebCompiledContentExtension.h: Added.
        Add new WebKit2 implementation of CompiledContentExtension. Right now it is the same as the old
        WebCore based CompiledContentExtension, but in subsequent patches, it will use shared/file backed
        memory.

        * Shared/WebCompiledContentExtensionData.cpp: Added.
        (WebKit::WebCompiledContentExtensionData::encode):
        (WebKit::WebCompiledContentExtensionData::decode):
        * Shared/WebCompiledContentExtensionData.h: Added.
        Add encodable/decodable holder for the compiled content extension data for use in IPC. Right
        now it is doing the naive thing and always copying the data, but in subsequent patches, it will
        use shared/file backed memory.

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        Rename member to match new unification on the name userContentExtension. Change the value from
        the serialized JSON (as a String) to WebCompiledContentExtensionData.

        * UIProcess/API/APIUserContentExtension.cpp: Copied from Source/WebKit2/UIProcess/API/APIUserContentFilter.cpp.
        (API::UserContentExtension::UserContentExtension):
        (API::UserContentExtension::~UserContentExtension):
        (API::UserContentFilter::UserContentFilter): Deleted.
        (API::UserContentFilter::~UserContentFilter): Deleted.
        * UIProcess/API/APIUserContentExtension.h: Copied from Source/WebKit2/UIProcess/API/APIUserContentFilter.h.
        * UIProcess/API/APIUserContentFilter.cpp: Removed.
        * UIProcess/API/APIUserContentFilter.h: Removed.
        Renamed UserContentFilter to APIUserContentExtension. Updated to store the compiled extension (as a WebCompiledContentExtension)
        rather than the serialized JSON.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserContentFilter):
        (WKPageGroupRemoveUserContentFilter):
        (WKPageGroupRemoveAllUserContentFilters):
        * UIProcess/API/C/WKUserContentControllerRef.cpp:
        (WKUserContentControllerAddUserContentFilter):
        (WKUserContentControllerRemoveAllUserContentFilters):
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _addUserContentFilter:]):
        (-[WKUserContentController _removeUserContentFilter:]):
        (-[WKUserContentController _removeAllUserContentFilters]):
        Update for rename of APIUserContentFilter -> UserContentExtension.

        * UIProcess/API/C/WKUserContentFilterRef.cpp:
        (WKUserContentFilterGetTypeID):
        (WKUserContentFilterCreate):
        Update for rename of APIUserContentFilter -> UserContentExtension. Also make WKUserContentFilterCreate eagerly
        compile rule list to a WebCompiledContentExtensionData.

        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter initWithName:serializedRules:]):
        (-[_WKUserContentFilter dealloc]):
        (-[_WKUserContentFilter _apiObject]):
        Update for rename of APIUserContentFilter -> UserContentExtension. Also make initWithName:serializedRules: eagerly
        compile rule list to a WebCompiledContentExtensionData.

        * UIProcess/API/Cocoa/_WKUserContentFilterInternal.h:
        (WebKit::wrapper):
        Update for rename of APIUserContentFilter -> UserContentExtension.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addUserContentExtension):
        (WebKit::WebUserContentControllerProxy::removeUserContentExtension):
        (WebKit::WebUserContentControllerProxy::removeAllUserContentExtensions):
        (WebKit::WebUserContentControllerProxy::addUserContentFilter): Deleted.
        (WebKit::WebUserContentControllerProxy::removeUserContentFilter): Deleted.
        (WebKit::WebUserContentControllerProxy::removeAllUserContentFilters): Deleted.
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::addUserContentExtension):
        (WebKit::WebPageGroup::removeUserContentExtension):
        (WebKit::WebPageGroup::removeAllUserContentExtensions):
        (WebKit::WebPageGroup::addUserContentFilter): Deleted.
        (WebKit::WebPageGroup::removeUserContentFilter): Deleted.
        (WebKit::WebPageGroup::removeAllUserContentFilters): Deleted.
        * UIProcess/WebPageGroup.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserContentExtensions):
        (WebKit::WebUserContentController::removeUserContentExtension):
        (WebKit::WebUserContentController::removeAllUserContentExtensions):
        (WebKit::WebUserContentController::addUserContentFilters): Deleted.
        (WebKit::WebUserContentController::removeUserContentFilter): Deleted.
        (WebKit::WebUserContentController::removeAllUserContentFilters): Deleted.
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):
        (WebKit::WebPageGroupProxy::addUserContentExtension):
        (WebKit::WebPageGroupProxy::removeUserContentExtension):
        (WebKit::WebPageGroupProxy::removeAllUserContentExtensions):
        (WebKit::WebPageGroupProxy::addUserContentFilter): Deleted.
        (WebKit::WebPageGroupProxy::removeUserContentFilter): Deleted.
        (WebKit::WebPageGroupProxy::removeAllUserContentFilters): Deleted.
        * WebProcess/WebPage/WebPageGroupProxy.h:
        * WebProcess/WebPage/WebPageGroupProxy.messages.in:
        Pipe the compiled extension from the UIProcess to the WebProcess.

2015-03-06  Dean Jackson  <dino@apple.com>

        Support "plus-lighter" in mix-blend mode
        https://bugs.webkit.org/show_bug.cgi?id=142416
        <rdar://problem/19993979>

        Reviewed by Darin Adler and Sam Weinig.

        Output the appropriate blending type when logging.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):

2015-03-06  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r180782): Data Detector popovers are not dismissed on scroll or zoom
        https://bugs.webkit.org/show_bug.cgi?id=142371
        -and corresponding-
        rdar://problem/20059224

        Reviewed by Tim Horton.

        This patch has the WKImmediateActionController keep track of whether or not it has 
        an active immediate action. Then we only call into Lookup and DD if the window is 
        key OR if the WKView’s immediateActionController has an active action.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dismissContentRelativeChildWindows]):
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController initWithPage:view:recognizer:]):
        (-[WKImmediateActionController willDestroyView:]):
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController hasActiveImmediateAction]):
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):

2015-03-06  Jeremy Jones  <jeremyj@apple.com>

        Scroll to make the video element visible when exiting fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=141439

        Reviewed by Simon Fraser.

        This patch will restore interface state when exiting fullscreen.
        Adds preparedToReturnToInline to continue exiting once the interface is updated.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID):
        (WebKit::WebVideoFullscreenManagerProxy::fullscreenMayReturnToInline):
        (WebKit::WebVideoFullscreenManagerProxy::preparedToReturnToInline): added.
        * WebProcess/ios/WebVideoFullscreenManager.h:
        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::fullscreenMayReturnToInline):

2015-03-06  Antti Koivisto  <antti@apple.com>

        Rename NetworkCacheStorageCocoa.mm to NetworkCacheStorage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=142401

        Rubber-stamped by Anders Carlsson.

        It is now fully cross-platform.

        * NetworkProcess/cache/NetworkCacheStorage.cpp: Copied from Source/WebKit2/NetworkProcess/cache/NetworkCacheStorageCocoa.mm.
        (WebKit::NetworkCache::Storage::shrinkIfNeeded):
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2015-03-06  Antti Koivisto  <antti@apple.com>

        Don't use dispatch_semaphore in NetworkCacheStorage
        https://bugs.webkit.org/show_bug.cgi?id=142395

        Reviewed by Anders Carlsson.

        * NetworkProcess/cache/NetworkCacheIOChannel.h:
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::read):
        (WebKit::NetworkCache::IOChannel::readSync):

            Add readSync to encapsulate the semaphore.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCache::Storage::traverse):

2015-03-06  Antti Koivisto  <antti@apple.com>

        Move dispatch_data use behind NetworkCache::Data abstraction
        https://bugs.webkit.org/show_bug.cgi?id=142392

        Reviewed by Anders Carlsson.

        * NetworkProcess/cache/NetworkCacheData.h:
        (WebKit::NetworkCache::DispatchPtr::DispatchPtr):
        * NetworkProcess/cache/NetworkCacheDataCocoa.mm:
        (WebKit::NetworkCache::Data::Data):
        (WebKit::NetworkCache::Data::apply):
        (WebKit::NetworkCache::Data::subrange):
        (WebKit::NetworkCache::concatenate):
        (WebKit::NetworkCache::mapFile):
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm:
        (WebKit::NetworkCache::IOChannel::read):
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCache::hashData):
        (WebKit::NetworkCache::decodeEntryMetaData):
        (WebKit::NetworkCache::decodeEntryHeader):
        (WebKit::NetworkCache::decodeEntry):
        (WebKit::NetworkCache::encodeEntryMetaData):
        (WebKit::NetworkCache::encodeEntryHeader):
        (WebKit::NetworkCache::Storage::dispatchFullWriteOperation):
        (WebKit::NetworkCache::mapFile): Deleted.

2015-03-06  Antti Koivisto  <antti@apple.com>

        Use WTF abstraction for page size in NetworkCacheStorage
        https://bugs.webkit.org/show_bug.cgi?id=142396

        Reviewed by Darin Adler.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCache::decodeEntryMetaData):
        (WebKit::NetworkCache::Storage::dispatchFullWriteOperation):

2015-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] SVG fonts are garbled
        https://bugs.webkit.org/show_bug.cgi?id=142377

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2015-03-06  Zan Dobersek  <zdobersek@igalia.com>

        Unguarded GTK-specific member and method usage in DrawingAreaImpl
        https://bugs.webkit.org/show_bug.cgi?id=142391

        Reviewed by Carlos Garcia Campos.

        r180924 introduced unguarded use of m_nativeSurfaceHandleForCompositing
        and LayerTreeHost::setNativeSurfaceHandleForCompositing() in DrawingAreaImpl.
        Definitions for both of these are guarded with USE(TEXTURE_MAPPER_GL) and PLATFORM(GTK),
        so their use should be as well.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):

2015-03-06  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r181140): WebKit2 fails to build on Mavericks buildbot

        Work around Xcode dependency tracking issues by making changes
        to source files that need to be recompiled.

        * NetworkProcess/NetworkProcess.cpp: Update copyright.  Include
        NetworkCache.h since it didn't appear to be included by
        NetworkCacheCoders.h.
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm: Update copyright.

2015-03-05  Antti Koivisto  <antti@apple.com>

        Move disk cache classes to namespace
        https://bugs.webkit.org/show_bug.cgi?id=142339

        Reviewed by Anders Carlsson.

        Move everything to NetworkCache namespace. 

2015-03-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r180924): ASSERTION FAILED: !from.isEmpty() in WebCore::TransformationMatrix::rectToRect
        https://bugs.webkit.org/show_bug.cgi?id=142345

        Reviewed by Martin Robinson.

        This was caused by r180924 that postpones the creation of the
        TextureMapper, which could cause that a layer has not yet a size
        when TextureMapper::paint() is called. This patch moves the
        creation of the TextureMapper to
        LayerTreeHostGtk::setNativeSurfaceHandleForCompositing(), so that
        it's created as soon as it's possible to create. This method is
        called by the drawing area right after creating the
        LayerTreeHostGtk if it already have a handler, or when the handle
        is received from the UI process.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize): Remove the
        nsureTextureMapper call because at this point the layer context ID
        is always 0, so it's impossible to create the TextureMapper.
        (WebKit::LayerTreeHostGtk::compositeLayersToContext): Remove the
        ensureTextureMapper call from here too, since at this point, if we
        have a context, we should also have a TextureMapper. Add an ASSERT
        right before using the TextureMapper.
        (WebKit::LayerTreeHostGtk::setNativeSurfaceHandleForCompositing):
        Create the TextureMapper here.
        (WebKit::LayerTreeHostGtk::ensureTextureMapper): Deleted.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2015-03-05  Anders Carlsson  <andersca@apple.com>

        WKWebView Encoder for remote object communication does not implement encodeInt32:forKey:
        https://bugs.webkit.org/show_bug.cgi?id=142356
        rdar://problem/20058952

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (-[WKRemoteObjectEncoder encodeInt32:forKey:]):
        (-[WKRemoteObjectDecoder decodeInt32ForKey:]):

2015-03-05  Chris Dumez  <cdumez@apple.com>

        NetworkCache efficacy logging is using too much CPU
        https://bugs.webkit.org/show_bug.cgi?id=142186
        <rdar://problem/19632080>

        Reviewed by Antti Koivisto.

        NetworkCache efficacy logging was using too much CPU mostly due to
        database writes. Logging was using ~11.3% of the NetworkProcess'
        CPU usage (~9.2% for writes / ~1.3% for reads).

        This patch buffers writes requests in memory and only writes them
        to disk every 10 seconds. We are thus writing to this less frequently
        and writing more at once, in a single SQL transaction. After this
        change, efficacy logging only accounts for ~3.5% of the NetworkProcess'
        CPU activity (1.5% for writes / 1.2% for reads).

        Now that CPU usage is more acceptable, this patch re-enables the
        network cache efficicy logging.

        * NetworkProcess/cache/NetworkCacheStatistics.h:

        * NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:
        (WebKit::executeSQLCommand):
        (WebKit::executeSQLStatement):
        Call step() instead of executeCommand() because:
        - The input statement is already prepared.
        - step() does not finalize() the statement and thus we caller can
          reuse it after calling reset().

        (WebKit::NetworkCacheStatistics::NetworkCacheStatistics):
        (WebKit::NetworkCacheStatistics::initialize):
        (WebKit::NetworkCacheStatistics::bootstrapFromNetworkCache):
        (WebKit::NetworkCacheStatistics::recordNotCachingResponse):
        (WebKit::NetworkCacheStatistics::recordNotUsingCacheForRequest):
        (WebKit::NetworkCacheStatistics::recordRetrievalFailure):
        (WebKit::NetworkCacheStatistics::markAsRequested):
        (WebKit::NetworkCacheStatistics::writeTimerFired):
        (WebKit::NetworkCacheStatistics::queryWasEverRequested):
        (WebKit::NetworkCacheStatistics::addHashesToDatabase):
        (WebKit::NetworkCacheStatistics::addStoreDecisionsToDatabase):
        (WebKit::NetworkCacheStatistics::addHashToDatabase): Deleted.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        Re-enable the network cache efficacy logging.

2015-03-05  Antti Koivisto  <antti@apple.com>

        Switch NetworkCacheStorage to WorkQueue abstraction
        https://bugs.webkit.org/show_bug.cgi?id=142337

        Reviewed by Anders Carlsson.

        Don't use dispatch_async directly.

        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCacheStorage::ioQueue):
        (WebKit::NetworkCacheStorage::backgroundIOQueue):
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::NetworkCacheStorage):
        (WebKit::NetworkCacheStorage::initialize):
        (WebKit::NetworkCacheStorage::removeEntry):
        (WebKit::NetworkCacheStorage::dispatchReadOperation):
        (WebKit::retrieveFromMemory):
        (WebKit::NetworkCacheStorage::traverse):
        (WebKit::NetworkCacheStorage::dispatchFullWriteOperation):
        (WebKit::NetworkCacheStorage::dispatchHeaderWriteOperation):
        (WebKit::NetworkCacheStorage::clear):
        (WebKit::NetworkCacheStorage::shrinkIfNeeded):
        (WebKit::NetworkCacheStorage::deleteOldVersions):

2015-03-05  Lukasz Bialek  <l.bialek@samsung.com>

        [EFL][WK2] Crash when "Download Linked File" from MiniBrowser context menu is clicked
        https://bugs.webkit.org/show_bug.cgi?id=131162

        Reviewed by Gyuyoung Kim.

        "Download Linked File" crashes because of null-pointer exception of Download Job.
        Due to architectural difficulties, easy fix is not possible (EwkView is needed in
        DownloadManager to create DownloadJobs and it is only used to notify the client 
        about download (finished, error, cancel) via smart callback using EwkView (Evas_Object).

        Propose a new callbacks which are view independent and detach EFL's DownloadManager
        from EwkView. It makes DownloadManagerEFL consistent with WKContextDownload.
        Fix the crash and restore download functionality.

        * PlatformEfl.cmake:
        Enable newly reimplemented tests
        * UIProcess/API/efl/EwkViewCallbacks.h:
        Remove old callback mechanism
        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_download_callbacks_set):
        * UIProcess/API/efl/ewk_context.h:
        Declare new callback functions and registration functions
        * UIProcess/API/efl/ewk_download_job.cpp:
        (EwkDownloadJob::EwkDownloadJob):
        (EwkDownloadJob::view): Deleted.
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        (EwkDownloadJob::create):
        Remove EwkView dependency
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
        Alter tests to new callback mechanism
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadManagerEfl::didStart):
        (WebKit::DownloadManagerEfl::didFail):
        (WebKit::DownloadManagerEfl::didCancel):
        (WebKit::DownloadManagerEfl::didFinish):
        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
        (WebKit::DownloadManagerEfl::registerDownloadJob):
        (WebKit::DownloadManagerEfl::setCallbacks):
        * UIProcess/efl/DownloadManagerEfl.h:
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebViewEfl::handleDownloadRequest):
        Add support of new callback mechanism

2015-03-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Disable RC4
        https://bugs.webkit.org/show_bug.cgi?id=140014

        Reviewed by Carlos Garcia Campos.

        Disallow RC4-based ciphersuites when performing TLS negotiation,
        because it is no longer considered secure.

        * NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp:
        (main):
        * WebProcess/EntryPoint/unix/WebProcessMain.cpp:
        (main):

2015-03-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Hide Promise with runtime flags under Cocoa JSContext API
        https://bugs.webkit.org/show_bug.cgi?id=141965

        Reviewed by Filip Pizlo.

        Add new JSC runtime flag, PromiseDisabled.

        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2015-03-04  Beth Dakin  <bdakin@apple.com>

        Attempted build fix.

        * UIProcess/API/Cocoa/WKViewPrivate.h:

2015-03-04  Beth Dakin  <bdakin@apple.com>

        Message UI process when contentSize changes
        https://bugs.webkit.org/show_bug.cgi?id=142294
        -and corresponding-
        rdar://problem/19963165

        Reviewed by Andreas Kling.

        This patch un-ifdefs the didChangeContentSize message so that we can use it on Mac 
        as well. 

        New private method that subclasses can override when they need to do something 
        with contentSize changes.
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didChangeContentSize:]):
        * UIProcess/PageClient.h:

        Un-ifdef.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeContentSize):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didChangeContentSize):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):

        Stubs for other platforms now that the pure-virtual is un-masked.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didChangeContentSize):
        * UIProcess/API/gtk/PageClientImpl.h:

2015-03-04  Antti Koivisto  <antti@apple.com>

        Factor platform I/O out from NetworkCacheStorage
        https://bugs.webkit.org/show_bug.cgi?id=142279

        Reviewed by Chris Dumez.

        * NetworkProcess/cache/NetworkCacheData.h: Added.
        * NetworkProcess/cache/NetworkCacheDataCocoa.mm: Added.

            NetworkCacheStorage::Data -> NetworkCacheData
            Move to files of its own.

        * NetworkProcess/cache/NetworkCacheIOChannel.h: Added.
        * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm: Added.

            Add abstraction for dispatch IO channels.

2015-03-04  Joseph Pecoraro  <pecoraro@apple.com>

        Remove WK_AVAILABLE and related macros when we cannot determine iOS/Mac version
        https://bugs.webkit.org/show_bug.cgi?id=142252
        rdar://problem/19983833

        Reviewed by David Kilzer.

        When mac / ios version was unable to be determined strip the WK_AVAILABLE
        and WK_DEPRECATED macros to avoid outputing a broken macro.

        * mac/postprocess-framework-headers.sh:

2015-03-04  Debarshi Ray  <debarshir@gnome.org>

        [GTK] WebView should hold a reference on WebContext because non-default contexts are a reality
        https://bugs.webkit.org/show_bug.cgi?id=142225

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRequestFavicon):
        (webkitWebViewWatchForChangesInFavicon):
        (webkitWebViewDisconnectFaviconDatabaseSignalHandlers):
        (webkitWebViewConstructed):
        (webkitWebViewGetProperty):
        (webkitWebViewDispose):
        (webkitWebViewLoadChanged):
        (webkitWebViewLoadFailedWithTLSErrors):
        (webkit_web_view_get_context):
        (webkit_web_view_download_uri):

2015-03-03  Shivakumar JM  <shiva.jm@samsung.com>

        Fix build warning in WebKit2/Shared module.
        https://bugs.webkit.org/show_bug.cgi?id=142213

        Reviewed by Simon Fraser.

        Fix build warning by removing argument name from function.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::pathPointCountApplierFunction):

2015-03-03  Andy Estes  <aestes@apple.com>

        [Content Filtering] Separate unblock handling into its own class
        https://bugs.webkit.org/show_bug.cgi?id=142251

        Reviewed by Andreas Kling.

        Adopted ContentFilterUnblockHandler.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ContentFilterUnblockHandler>::encode):
        (IPC::ArgumentCoder<ContentFilterUnblockHandler>::decode):
        (IPC::ArgumentCoder<ContentFilter>::encode): Deleted.
        (IPC::ArgumentCoder<ContentFilter>::decode): Deleted.
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrame):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad):
        (WebKit::WebFrameProxy::contentFilterDidHandleNavigationAction):
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::setContentFilterUnblockHandler):
        (WebKit::WebFrameProxy::setContentFilterForBlockedLoad): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::contentFilterDidBlockLoad):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2015-03-03  Chris Dumez  <cdumez@apple.com>

        [WK2] Fix memory leak in _getCookieHeadersForTask
        https://bugs.webkit.org/show_bug.cgi?id=142245

        Reviewed by Alexey Proskuryakov.

        Fix memory leak in _getCookieHeadersForTask. We are leaking the CFDictionary
        returned by webKitCookieStorageCopyRequestHeaderFieldsForURL().

        This patch addresses the issue by storing the return CFDictionary in a
        RetainPtr<CFDictionaryRef>.

        * Shared/mac/CookieStorageShim.mm:
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

2015-03-03  Enrica Casucci  <enrica@apple.com>

        Incomplete dictation results in text fields in a web page.
        https://bugs.webkit.org/show_bug.cgi?id=142240
        rdar://problem/19953432

        Reviewed by Tim Horton.

        The empty stub for insertDictationResult:withCorrectionIdentifier
        must be removed. This way UIKit will call insertText and do the right thing.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView insertDictationResult:withCorrectionIdentifier:]): Deleted.

2015-03-03  Dean Jackson  <dino@apple.com>

        Controls panel should have system blurry background
        https://bugs.webkit.org/show_bug.cgi?id=142154
        <rdar://problem/20000964>

        Reviewed by Simon Fraser.

        In order to replicate the system style of media controls
        on OS X and iOS, we need to expose a special -webkit-appearance.
        This patch adds the new property value, and implements
        the iOS part of the appearance, which is a blurry shaded
        background.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext): Add entries for
        the new layer types, even though they are not correct yet.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::updateCustomAppearance):
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties): UIBackdropViews
        have a defined hierarchy that we don't create. We need to make sure we add our
        children to the right subview.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::description): Logging.

        * UIProcess/ios/RemoteLayerTreeHostIOS.mm: Rename existing WKBackdropView
        to WKSimpleBackdropView, and add a new WKBackdropView that inherits
        from UIBackdropView.
        (-[WKBackdropView hitTest:withEvent:]):
        (-[WKBackdropView description]):
        (WebKit::RemoteLayerTreeHost::createLayer): Handle the new LayerTypes.
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):

2015-03-03  Chris Dumez  <cdumez@apple.com>

        Access ApplicationCacheStorage global instance via singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=142239

        Reviewed by Anders Carlsson.

        Access ApplicationCacheStorage global instance via singleton() static
        member function as per WebKit coding style.

2015-03-03  Joseph Pecoraro  <pecoraro@apple.com>

        Build Fix: Add fall back handling in postprocess script for missing/unknown platform name.

        Rubber-stamped by David Kilzer.

        * mac/postprocess-framework-headers.sh:

2015-03-03  Enrica Casucci  <enrica@apple.com>

        Build fix for iOS.

        Unreviewed.

        * UIProcess/ios/WKContentViewInteraction.mm: Adding forward declaration.

2015-03-03  Antti Koivisto  <antti@apple.com>

        Include key to NetworkCacheStorage::Entry
        https://bugs.webkit.org/show_bug.cgi?id=142215

        Reviewed by Chris Dumez.

        This simplified code. The key is saved as part of the entry so it makes logical sense too.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::makeCacheKey):
        (WebKit::encodeStorageEntry):
        (WebKit::NetworkCache::retrieve):
        (WebKit::NetworkCache::store):
        (WebKit::NetworkCache::update):
        (WebKit::NetworkCache::traverse):
        (WebKit::entryAsJSON):
        (WebKit::NetworkCache::dumpContentsToFile):
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCacheKey::operator=):
        * NetworkProcess/cache/NetworkCacheKey.h:
        (WebKit::NetworkCacheKey::isNull):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::decodeEntry):
        (WebKit::encodeEntryHeader):
        (WebKit::retrieveFromMemory):
        (WebKit::NetworkCacheStorage::retrieve):
        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::update):
        (WebKit::NetworkCacheStorage::traverse):
        (WebKit::NetworkCacheStorage::dispatchPendingWriteOperations):
        (WebKit::NetworkCacheStorage::dispatchFullWriteOperation):
        (WebKit::NetworkCacheStorage::dispatchHeaderWriteOperation):

2015-03-03  Antti Koivisto  <antti@apple.com>

        Cache shrink leaves behind empty partition directories
        https://bugs.webkit.org/show_bug.cgi?id=142217

        Reviewed by Andreas Kling.

        * NetworkProcess/cache/NetworkCacheFileSystemPosix.h:
        (WebKit::traverseCacheFiles):

            No need for std::function.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::shrinkIfNeeded):

            After shrink traverse through the partition directories and try to delete them.
            System knows if they are actually empty.

2015-03-03  Anders Carlsson  <andersca@apple.com>

        Use the correct display name for website data for local files
        https://bugs.webkit.org/show_bug.cgi?id=142228

        Reviewed by Dan Bernstein.

        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (displayNameForLocalFiles):
        Add new helper function.

        (WebKit::WebsiteDataRecord::displayNameForCookieHostName):
        Check if the hostname is kCFHTTPCookieLocalFileDomain.

        (WebKit::WebsiteDataRecord::displayNameForOrigin):
        Handle file URLs as well.

2015-03-03  Enrica Casucci  <enrica@apple.com>

        Fixed typo in platform guard in http://trac.webkit.org/changeset/180939.

        Unreviewed.

        * UIProcess/ios/WKContentViewInteraction.mm:

2015-03-03  Enrica Casucci  <enrica@apple.com>

        Adopt new API for keyboard interaction.
        https://bugs.webkit.org/show_bug.cgi?id=142201
        rdar://problem/19924949

        Reviewed by Joseph Pecoraro.

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

2015-03-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r177075): WebProcess crashes when entering accelerating compositing mode before the WebView is realized
        https://bugs.webkit.org/show_bug.cgi?id=142079

        Reviewed by Žan Doberšek.

        The problem is that the texture mapper and native window handler
        are initialized when the LayerTreeHost is initialized, assuming
        the UI process has already sent the native window handler to the
        web process, but that doesn't always happen since we moved the
        redirected window creation to realize in r177075.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::nativeSurfaceHandleForCompositing): Deleted.
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode): Call
        LayerTreeHost::setNativeSurfaceHandleForCompositing if we
        already have a native window handle at this point.
        (WebKit::DrawingAreaImpl::setNativeSurfaceHandleForCompositing):
        Call LayerTreeHost::setNativeSurfaceHandleForCompositing also when
        not using threaded compositing.
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::makeContextCurrent): Helper function to
        ensure a context and making it current.
        (WebKit::LayerTreeHostGtk::ensureTextureMapper): Ensure a texture
        is created for the current context.
        (WebKit::LayerTreeHostGtk::initialize): Use makeContextCurrent()
        and ensureTextureMapper(), and remove the LayerTreeContext
        initialization since that's is now always initialized in
        setNativeSurfaceHandleForCompositing().
        (WebKit::LayerTreeHostGtk::compositeLayersToContext): Use
        makeContextCurrent() helper function and also call
        ensureTextureMapper() just in case the texture could not be
        created during initialization because the native window handle was
        not yet available.
        (WebKit::LayerTreeHostGtk::flushAndRenderLayers): Use makeContextCurrent().
        (WebKit::LayerTreeHostGtk::setNativeSurfaceHandleForCompositing):
        Initialize the LayerTreeContext.
        (WebKit::LayerTreeHostGtk::glContext): Deleted.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2015-03-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Remove unnecessary create() factory functions.
        https://bugs.webkit.org/show_bug.cgi?id=142161

        Reviewed by Chris Dumez.

        We can replace some create() factory functions with std::make_unique(). Because
        it just returns new instance. Even some of those functions have used std::unique_ptr<>
        instead of std::make_unique<>. Fixed all.

        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBTransaction.h:
        (WebKit::SQLiteIDBTransaction::create): Deleted.
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::establishTransaction):
        * Platform/efl/DispatchQueueWorkItemEfl.h:
        (WorkItem::dispatch):
        (WorkItem::create): Deleted.
        * UIProcess/API/gtk/PageClientImpl.h:
        (WebKit::PageClientImpl::create): Deleted.
        * UIProcess/API/gtk/WebKitTextChecker.h:
        (WebKitTextChecker::create): Deleted.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseConstructed):

2015-03-02  Brady Eidson  <beidson@apple.com>

        Lots of: ERROR: Unhandled web process message WebPageGroupProxy:RemoveAllUserContentFilters
        https://bugs.webkit.org/show_bug.cgi?id=142155

        Reviewed by Simon Fraser.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage): Return after handling WebPageGroupProxy messages
          instead of logging an error.

2015-03-02  Antti Koivisto  <antti@apple.com>

        Add way to dump cache meta data to file
        https://bugs.webkit.org/show_bug.cgi?id=142183

        Add a missing return so we don't try to decode a null entry.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::dumpContentsToFile):

2015-03-02  Anders Carlsson  <andersca@apple.com>

        Return disk cache entries from the new disk cache
        https://bugs.webkit.org/show_bug.cgi?id=142190

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::fetchDiskCacheEntries):
        Call NetworkCache::traverse() to get all the cache entries, unique their origins and pass them back with the completion handler.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::traverse):
        New helper function that traverses network cache entries.

        * NetworkProcess/cache/NetworkCache.h:

2015-03-02  Antti Koivisto  <antti@apple.com>

        Add way to dump cache meta data to file
        https://bugs.webkit.org/show_bug.cgi?id=142183

        Reviewed by Andreas Kling.

        Dump goes to WebKitCache/dump.json. On OSX it can be triggered with

        notifyutil -p com.apple.WebKit.Cache.dump

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::initialize):
        (WebKit::NetworkCache::dumpFilePath):
        (WebKit::entryAsJSON):
        (WebKit::NetworkCache::dumpContentsToFile):
        (WebKit::NetworkCache::clear):

            Also clear any dumps.

        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCacheStorage::baseDirectoryPath):
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::fileNameForKey):
        (WebKit::filePathForKey):
        (WebKit::openFile):
        (WebKit::openFileForKey):
        (WebKit::decodeEntryHeader):

            Separate header decoding.

        (WebKit::decodeEntry):
        (WebKit::NetworkCacheStorage::traverse):

            Add asynchronous cache traversal inteface.

2015-03-02  Anders Carlsson  <andersca@apple.com>

        WebsiteDataStore should handle deleting cookies
        https://bugs.webkit.org/show_bug.cgi?id=142185

        Reviewed by Beth Dakin.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        When asked to delete cookies, do so.

        * NetworkProcess/NetworkProcess.h:
        Update the deleteWebsiteDataForOrigins signature.

        * NetworkProcess/NetworkProcess.messages.in:
        Add cookieHostNames to DeleteWebsiteDataForOrigins.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        * UIProcess/Network/NetworkProcessProxy.h:
        Update to take a vector of cookie host names.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        Figure out if we need to ask the network process to delete data.

2015-03-02  Anders Carlsson  <andersca@apple.com>

        WebsiteDataStore should support getting cookie host names
        https://bugs.webkit.org/show_bug.cgi?id=142178

        Reviewed by Dan Bernstein.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        Assert that we're destroyed from the main thread since we end up copying the website data struct.

        * Shared/WebsiteData/WebsiteData.cpp:
        (WebKit::WebsiteData::encode):
        (WebKit::WebsiteData::decode):
        * Shared/WebsiteData/WebsiteData.h:
        Add a hostnamesWithCookies member.

        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::displayNameForCookieHostName):
        Add a new function that will return the display name for a cookie host name.

        (WebKit::WebsiteDataRecord::addCookieHostName):
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        Add a hash set of cookie host names.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        Create data records for each host name with cookies.

2015-03-02  Jer Noble  <jer.noble@apple.com>

        [WK2][Mac] WebPageProxy::supressVisibilityUpdates() should suppress visibility updates.
        https://bugs.webkit.org/show_bug.cgi?id=141907

        Reviewed by Tim Horton.

        At some point, the window/view/page visibility update code was refactored such that setting
        WebPageProxy::setSuppressVisibilityUpdate() no longer suppressed visibility updates. This causes
        full screen animations to become "flashy" when moving the WebView between the regular and full
        screen window, as a HTMLMediaElement in the full screen animation will receive a "!visible"
        notification and disconnect its rendering pipeline.

        In WebPageProxy::viewStateDidChange(), respect m_suppressVisibilityUpdates and bail out early
        if set. In WebPageProxy::setSuppressVisibilityUpdates(), trigger an explicit update after
        clearing m_suppressVisibilityUpdates.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setSuppressVisibilityUpdates):
        (WebKit::WebPageProxy::viewStateDidChange):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::setSuppressVisibilityUpdates): Deleted.

2015-03-02  Jer Noble  <jer.noble@apple.com>

        [WK1][WK2][Mac] Fullscreen animation is incorrect when page is scaled.
        https://bugs.webkit.org/show_bug.cgi?id=142121

        Reviewed by Simon Fraser.

        Change the order of operations when entering or exiting fullscreen. Change the page scale to
        1 before entering, so the final screen rect takes that scale into account, and vice-versa on
        exiting.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController exitFullScreen]):

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

        Make clip-path work on <video>, <canvas> etc.
        https://bugs.webkit.org/show_bug.cgi?id=138684

        Reviewed by Darin Adler.
        
        Support encode/decode for WebCore Path objects, which is done by traversing
        the path.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::pathPointCountApplierFunction):
        (IPC::pathEncodeApplierFunction):
        (IPC::ArgumentCoder<Path>::encode):
        (IPC::ArgumentCoder<Path>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer): Actually apply the path and wind rule to the shape layer.
        * Shared/mac/RemoteLayerTreeTransaction.h: Include path and wind rule in the layer properties.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode): Encode shape and wind rule.
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode): Decode shape and wind rule.
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::shapePath):
        (WebKit::PlatformCALayerRemote::setShapePath):
        (WebKit::PlatformCALayerRemote::shapeWindRule):
        (WebKit::PlatformCALayerRemote::setShapeWindRule):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

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

        Make NotificationCenter / Notification suspendable
        https://bugs.webkit.org/show_bug.cgi?id=142117
        <rdar://problem/19923085>

        Reviewed by Andreas Kling.

        Provide implementation for NotificationClient::hasPendingPermissionRequests().

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::hasPendingPermissionRequests):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        * WebProcess/WebCoreSupport/WebNotificationClient.cpp:
        (WebKit::WebNotificationClient::hasPendingPermissionRequests):
        * WebProcess/WebCoreSupport/WebNotificationClient.h:

2015-03-01  Antti Koivisto  <antti@apple.com>

        Enable new disk cache on iOS
        https://bugs.webkit.org/show_bug.cgi?id=142148

        Reviewed by Sam Weinig.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:

            iOS build fix.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):

            Disable the efficacy logging by default for now. It has significant performance impact.

        * config.h:

            Enable it.

2015-02-28  Anders Carlsson  <andersca@apple.com>

        WebsiteDataStore should handle fetching and deleting local storage data
        https://bugs.webkit.org/show_bug.cgi?id=142137

        Reviewed by Sam Weinig.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::deleteEntriesForOrigins):
        Add a new function that deletes entries from multiple origins.

        * UIProcess/Storage/StorageManager.h:
        Add new members.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        Fetch local storage data as well.

        (WebKit::WebsiteDataStore::removeData):
        Delete local storage data as well.

2015-02-28  Anders Carlsson  <andersca@apple.com>

        Fetch cache origins from the network process
        https://bugs.webkit.org/show_bug.cgi?id=142135

        Reviewed by Dan Bernstein.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::cfURLCacheOrigins):
        Add a new helper function that returns a vector of CFURL cache origins.

        (WebKit::fetchDiskCacheOrigins):
        Fetch the disk cache origins and pass them along to the completion handler. Currently we don't handle the new disk cache.

        (WebKit::NetworkProcess::fetchWebsiteData):
        Create a callback aggregator and fetch disk cache origins if we're asked for it.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessTypeForDataFetch):
        New helper function that computes if we need to launch the network process in order to fetch data.

        (WebKit::WebsiteDataStore::fetchData):
        Fetch website data from the network process as well.

2015-02-28  Anders Carlsson  <andersca@apple.com>

        Simplify WebResourceCacheManagerCFNet.mm code
        https://bugs.webkit.org/show_bug.cgi?id=142134

        Reviewed by Dan Bernstein.

        - ENABLE(CACHE_PARTITIONING) is always true on Mac and iOS, so remove those #ifdefs.
        - Make cfURLCacheHostNamesWithCallback and clearCFURLCacheForHostNames public
          so they can be used by the new WebsiteDataStore code in an upcoming patch.
        - Change cfURLCacheHostNamesWithCallback to take an std::function instead of a block.

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins):
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.mm:
        (WebKit::partitionName):
        (WebKit::WebResourceCacheManager::cfURLCacheHostNamesWithCallback):
        (WebKit::WebResourceCacheManager::clearCFURLCacheForHostNames):
        (WebKit::WebResourceCacheManager::cfURLCacheHostNames): Deleted.

2015-02-28  Commit Queue  <commit-queue@webkit.org>

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

        Broke nightlies (Requested by ap on #webkit).

        Reverted changeset:

        "[WK2] Drop legacy WKBundlePageDiagnosticLoggingClient API"
        https://bugs.webkit.org/show_bug.cgi?id=141176
        http://trac.webkit.org/changeset/180804

2015-02-27  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL][GTK] Fix build break after r180790,180798 
        https://bugs.webkit.org/show_bug.cgi?id=142127

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:

2015-02-27  Chris Dumez  <cdumez@apple.com>

        [WK2] Drop legacy WKBundlePageDiagnosticLoggingClient API
        https://bugs.webkit.org/show_bug.cgi?id=141176

        Reviewed by Sam Weinig.

        Drop legacy WKBundlePageDiagnosticLoggingClient WK2 API as we are now
        exposing this functionality via WKPageDiagnosticLoggingClient.h on
        UIProcess side. The client-side has already been ported over.

        * CMakeLists.txt:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI): Deleted.
        (WebKit::toDiagnosticLoggingResultType): Deleted.
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI):
        * UIProcess/API/C/WKDiagnosticLoggingResultType.h: Renamed from Source/WebKit2/Shared/API/c/WKDiagnosticLoggingResultType.h.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetDiagnosticLoggingClient): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageDiagnosticLoggingClient.h: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.h: Removed.
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::close):
        (WebKit::WebPage::initializeInjectedBundleDiagnosticLoggingClient): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleDiagnosticLoggingClient): Deleted.

2015-02-27  Anders Carlsson  <andersca@apple.com>

        Rename WebResourceCacheManagerCFNet.cpp to WebResourceCacheManagerCFNet.mm

        Rubber-stamped by Dan Bernstein.

        This will let us use lambda to block conversion in a subsequent patch.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.mm: Renamed from Source/WebKit2/WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp.

2015-02-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180203 and r180210.
        https://bugs.webkit.org/show_bug.cgi?id=142116

        broke process suspension and tile map (Requested by thorton on
        #webkit).

        Reverted changesets:

        "Adopt CAMachPort-as-layer-contents"
        https://bugs.webkit.org/show_bug.cgi?id=141687
        http://trac.webkit.org/changeset/180203

        "Fix the !USE(IOSURFACE) build"
        http://trac.webkit.org/changeset/180210

2015-02-27  Sam Weinig  <sam@webkit.org>

        Add WebKit2 SPI to create a DOM File object
        https://bugs.webkit.org/show_bug.cgi?id=142109

        Reviewed by Tim Horton.

        Add a new handle type for exposing a DOM File object to script. Follow
        the pattern of WKBundleNodeHandleRef and WKBundleRangeHandleRef with the
        new class WKBundleFileHandleRef. It can be created for a specific path,
        and then the JS wrapper can be obtained via WKBundleFrameGetJavaScriptWrapperForFileForWorld.

        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFileHandleRef.cpp: Added.
        (WKBundleFileHandleGetTypeID):
        (WKBundleFileHandleCreateWithPath):
        * WebProcess/InjectedBundle/API/c/WKBundleFileHandleRef.h: Added.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetJavaScriptWrapperForFileForWorld):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleFileHandle.cpp: Added.
        (WebKit::domHandleCache):
        (WebKit::InjectedBundleFileHandle::create):
        (WebKit::InjectedBundleFileHandle::getOrCreate):
        (WebKit::InjectedBundleFileHandle::InjectedBundleFileHandle):
        (WebKit::InjectedBundleFileHandle::~InjectedBundleFileHandle):
        (WebKit::InjectedBundleFileHandle::coreFile):
        * WebProcess/InjectedBundle/DOM/InjectedBundleFileHandle.h: Added.
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsWrapperForWorld):
        * WebProcess/WebPage/WebFrame.h:

2015-02-27  Beth Dakin  <bdakin@apple.com>

        Lookup panel dismisses when pages are loading in other tabs/windows
        https://bugs.webkit.org/show_bug.cgi?id=142104
        -and corresponding-
        rdar://problem/19882137

        Reviewed by Tim Horton.

        Until rdar://problem/13875766 is resolved, we should only call into Lookup and 
        DataDetectors for key windows.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dismissContentRelativeChildWindows]):

2015-02-27  Anders Carlsson  <andersca@apple.com>

        Add infrastructure for handling website data in the network process
        https://bugs.webkit.org/show_bug.cgi?id=142092

        Reviewed by Andreas Kling.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::fetchWebsiteData):
        (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
        Send back "Did" messages without actually doing anything for now.

        * NetworkProcess/NetworkProcess.h:
        Add new members.

        * NetworkProcess/NetworkProcess.messages.in:
        Add FetchWebsiteData and DeleteWebsiteDataForOrigins messages.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        Assert that all maps are empty.

        (WebKit::NetworkProcessProxy::fetchWebsiteData):
        (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
        Add callbacks and send fetch and delete messages respectively.

        (WebKit::NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch):
        Make sure to invoke all callbacks.

        (WebKit::NetworkProcessProxy::didFetchWebsiteData):
        Find the callback and invoke it.

        (WebKit::NetworkProcessProxy::didDeleteWebsiteDataForOrigins):
        Ditto.

        * UIProcess/Network/NetworkProcessProxy.h:
        Add new members.

        * UIProcess/Network/NetworkProcessProxy.messages.in:
        Add DidFetchWebsiteData and DidDeleteWebsiteDataForOrigins messages.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionDidClose):
        Just pass an empty WebsiteData object.

2015-02-26  Enrica Casucci  <enrica@apple.com>

        [WK2] REGRESSION(r180465): WebKit::WebPage::editorState() triggers a layout.
        https://bugs.webkit.org/show_bug.cgi?id=142015

        Reviewed by Alexey Proskuryakov.

        We no longer compute the font information at selection
        when we update the editor state.
        Instead, we request the font information only when the selection
        changes and the font panel is visible.
        I added an observer to be notified of the font panel visibility
        changes to update NSFontManager to reflect the font at the
        current selection.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView updateFontPanelIfNeeded]):
        (-[WKView _selectionChanged]):
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]):
        (-[WKView observeValueForKeyPath:ofObject:change:context:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::fontAtSelection):
        (WebKit::WebPageProxy::fontAtSelectionCallback):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformEditorState):
        (WebKit::WebPage::fontAtSelection):

2015-02-27  Brady Eidson  <beidson@apple.com>

        Add API to remove a single content filter.
        <rdar://problem/19977764> and https://bugs.webkit.org/show_bug.cgi?id=142088

        Reviewed by Sam Weinig.

        * Shared/WebPageGroupData.h:

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupRemoveUserContentFilter):

        * UIProcess/API/C/WKPageGroup.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _removeUserContentFilter:]):

        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addUserContentFilter):
        (WebKit::WebUserContentControllerProxy::removeUserContentFilter):
        (WebKit::WebUserContentControllerProxy::removeAllUserContentFilters):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:

        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::addUserContentFilter):
        (WebKit::WebPageGroup::removeUserContentFilter):
        * UIProcess/WebPageGroup.h:

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::removeUserContentFilter):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:

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

2015-02-26  Anders Carlsson  <andersca@apple.com>

        Add API to remove all website data for the given data records
        https://bugs.webkit.org/show_bug.cgi?id=142060

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        Add new method declaration.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (toWebsiteDataRecords):
        Add a helper function that converts an NSArray of _WKWebsiteDataRecords to a Vector of WebsiteDataRecords.

        (-[_WKWebsiteDataStore removeDataOfTypes:forDataRecords:completionHandler:]):
        Call through to the underlying WebsiteDataStore.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        Figure out which processes to call deleteWebsiteDataForOrigins for and do so. Add a callback aggregator so we can
        call the completion handler at the right time.

        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Add new members.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::deleteWebsiteDataForOrigins):
        Use the newly added MemoryCache member function to delete all resources matching the set of origins.

2015-02-26  Chris Dumez  <cdumez@apple.com>

        Rename DatabaseManager::manager() to DatabaseManager::singleton()
        https://bugs.webkit.org/show_bug.cgi?id=142054

        Reviewed by Ryosuke Niwa.

        Rename DatabaseManager::manager() to DatabaseManager::singleton() as
        per coding style and use WTF::NeverDestroyed.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::initialize):
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManager::deleteAllDatabases):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-02-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] [iOS] Parsing support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=141939

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

2015-02-26  Brady Eidson  <beidson@apple.com>

        Make WKPageGroupRemoveAllUserContentFilters actually remove all user content filters
        https://bugs.webkit.org/show_bug.cgi?id=142047

        Reviewed by Geoff Garen.

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupRemoveAllUserContentFilters): Remove all content filters instead of removing all user scripts.

2015-02-25  Anders Carlsson  <andersca@apple.com>

        Add (unused for now) code to delete website data for a set of origins
        https://bugs.webkit.org/show_bug.cgi?id=142019

        Reviewed by Beth Dakin.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        Assert that there are no pending callbacks.

        (WebKit::WebProcessProxy::connectionDidClose):
        Invoke all the didDeleteWebsiteDataForOrigins callbacks.

        (WebKit::WebProcessProxy::didDeleteWebsiteDataForOrigins):
        Grab the didDeleteWebsiteDataForOrigins and invoke it.

        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
        Add the pending callback and send a DeleteWebsiteDataForOrigins to the web process.

        * UIProcess/WebProcessProxy.h:
        Add new members.

        * UIProcess/WebProcessProxy.messages.in:
        Add a DidDeleteWebsiteDataForOrigins message.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::deleteWebsiteDataForOrigins):
        For now, just send back a DidDeleteWebsiteDataForOrigins message.

        * WebProcess/WebProcess.h:
        Add new members.

        * WebProcess/WebProcess.messages.in:
        Add a DeleteWebsiteDataForOrigins message.

2015-02-25  Shivakumar JM  <shiva.jm@samsung.com>

        Fix build warning in WebKit2/UIProcess module.
        https://bugs.webkit.org/show_bug.cgi?id=142014

        Reviewed by Anders Carlsson.

        Fix build warning by using UNUSED_PARAM macro.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeWebProcessAccessTypeForDataFetch):

2015-02-24  Simon Fraser  <simon.fraser@apple.com>

        Clarify some resizing terminology in ScrollView/FrameView
        https://bugs.webkit.org/show_bug.cgi?id=141996

        Reviewed by Zalan Bujtas.

        ScrollableArea/ScrollView/FrameView had some confusing terminology around
        contentsResized/visibleContentsResized/fixedLayoutSizeChanged.
        
        Clarify this by distinguishing between:
        1. Available size changes because of
            i) non-overlay scrollbar presence
           ii) ScrollableArea frame change
        2. Removing fixedLayoutSizeChanged() and just treating it like an
           available size change.
           
        contentsResized() is relegated to simply being a hook that allows Mac to
        flash overlay scrollbars.
        
        The confusingly named visibleContentsResized() is now updateContentsSize(),
        and is the way that a ScrollableArea tells its subclasss that it should recompute
        the size of the contents (i.e. do a layout).

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::scrollbarStyleChanged): Call the base class method,
        which takes care of 

2015-02-24  Simon Fraser  <simon.fraser@apple.com>

        Use an enum for scrollbar style
        https://bugs.webkit.org/show_bug.cgi?id=141985

        Reviewed by Beth Dakin.
        
        Switch to an enum class for the scrollbar style (normal or overlay).
        
        Sadly it still has to be passed as an int across the process boundary.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::recommendedScrollbarStyleDidChange):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::recommendedScrollbarStyleDidChange):
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::scrollbarStyleChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::recommendedScrollbarStyleDidChange):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2015-02-24  Chris Dumez  <cdumez@apple.com>

        [Mac][WK2] ASSERTION FAILED: m_sendPort in IPC::Connection::open()
        https://bugs.webkit.org/show_bug.cgi?id=141934

        Reviewed by Darin Adler.

        Speculative fix for "ASSERTION FAILED: m_sendPort" in
        IPC::Connection::open(). This assertion seems to indicate we ended
        up in IPC::Connection::open() with MACH_PORT_NULL as port.

        I found that in XPCServiceInitializerDelegate::getConnectionIdentifier()
        we return true unconditionally, even though
        xpc_dictionary_copy_mach_send() can return MACH_PORT_NULL. This patch
        updates this method to add a check for MACH_PORT_NULL and return false
        in this case.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::getConnectionIdentifier):

2015-02-24  Commit Queue  <commit-queue@webkit.org>

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

        Lots of new test failures (Requested by smfr on #webkit).

        Reverted changeset:

        "Parsing support for -webkit-trailing-word"
        https://bugs.webkit.org/show_bug.cgi?id=141939
        http://trac.webkit.org/changeset/180599

2015-02-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break on EFL and GTK port since r180585.
        https://bugs.webkit.org/show_bug.cgi?id=141994

        Reviewed by Joseph Pecoraro.

        * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
        (WebKit::WebsiteDataRecord::displayNameForOrigin):
        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        (WebKit::WebsiteDataRecord::WebsiteDataRecord):

2015-02-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] [iOS] Parsing support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=141939

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

2015-02-24  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix after r180585.

        * CMakeLists.txt:

2015-02-24  Anders Carlsson  <andersca@apple.com>

        Pass _WKWebsiteDataRecord objects to the fetchData completion handler
        https://bugs.webkit.org/show_bug.cgi?id=141984

        Reviewed by Andreas Kling.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Create _WKWebsiteDataRecord objects for WebsiteDataRecord API objects.

        * UIProcess/API/APIWebsiteDataRecord.h:
        Add WebsiteDataRecord getter.

        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h:
        Add displayName and dataTypes properties.

        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.mm:
        (dataTypesToString):
        Helper function to convert dataTypes bit-fields to strings.

        (-[_WKWebsiteDataRecord description]):
        Include the display name and data types in the description.

        (-[_WKWebsiteDataRecord displayName]):
        Return the display name.

        (-[_WKWebsiteDataRecord dataTypes]):
        Return the data types.

        * UIProcess/API/Cocoa/_WKWebsiteDataRecordInternal.h:
        (WebKit::toWebsiteDataTypes):
        Move this here from _WKWebsiteDataStore.mm.

        (WebKit::toWKWebsiteDataTypes):
        Add new function to convert WebsiteDataTypes to WKWebsiteDataTypes.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (-[_WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        (-[_WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        Qualify toWebsiteDataTypes calls.

        * UIProcess/WebsiteData/WebsiteDataRecord.cpp: Added.
        (WebKit::WebsiteDataRecord::displayNameForOrigin):
        New helper that returns a display name given an origin.

        (WebKit::WebsiteDataRecord::add):
        Add the origin as well as the type.

        * UIProcess/WebsiteData/WebsiteDataRecord.h:
        Add new members.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        Loop through the entries and add them to the m_websiteDataRecords hash map, which
        is keyed off of the display name. Pass the m_websiteDataRecords values to the completion handler.

        * WebKit2.xcodeproj/project.pbxproj:

2015-02-24  Csaba Osztrogonác  <ossy@webkit.org>

        One more buildfix after r180575.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionDidClose):

2015-02-24  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after 180575.

        * CMakeLists.txt:

2015-02-24  Anders Carlsson  <andersca@apple.com>

        Implement more of the data fetching API
        https://bugs.webkit.org/show_bug.cgi?id=141975

        Reviewed by Andreas Kling.

        * Shared/WebsiteData/WebsiteData.cpp: Added.
        (WebKit::WebsiteData::Entry::encode):
        (WebKit::WebsiteData::Entry::decode):
        (WebKit::WebsiteData::encode):
        (WebKit::WebsiteData::decode):
        * Shared/WebsiteData/WebsiteData.h: Added.
        Add a new WebsiteData class that will store website data. Currently it only stores
        origin + website data type, but in the future it is going to store more things, like 
        host names that have cookies associated.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        Assert that we don't have any pending fetch data callbacks.

        (WebKit::WebProcessProxy::connectionDidClose):
        Invoke any pending fetch website data callbacks.

        (WebKit::WebProcessProxy::didFetchWebsiteData):
        Grab the callback and invoke it.

        (WebKit::WebProcessProxy::fetchWebsiteData):
        Set up a pending callback and send a FetchWebsiteData message to the web process.

        * UIProcess/WebProcessProxy.h:
        Add new member.

        * UIProcess/WebProcessProxy.messages.in:
        Add a DidFetchWebsiteData message.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeWebProcessAccessTypeForDataFetch):
        Return the web process access type for the given set of data types.

        (WebKit::WebsiteDataStore::fetchData):
        Set up a callback aggregator that will assemble the needed website data into a vector of website data records.

        (WebKit::computeNetworkProcessAccessTypeForDataRemoval):
        (WebKit::computeWebProcessAccessTypeForDataRemoval):
        Rename these functions to indicate that they are about data removal.

        (WebKit::WebsiteDataStore::removeData):
        Append "ForDataRemoval" to function calls.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        Tighten types.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::fetchWebsiteData):
        For now, just fetch memory cache data.

        * WebProcess/WebProcess.h:
        Add new members.

        * WebProcess/WebProcess.messages.in:
        Add FetchWebsiteData message.

2015-02-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r179429): Can't type comments in Facebook
        https://bugs.webkit.org/show_bug.cgi?id=141859

        Reviewed by Brent Fulgham.

        Enable SymbolEnabled in inspector context.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetJavaScriptRuntimeFlags):
        (WKPreferencesGetJavaScriptRuntimeFlags):
        (WKPreferencesSetJavaScriptExperimentsEnabled): Deleted.
        (WKPreferencesGetJavaScriptExperimentsEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _javaScriptRuntimeFlags]):
        (-[WKPreferences _setJavaScriptRuntimeFlags:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * mac/WebKit2.order:

2015-02-24  Anders Carlsson  <andersca@apple.com>

        Tighten up some SecurityOrigin related code, use references where possible
        https://bugs.webkit.org/show_bug.cgi?id=141971

        Reviewed by Antti Koivisto.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::getIndexedDatabaseOrigins):
        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::fromSecurityOrigin):
        (WebKit::SecurityOriginData::securityOrigin):
        * Shared/SecurityOriginData.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createTransientLocalStorageMap):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        (WebKit::WebIDBServerConnection::WebIDBServerConnection):
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::WebMediaKeyStorageManager::getMediaKeyOrigins):
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::create):
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        * WebProcess/Storage/StorageAreaMap.h:
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::storageArea):

2015-02-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        Crash loading local file with WebPageProxy::loadAlternateHTMLString
        https://bugs.webkit.org/show_bug.cgi?id=141867

        Reviewed by Anders Carlsson.

        WebPageProxy::loadAlternateHTMLString needs to assume read access to unreachableURL as well
        as baseURL, because unreachableURL will get added to the back/forward list, causing us to
        crash later on when we notice the unexpected URL received in checkURLReceivedFromWebProcess.

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

2015-02-24  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Add message APIs to communicate between ewk_context and extensions
        https://bugs.webkit.org/show_bug.cgi?id=137660

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Added dependencies for ewk2UnitTestExtensionSample
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (EwkContext::didReceiveMessageFromInjectedBundle):
        (EwkContext::setMessageFromExtensionCallback):
        (EwkContext::processReceivedMessageFromInjectedBundle):
        (ewk_context_message_post_to_extensions):
        (ewk_context_message_from_extensions_callback_set):
        (EwkContext::didReceiveSynchronousMessageFromInjectedBundle):
        Deleted to split synchronouse message APIs from asynchronuous message APIs.
        ewebkit will not support this until there are requirements.
        (EwkContext::setMessageFromInjectedBundleCallback): Renamed to setMessageFromExtensionCallback.
        (ewk_context_message_post_to_injected_bundle): Renamed to ewk_context_message_post_to_extensions.
        (ewk_context_message_from_injected_bundle_callback_set): Renamed to ewk_context_message_from_injected_bundle_callback_set.
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        Improved test case for ewk_context_new_with_extensions_path using the message APIs.
        (EWK2UnitTest::EWK2UnitTestBase::EWK2UnitTestBase):
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp:
        (EWK2UnitTest::EWK2UnitTestEnvironment::extensionSample): Deleted.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        * UIProcess/API/efl/tests/extensions/extension_sample.cpp:
        Improved test case for ewk_context_new_with_extensions_path using the message APIs.
        * UIProcess/API/efl/tests/test_ewk2_context.cpp: Ditto.
        (EWK2ContextTestWithExtension::messageReceivedCallback):
        (EWK2ContextTestWithExtension::EWK2ContextTestWithExtension):
        (TEST_F):
        * WebProcess/InjectedBundle/API/efl/ewk_extension.cpp:
        (toEwkExtendion):
        (EwkExtension::EwkExtension):
        (EwkExtension::didCreatePage):
        (EwkExtension::willDestroyPage):
        (EwkExtension::didReceiveMessage):
        (EwkExtension::didReceiveMessageToPage):
        (ewk_extension_message_post): Implemented to post message to ewk_context.
        * WebProcess/InjectedBundle/API/efl/ewk_extension.h:
        * WebProcess/InjectedBundle/API/efl/ewk_extension_private.h:
        (EwkExtension::bundle):
        * WebProcess/efl/ExtensionManagerEfl.cpp:
        (WebKit::ExtensionManagerEfl::initialize):
        Fixed the bug when there are different shared objects in extension path.
        This is spotted while improving test case.

2015-02-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180547 and r180550.
        https://bugs.webkit.org/show_bug.cgi?id=141957

        Broke 10 Windows tests. (Requested by bfulgham_ on #webkit).

        Reverted changesets:

        "REGRESSION(r179429): Can't type comments in Facebook"
        https://bugs.webkit.org/show_bug.cgi?id=141859
        http://trac.webkit.org/changeset/180547

        "Constructor returning null should construct an object instead
        of null"
        https://bugs.webkit.org/show_bug.cgi?id=141640
        http://trac.webkit.org/changeset/180550

2015-02-23  Ryosuke Niwa  <rniwa@webkit.org>

        Disable font loading events until our implementation gets updated to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=141938

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

2015-02-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r179429): Can't type comments in Facebook
        https://bugs.webkit.org/show_bug.cgi?id=141859

        Reviewed by Geoffrey Garen.

        Enable SymbolEnabled in inspector context.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetJavaScriptRuntimeFlags):
        (WKPreferencesGetJavaScriptRuntimeFlags):
        (WKPreferencesSetJavaScriptExperimentsEnabled): Deleted.
        (WKPreferencesGetJavaScriptExperimentsEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRef.h:
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _javaScriptRuntimeFlags]):
        (-[WKPreferences _setJavaScriptRuntimeFlags:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * mac/WebKit2.order:

2015-02-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS WK2] The WebProcess keep scrolling pages based on the last velocity after scrolling has been interrupted
        https://bugs.webkit.org/show_bug.cgi?id=141933
        rdar://problem/18746673
        rdar://problem/19711490

        Reviewed by Simon Fraser.

        The bug happened like this:
        1) The user scroll the page. WKContentView tracks the velocity and send
           the update rect + velocity to the WebProcess.
        2) The user interupts the scrolling but does not commit to either scrolling
           again or cancelling the scrolling.
           Since we were not notified of this state, the WebProcess still believed
           the velocity is stable.
        3) With any paint update, the WebProcess would account for the last velocity
           and try to guess the best repaint area. This would drift endlessly out
           of the view since the view is not really moving.

        This patch fixes the issue by adding special handling for interrupted scrolling.

        Kudos to Kurt Revis for providing us the required APIs.

        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::operator==):
        We can no longer filter VisibleContentRectUpdateInfo ignoring the velocity.

        Typically, UIScrollView would call -scrollViewDidScroll: before being interrupted.
        If we filter based on the VisibleContentRectUpdateInfo, we have two identical
        states differing only by the velocity. If we filter the second update, the WebProcess
        would never know the velocity should be zero.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollViewDidInterruptDecelerating:]):
        We get this callback when scrolling is interrupted. We just need to clear
        the velocity and re-send a new update for the current state.

        (-[WKWebView _updateVisibleContentRects]):
        Do not consider an interrupted scroll as a stable state. We don't know if scrolling
        will resume or will stop.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didInterruptScrolling]):

2015-02-23  Anders Carlsson  <andersca@apple.com>

        Add API for fetching website data records to _WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=141926

        Reviewed by Beth Dakin.

        * UIProcess/API/APIWebsiteDataRecord.cpp:
        (API::WebsiteDataRecord::create):
        (API::WebsiteDataRecord::WebsiteDataRecord):
        * UIProcess/API/APIWebsiteDataRecord.h:
        Update to take a WebsiteDataRecord parameter.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (-[_WKWebsiteDataStore fetchDataRecordsOfTypes:completionHandler:]):
        Call down to the WebsiteDataStore.

        * UIProcess/WebsiteData/WebsiteDataRecord.h: Added.
        This will be the data-container part of WebsiteDataRecord, but it's currently empty.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::fetchData):
        Just dispatch the completion handler for now.

        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Add new member.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

2015-02-23  Chris Dumez  <cdumez@apple.com>

        Add support for diagnostic logging messages sampling
        https://bugs.webkit.org/show_bug.cgi?id=141823
        <rdar://problem/19899030>

        Reviewed by Andreas Kling.

        Add support for diagnostic logging messages sampling to decrease the
        impact of diagnostic logging on CPU usage, while still getting useful
        overall results. This patch adds a ShouldSample argument to
        logDiagnosticMessage*() functions and logs 5% of the messages when
        sampling. Sampling is turned on for keys that are known to be verbose
        (e.g. per resource load logging).

        On the page load test I am tracking, CPU usage caused by diagnostic
        logging went down to 0.3% of UIProcess from 2.8% with this change.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::logDiagnosticMessage):
        (WebKit::NetworkProcess::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcess::logDiagnosticMessageWithValue):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:
        (WebKit::NetworkCacheStatistics::recordNotUsingCacheForRequest):
        (WebKit::NetworkCacheStatistics::recordRetrievalFailure):
        (WebKit::NetworkCacheStatistics::recordRetrievedCachedEntry):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::logDiagnosticMessage):
        (WebKit::NetworkProcessProxy::logDiagnosticMessageWithResult):
        (WebKit::NetworkProcessProxy::logDiagnosticMessageWithValue):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::shouldLogDiagnosticMessage):
        (WebKit::WebPageProxy::logDiagnosticMessage):
        (WebKit::WebPageProxy::logDiagnosticMessageWithResult):
        (WebKit::WebPageProxy::logDiagnosticMessageWithValue):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue):
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::willStartUserTriggeredZooming):

2015-02-23  Anders Carlsson  <andersca@apple.com>

        Add a stubbed out _WKWebsiteDataRecord class
        https://bugs.webkit.org/show_bug.cgi?id=141919

        Reviewed by Beth Dakin.

        Also add the corresponding API::WebsiteDataRecord C++ class. A website data record is going to represent
        a set of associated websites and the types of website data that exist for said websites.

        * Shared/API/APIObject.h:
        * UIProcess/API/APIWebsiteDataRecord.cpp: Added.
        * UIProcess/API/APIWebsiteDataRecord.h: Added.
        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.h: Added.
        * UIProcess/API/Cocoa/_WKWebsiteDataRecord.mm: Added.
        * UIProcess/API/Cocoa/_WKWebsiteDataRecordInternal.h: Added.
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-02-23  Timothy Horton  <timothy_horton@apple.com>

        Reproducible crash in ViewGestureController::removeSwipeSnapshot()
        https://bugs.webkit.org/show_bug.cgi?id=141917
        <rdar://problem/19918590>

        Reviewed by Brian Weinstein.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        If the snapshot was purged and we're showing a white snapshot, we won't
        be able to mark the (null) snapshot surface as volatile. Add a null check.

2015-02-23  Anders Carlsson  <andersca@apple.com>

        Replace another straight-up cast with a toImpl call
        https://bugs.webkit.org/show_bug.cgi?id=141914
        rdar://problem/19913016

        Reviewed by Andreas Kling.

        This fixes a problem where Mail would not display message bodies.

        * UIProcess/API/Cocoa/WKConnection.mm:
        (didReceiveMessage):

2015-02-20  Brent Fulgham  <bfulgham@apple.com>

        Scrollbars and ScrollAnimators must always have a ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=141855

        Reviewed by Simon Fraser.
        
        Change users of the scrollAnimator() method to expect a reference instead of a pointer.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::createScrollbar):
        (WebKit::PDFPlugin::destroyScrollbar):

2015-02-20  Jessie Berlin  <jberlin@webkit.org>

        Build fix after r180465.

        * UIProcess/mac/PageClientImpl.h:

2015-02-20  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Unreviewed build fix after r180449.

        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (webkit_file_chooser_request_get_selected_files):

2015-02-20  Enrica Casucci  <enrica@apple.com>

        [WK2] Add support for font panel on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=141777

        Reviewed by Tim Horton.

        This patch adds the necessary hooks to WKView to support
        the font panel. It also includes refactoring of WebPage::editorState
        and WebPageProxy::editorStateChanged to separate the different platform
        specific tasks.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _selectionChanged]):
        (-[WKView changeFont:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::selectionDidChange):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setFont):
        (WebKit::WebPageProxy::editorStateChanged):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::platformEditorState):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformEditorState):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformEditorState):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformEditorState):
        (WebKit::WebPage::setFont):

2015-02-20  Chris Dumez  <cdumez@apple.com>

        [WK2] Add more detailed diagnostic logging for measuring network cache efficacy
        https://bugs.webkit.org/show_bug.cgi?id=141803
        <rdar://problem/19632080>

        Reviewed by Antti Koivisto.

        Add more detailed diagnostic logging for measuring network cache
        efficacy.

        We want to know the reason the network cache is being by-passed, why
        the network cache decided not to cache a response and why it cannot
        reuse a cache entry.

        This patch adds a new "UncachedReason" table to the SQLite database
        to store the reason the network cache is deciding not to cache a
        given response. This information is used later, when the resource is
        requested again to log the reason why the request cannot be satistied
        by the cache.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::decodeStorageEntry):
        (WebKit::canRetrieve):
        (WebKit::NetworkCache::retrieve):
        (WebKit::canStore):
        (WebKit::NetworkCache::store):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStatistics.h:
        * NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:
        (WebKit::NetworkCacheStatistics::initialize):
        (WebKit::NetworkCacheStatistics::recordNotCachingResponse):
        (WebKit::retrieveDecisionToDiagnosticKey):
        (WebKit::NetworkCacheStatistics::recordNotUsingCacheForRequest):
        (WebKit::storeDecisionToDiagnosticKey):
        (WebKit::NetworkCacheStatistics::recordRetrievalFailure):
        (WebKit::cachedEntryReuseFailureToDiagnosticKey):
        (WebKit::NetworkCacheStatistics::recordRetrievedCachedEntry):
        (WebKit::NetworkCacheStatistics::queryWasEverRequested):
        (WebKit::NetworkCacheStatistics::clear):

2015-02-20  Anders Carlsson  <andersca@apple.com>

        API::String should just be a simple wrapper for WTF strings
        https://bugs.webkit.org/show_bug.cgi?id=141852

        Reviewed by Beth Dakin.

        Expose a StringView member function on API::String. Move all the WKString API implementations to WKString.cpp.

        * Shared/API/APIString.h:
        * Shared/API/c/WKString.cpp:
        (WKStringIsEmpty):
        (WKStringGetLength):
        (WKStringGetCharacters):
        (WKStringGetMaximumUTF8CStringSize):
        (WKStringGetUTF8CString):
        (WKStringIsEqual):
        (WKStringIsEqualToUTF8CString):
        (WKStringIsEqualToUTF8CStringIgnoringCase):

2015-02-20  Anders Carlsson  <andersca@apple.com>

        API::String::string() needs to return an isolated string copy
        https://bugs.webkit.org/show_bug.cgi?id=141846

        Reviewed by Tim Horton.

        Since we can expose API::String objects as NSStrings now, we need to make sure that
        we return copied strings so we won't mess up the StringImpl refcounts.

        * Shared/API/APIString.h:

2015-02-20  Alexey Proskuryakov  <ap@apple.com>

        Remove svn:keywords property.

        As far as I can tell, the property had no effect on any of these files, but also,
        when it has effect it's likely harmful.

        * Platform/spi/ios/DataDetectorsUISPI.h: Removed property svn:keywords.
        * Platform/spi/ios/ManagedConfigurationSPI.h: Removed property svn:keywords.
        * Platform/spi/ios/TextInputSPI.h: Removed property svn:keywords.
        * Scripts/webkit/LegacyMessageReceiver-expected.cpp: Removed property svn:keywords.
        * Scripts/webkit/LegacyMessages-expected.h: Removed property svn:keywords.
        * Scripts/webkit/MessageReceiver-expected.cpp: Removed property svn:keywords.
        * Scripts/webkit/MessageReceiverSuperclass-expected.cpp: Removed property svn:keywords.
        * Scripts/webkit/Messages-expected.h: Removed property svn:keywords.
        * Scripts/webkit/MessagesSuperclass-expected.h: Removed property svn:keywords.
        * UIProcess/ios/PageClientImplIOS.h: Removed property svn:keywords.
        * UIProcess/ios/WKActionSheet.h: Removed property svn:keywords.
        * UIProcess/ios/WKActionSheetAssistant.h: Removed property svn:keywords.
        * UIProcess/ios/WKContentView.h: Removed property svn:keywords.
        * UIProcess/ios/WKContentViewInteraction.h: Removed property svn:keywords.
        * UIProcess/ios/WKGeolocationProviderIOS.h: Removed property svn:keywords.
        * UIProcess/ios/WKScrollView.h: Removed property svn:keywords.
        * UIProcess/mac/PageClientImpl.h: Removed property svn:keywords.
        * UIProcess/mac/WKPrintingView.h: Removed property svn:keywords.
        * UIProcess/mac/WKTextInputWindowController.h: Removed property svn:keywords.
        * WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h: Removed property svn:keywords.

2015-02-20  Csaba Osztrogonác  <ossy@webkit.org>

        EFL URTBF

        * Platform/efl/DispatchQueueEfl.cpp:

2015-02-20  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r180410, WorkQueue.h is in WTF now.

        * Platform/efl/DispatchQueueWorkItemEfl.h:

2015-02-20  Anders Carlsson  <andersca@apple.com>

        Use toAPI when returning the object graph as a WKTypeRef
        https://bugs.webkit.org/show_bug.cgi?id=141841

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (getInjectedBundleInitializationUserData):

2015-02-20  Eric Carlson  <eric.carlson@apple.com>

        [iOS] cleanup AirPlay code
        https://bugs.webkit.org/show_bug.cgi?id=141811

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig: IOS_AIRPLAY -> WIRELESS_PLAYBACK_TARGET.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Ditto.

2015-02-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2][EFL] Fix the build after r180362
        https://bugs.webkit.org/show_bug.cgi?id=141836

        Reviewed by Carlos Garcia Campos.

        As r180409, EFL port needs to add missing includes for several features,
        and needs to have a specific implementation of toAPI/toImple for EFL port.

        * UIProcess/API/C/WKBatteryManager.cpp:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/efl/WKAPICastEfl.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        * UIProcess/CoordinatedGraphics/WebViewClient.cpp:
        * UIProcess/efl/WebUIPopupMenuClient.cpp:
        * UIProcess/efl/WebViewEfl.cpp:
        * WebProcess/efl/ExtensionManagerEfl.cpp:

2015-02-20  Antti Koivisto  <antti@apple.com>

        Move WorkQueue from WK2 to WTF
        https://bugs.webkit.org/show_bug.cgi?id=141797

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * DatabaseProcess/DatabaseProcess.h:
        * Platform/IPC/Connection.h:
        * Platform/WorkQueue.cpp: Removed.
        * Platform/WorkQueue.h: Removed.
        * Platform/efl/WorkQueueEfl.cpp: Removed.
        * Platform/gtk/WorkQueueGtk.cpp: Removed.
        * Platform/mac/WorkQueueMac.cpp: Removed.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * UIProcess/Launcher/ProcessLauncher.cpp:
        * UIProcess/Storage/LocalStorageDatabase.cpp:
        * UIProcess/Storage/LocalStorageDatabase.h:
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        * UIProcess/Storage/StorageManager.cpp:
        * UIProcess/Storage/StorageManager.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WK2][GTK] Fix the build after r180362
        https://bugs.webkit.org/show_bug.cgi?id=141813

        Reviewed by Žan Doberšek.

        Add several missing includes and a specific implementation of
        toAPI/toImpl for GTK+ WebView.

        * UIProcess/API/C/gtk/WKAPICastGtk.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * UIProcess/API/C/gtk/WKView.cpp:
        * UIProcess/API/gtk/WebKitFormClient.cpp:
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManagerClient.cpp:
        * UIProcess/gtk/WebInspectorClientGtk.cpp:

2015-02-19  Shivakumar JM  <shiva.jm@samsung.com>

        Fix build warning in WebKit2/WebProcess and UIProcess module.
        https://bugs.webkit.org/show_bug.cgi?id=141794.

        Reviewed by Anders Carlsson.

        Fix build warning by using UNUSED_PARAM macro.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeWebProcessAccessType):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::deleteWebsiteData):

2015-02-19  Remy Demarest  <rdemarest@apple.com>

        Make EnvironmentVariables::appendValue() handle the case where the existing value is an empty string.
        https://bugs.webkit.org/show_bug.cgi?id=141818.

        Reviewed by Dan Bernstein.

        * UIProcess/Launcher/mac/EnvironmentVariables.cpp:
        (WebKit::EnvironmentVariables::appendValue): If the existing value is an empty string, replace it rather than
        append to it.

2015-02-19  Anders Carlsson  <andersca@apple.com>

        Make C SPI objects and modern API objects toll-free bridged
        https://bugs.webkit.org/show_bug.cgi?id=141808

        Reviewed by Tim Horton.

        * Shared/API/APIObject.h:
        (API::Object::wrap):
        (API::Object::unwrap):
        Add default implementations of wrap and unwrap. These just cast.

        * Shared/API/c/WKArray.cpp:
        (WKArrayCreate):
        (WKArrayCreateAdoptingValues):
        (WKArrayGetItemAtIndex):
        * Shared/API/c/WKDictionary.cpp:
        (WKDictionaryGetItemForKey):
        Add toImpl and toAPI where necessary.

        * Shared/API/c/WKSharedAPICast.h:
        Add API::Object::wrap in toAPI and unwrap in toImpl.

        * Shared/API/c/WKType.cpp:
        (WKGetTypeID):
        (WKRetain):
        (WKRelease):
        Add missing toImpl calls.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::wrap):
        Return the APIObject Objective-C wrapper.

        (API::Object::unwrap):
        Return the API::Object from the Objective-C object.

        * Shared/Cocoa/WKObject.h:
        Add wrap and unwrap declarations.

        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPageConfigurationRef.cpp:
        * UIProcess/API/C/WKPageGroup.cpp:
        * UIProcess/API/C/WKUserContentControllerRef.cpp:
        Add missing includes; toImpl now requires a complete type.

2015-02-19  Timothy Horton  <timothy_horton@apple.com>

        Remove unused forward declaration from WKWebViewInternal.h
        https://bugs.webkit.org/show_bug.cgi?id=141806

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        The use of WebCore::Highlight moved to WKContentView.

2015-02-19  Anders Carlsson  <andersca@apple.com>

        Use the real implementation type in our API cast traits
        https://bugs.webkit.org/show_bug.cgi?id=141805

        Reviewed by Sam Weinig.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toURLRef):
        (WebKit::toAPI): Deleted.
        (WebKit::toImpl): Deleted.
        * UIProcess/GenericCallback.h:

2015-02-19  Anders Carlsson  <andersca@apple.com>

        Remove the stray storage manager from WebProcessPool
        https://bugs.webkit.org/show_bug.cgi?id=141800

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        (-[WKView _applicationWillTerminate:]): Deleted.
        Remove code that calls applicationWillTerminate on the WebPageProxy.

        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        Get the storage manager from the website data store.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        Remove storage manager calls.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::applicationWillTerminate): Deleted.
        * UIProcess/WebProcessPool.h:
        Remove storage manager code.

        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::storageManager):
        Add getter.

2015-02-19  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] Unreviewed buildfix for non-Cocoa platforms.

        * CMakeLists.txt:
        * UIProcess/WebsiteData/unix/WebsiteDataStoreUnix.cpp: Added.
        (WebKit::WebsiteDataStore::platformInitialize): Added.
        (WebKit::WebsiteDataStore::platformDestroy): Added.

2015-02-19  Anders Carlsson  <andersca@apple.com>

        WebsiteDataStore should ensure that local storage is written before exiting
        https://bugs.webkit.org/show_bug.cgi?id=141798

        Reviewed by Sam Weinig.

        * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: Added.
        (WebKit::dataStoresWithStorageManagers):
        (WebKit::WebsiteDataStore::platformInitialize):
        (WebKit::WebsiteDataStore::platformDestroy):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-02-18  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Fix NetworkCache build
        https://bugs.webkit.org/show_bug.cgi?id=141778

        Reviewed by Antti Koivisto.

        Add missing header include to use round_page() on iOS.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:

2015-02-18  Alexey Proskuryakov  <ap@apple.com>

        Remove input and output files from "Make Frameworks Symbolic Link" step
        https://bugs.webkit.org/show_bug.cgi?id=141769

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:

2015-02-18  Timothy Horton  <timothy_horton@apple.com>

        Adopt WebCore::IOSurface in ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=141751

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Remove old WKSI IOSurface-related functions.

2015-02-18  Beth Dakin  <bdakin@apple.com>

        iBooks immediate action blacklist should not even create the gesture recognizer
        https://bugs.webkit.org/show_bug.cgi?id=141768
        -and corresponding-
        rdar://problem/19806770

        Reviewed by Tim Horton.

        Move the runtime-application check to the point where the gesture recognizer is 
        created so that we can avoid doing so.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _updateImmediateActionItem]):

2015-02-18  Chris Dumez  <cdumez@apple.com>

        Access FontCache global instance via singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=141726

        Reviewed by Daniel Bates.

        Access FontCache global instance via singleton() static member function,
        as per coding style.

2015-02-18  Timothy Horton  <timothy_horton@apple.com>

        Add WKContext SPI to clear all visited links
        https://bugs.webkit.org/show_bug.cgi?id=141752
        <rdar://problem/9997966>

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextClearVisitedLinks):
        * UIProcess/API/C/WKContext.h:

2015-02-17  Anders Carlsson  <andersca@apple.com>

        Add API for clearing in-memory caches to WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=141724

        Reviewed by Tim Horton.

        * Shared/WebsiteData/WebsiteDataTypes.h:
        Add WebsiteDataTypeMemoryCache.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        Add WKWebsiteDataTypeMemoryCache.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (toWebsiteDataTypes):
        Handle WKWebsiteDataTypeMemoryCache and convert it to WebsiteDataTypeMemoryCache.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::generateCallbackID):
        Generate a new callback.

        (WebKit::WebProcessProxy::~WebProcessProxy):
        Assert that we don't have any pending callbacks.

        (WebKit::WebProcessProxy::connectionDidClose):
        Invoke pending callbacks.

        (WebKit::WebProcessProxy::canTerminateChildProcess):
        Don't try to terminate if we have pending callbacks.

        (WebKit::WebProcessProxy::didDeleteWebsiteData):
        Take the callback and invoke it.

        (WebKit::WebProcessProxy::deleteWebsiteData):
        Send a delete message.

        * UIProcess/WebProcessProxy.h:
        Add new members.

        * UIProcess/WebProcessProxy.messages.in:
        Add DidDeleteWebsiteData message.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessType):
        Spell persistent correctly.

        (WebKit::computeWebProcessAccessType):
        Return a web process access type given the a data type mask.

        (WebKit::WebsiteDataStore::removeData):
        Ask any associated web processes to remove website data.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::deleteWebsiteData):
        Delete the memory cache if requested.

        * WebProcess/WebProcess.h:
        Add new member.

        * WebProcess/WebProcess.messages.in:
        Add DeleteWebsiteData message.

2015-02-17  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (r178595): Clicking on DD highlights sometimes do not work
        https://bugs.webkit.org/show_bug.cgi?id=141728
        <rdar://problem/19825372>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _cancelImmediateActionIfNeeded]):
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        The change that r178595 intended to make was purely that things that we
        have no immediate actions for should cancel the immediate action gesture recognizer.
        Moving the DataDetectors activation code as well breaks strict ordering
        of immediate action callbacks vs. shouldUseActionsWithContext: that they depend on.

2015-02-17  Anders Carlsson  <andersca@apple.com>

        Only create the WebKit.framework symlink in PrivateFrameworks when the platform is iphoneos
        https://bugs.webkit.org/show_bug.cgi?id=141710
        <rdar://problem/19719748>

        Reviewed by Andreas Kling.

        Don't create the symlink when building for the simulator.

        * WebKit2.xcodeproj/project.pbxproj:

2015-02-17  Chris Dumez  <cdumez@apple.com>

        Access MemoryPressureHandler global instance via a singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=141691

        Reviewed by Andreas Kling.

        Access MemoryPressureHandler global instance via a singleton() static
        member function.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::lowMemoryHandler): Deleted.
        * NetworkProcess/NetworkProcess.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializeProcess):
        (WebKit::PluginProcess::lowMemoryHandler): Deleted.
        * PluginProcess/PluginProcess.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::processWillSuspend):

2015-02-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitFrame objects are never released
        https://bugs.webkit.org/show_bug.cgi?id=141641

        Reviewed by Martin Robinson.

        Use a FrameDestructionObserver derived class to wrap our
        WebKitFrame objects and delete them when the frame is destroyed,
        instead of using willDestroyFrame callback of WKBundlePageLoaderClient
        that has never worked.

        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.cpp:
        (webkitFrameGetWebFrame):
        * WebProcess/InjectedBundle/API/gtk/WebKitFramePrivate.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitFrameGetOrCreate):
        (webkitFrameDestroy):
        (webkitWebPageCreate):
        (willDestroyFrame): Deleted.

2015-02-16  Tim Horton  <timothy_horton@apple.com>

        Fix the !USE(IOSURFACE) build

        * Shared/mac/RemoteLayerBackingStore.mm:
        SOFT_LINK_MAY_FAIL makes a function that will be unused if !USE(IOSURFACE).

2015-02-16  Tim Horton  <timothy_horton@apple.com>

        Sometimes RemoteLayerBackingStore ends up non-volatile while the process is suspended
        <rdar://problem/19842957>
        https://bugs.webkit.org/show_bug.cgi?id=141675

        Reviewed by Simon Fraser.

        Previously, it was possible to get a layer tree flush in between the
        process suspension cleanup code making surfaces volatile and the process
        actually being suspended (it was racy because the suspension requires
        a few IPC round trips). Depending on how far through the flush we got,
        we could sometimes end up either making new non-volatile backing store,
        or switching some recently-made-volatile backing store back to non-volatile.
        We don't want to have any non-volatile backing store while suspended.

        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::updateAssertion):
        Inform the WebProcess when it's going from suspended to runnable state.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendProcessDidResume):
        * UIProcess/WebProcessProxy.h:
        Forward the message along.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::processWillSuspend):
        (WebKit::WebProcess::cancelProcessWillSuspend):
        (WebKit::WebProcess::setAllLayerTreeStatesFrozen):
        (WebKit::WebProcess::processDidResume):
        Freeze all of this process' pages' layer trees when we start trying to suspend,
        and un-freeze them when either suspension is cancelled or we resume.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2015-02-16  Tim Horton  <timothy_horton@apple.com>

        Adopt CAMachPort-as-layer-contents
        https://bugs.webkit.org/show_bug.cgi?id=141687
        <rdar://problem/19393233>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::decode):
        If we have CAMachPort, just keep the MachSendRight around.

        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        If we have CAMachPort, make one and leak our send right into it. CAMachPort
        will adopt the port and destroy it when needed.

        (WebKit::RemoteLayerBackingStore::setBufferVolatility):
        Tiny style fix.

2015-02-15  Sam Weinig  <sam@webkit.org>

        Add experimental <attachment> element support
        https://bugs.webkit.org/show_bug.cgi?id=141626

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2015-02-16  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r176459): Process suspension cleanup timer sometimes never stops
        https://bugs.webkit.org/show_bug.cgi?id=141669

        Reviewed by Simon Fraser.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::markAllLayersVolatileIfPossible):
        r176459 accidentally removed the code to stop the cleanup timer
        in the case where we successfully finish marking layers volatile,
        causing the timer to continue running once the process comes back
        from a suspended state.

2015-02-16  Anders Carlsson  <andersca@apple.com>

        Check for the assume_nonnull feature instead of noescape
        https://bugs.webkit.org/show_bug.cgi?id=141666

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WKFoundation.h:

2015-02-16  Anders Carlsson  <andersca@apple.com>

        Add nullability qualifiers to all API headers
        https://bugs.webkit.org/show_bug.cgi?id=141652
        rdar://problem/19793630

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WKFoundation.h:
        Add a WK_NULLABLE_SPECIFIER macro.

        * UIProcess/API/Cocoa/WKBackForwardListItem.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/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/WKWindowFeatures.h:

        * mac/postprocess-framework-headers.sh:
        Handle the WK_NULLABLE_SPECIFIER macro. Change the WK_NULLABLE sed command to replace
        all occurrences of WK_NULLABLE instead of just the first one.

2015-02-16  Dan Bernstein  <mitz@apple.com>

        Update SPI availability annotations 
        https://bugs.webkit.org/show_bug.cgi?id=141588

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKFoundation.h: Added a definition of __NSi_8_3 for when building with
        an older SDK.
        * UIProcess/API/Cocoa/WKErrorPrivate.h:
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

2015-02-16  Antti Koivisto  <antti@apple.com>

        Remove unused InjectedBundle::setCacheModel.

        Rubber-stamped by Anders Carlsson.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setCacheModel): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:

2015-02-16  Anders Carlsson  <andersca@apple.com>

        Build fix for versions of Xcode that support nullability but don't have the Foundation #defines.

        * Shared/API/Cocoa/WKFoundation.h:

2015-02-16  Antti Koivisto  <antti@apple.com>

        Develop/Disable Caches does not properly disable disk cache
        https://bugs.webkit.org/show_bug.cgi?id=141636

        Reviewed by Anders Carlsson.

        The menu item sets the cache model to "document viewer" to disable the caches (cache size 0).
        However the cache model was never passed to the network process after the initialization.

        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::retrieve):
        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::update):

            Don't try to store or retrieve when the maximum cache size is set to zero.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::setCacheModel):

           Message the network process too.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetCacheModel): Deleted.

            Remove the now unused SPI.

        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:

2015-02-16  Antti Koivisto  <antti@apple.com>

        Assertion in disk cache code with redirect to a non-http resource
        https://bugs.webkit.org/show_bug.cgi?id=141644

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):

            Check that response is HTTP before calling computeFreshnessLifetimeForHTTPFamily.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::canStore):

            Deny storing non-HTTP responses to cache (though the above already covers this).

2015-02-13  Anders Carlsson  <andersca@apple.com>

        Add support for nullability to the header postprocessing
        https://bugs.webkit.org/show_bug.cgi?id=141573

        Reviewed by Darin Adler.

        * Shared/API/Cocoa/WKFoundation.h:
        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * mac/postprocess-framework-headers.sh:

2015-02-16  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Rename WebContextEfl to WebProcessPoolEfl
        https://bugs.webkit.org/show_bug.cgi?id=141642

        Reviewed by Csaba Osztrogonác.

        Although we've renamed almost everything in r177716, this is still
        required after r177692.

        * UIProcess/efl/WebProcessPoolEfl.cpp: Renamed from Source/WebKit2/UIProcess/efl/WebContextEfl.cpp.

2015-02-14  Alexey Proskuryakov  <ap@apple.com>

        Build fix after <http://trac.webkit.org/changeset/180122>

        * Platform/mac/StringUtilities.mm:

2015-02-14  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Possible DDActionContext leaks, RetainPtr cleanup
        https://bugs.webkit.org/show_bug.cgi?id=141613

        Reviewed by Tim Horton.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectableLink]):
        Adopt the allocated object.

2015-02-09  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove some unnecessary Inspector prefixes from class names in Inspector namespace
        https://bugs.webkit.org/show_bug.cgi?id=141372

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::remoteFrontendDisconnected):

2015-02-14  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Page opens with enlarged font after visiting PDF, navigating back, 
        then doing a process swap
        https://bugs.webkit.org/show_bug.cgi?id=141584
        -and corresponding-
        rdar://problem/18167729

        Reviewed by Tim Horton.

        This patch keeps the plugin zoom/scale factors separate from page zoom/scale 
        factors in the UI process since they are used for slightly different purposes for 
        plugins (i.e., PDFs) than they are for normal pages. Keeping track of the right 
        factor for the right type of document will ensure that we don’t use the wrong one.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::pageZoomFactor):
        (WebKit::WebPageProxy::pageScaleFactor):
        (WebKit::WebPageProxy::pluginScaleFactorDidChange):
        (WebKit::WebPageProxy::pluginZoomFactorDidChange):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::pageZoomFactorDidChange): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::pageZoomFactor): Deleted.
        (WebKit::WebPageProxy::pageScaleFactor): Deleted.
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setPageScaleFactor):

2015-02-14  Brian J. Burg  <burg@cs.washington.edu>

        REGRESSION(r179573): Web Inspector toolbar is completely messed up on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=141555

        Reviewed by Joseph Pecoraro.

        The old WKView-based code called _setDrawsBackground:NO on the WKView for Mavericks.
        Simulate this old behavior by calling WebPageProxy::setDrawsBackground(false).

        WKWebView's setOpaque:BOOL gives a flat background color instead of the intended
        gradient, so we can't use that method.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2015-02-13  Simon Fraser  <simon.fraser@apple.com>

        Crash closing a tab when a context or popup menu is open
        https://bugs.webkit.org/show_bug.cgi?id=141582
        rdar://problem/17700475

        Reviewed by Anders Carlsson.

        If a context menu or a popup menu is open when a tab is programmatically closed,
        then we'd crash because both the WebContextMenuProxyMac/WebPopupMenuProxyMac
        and the WebPageProxy would be deleted while still in use, via messages
        handled via the nested event tracking runloop.

        Fix by protecting those things while showing the popup. Also programmatically
        dismiss the popup when closing the WebPageProxy.

        * UIProcess/WebContextMenuProxy.h:
        (WebKit::WebContextMenuProxy::cancelTracking):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::showPopupMenu): Clean up some EFL-related confusion that we don't need.
        Retaining |this| will also retain m_activePopupMenu.
        (WebKit::WebPageProxy::hidePopupMenu):
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPopupMenuProxy.h:
        (WebKit::WebPopupMenuProxy::cancelTracking):
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        (WebKit::WebContextMenuProxyMac::cancelTracking):
        * UIProcess/mac/WebPopupMenuProxyMac.h: For popups, we need to remember if we were
        canceled to avoid trying to send events after closing.
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::WebPopupMenuProxyMac):
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        (WebKit::WebPopupMenuProxyMac::cancelTracking):

2015-02-13  Timothy Horton  <timothy_horton@apple.com>

        Fix the iOS build.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewGestureController.h:
        This code is never used on iOS.

2015-02-13  Timothy Horton  <timothy_horton@apple.com>

        Make WebCore::IOSurface have single ownership instead of refcounting
        https://bugs.webkit.org/show_bug.cgi?id=141578

        Reviewed by Anders Carlsson.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::Buffer::discard):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewSnapshotStore.h:
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::hasImage):
        Adjust to the single-ownership model.

2015-02-13  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Unreviewed build fix after r180076.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): We do not
        want to do this on iOS. 
        * UIProcess/WebPageProxy.h: No need to expose function
        on iOS (only Mac).

2015-02-13  Brent Fulgham  <bfulgham@apple.com>

        [Mac, iOS] Adjust pagination behavior for Mail.app printing use
        https://bugs.webkit.org/show_bug.cgi?id=141569
        <rdar://problem/14912763>

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Add new flag.
        (WebKit::WebPageCreationParameters::decode): Ditto.
        * Shared/WebPageCreationParameters.h: Ditto.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Set new page construction flag.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::paginationQuirkEnabled): Ask for new pagination flag
        when running as a Mail client.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Set up pagination based on desired settings.

2015-02-12  Simon Fraser  <simon.fraser@apple.com>

        determinePrimarySnapshottedPlugIn() should only traverse visible Frames
        https://bugs.webkit.org/show_bug.cgi?id=141547
        Part of rdar://problem/18445733.

        Reviewed by Anders Carlsson.
        
        Use FrameTree::traverseNextRendered() to avoid doing things in unrendered frames
        which are not guaranteed to have been laid out.

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

2015-02-13  Antti Koivisto  <antti@apple.com>

        WorkQueue should support concurrent queues
        https://bugs.webkit.org/show_bug.cgi?id=141559

        Reviewed by Anders Carlsson.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::DatabaseProcess):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):
        * Platform/WorkQueue.cpp:
        (WorkQueue::create):

            Also make create return a Ref.

        (WorkQueue::WorkQueue):
        * Platform/WorkQueue.h:

            Add queue type enum.

        * Platform/efl/WorkQueueEfl.cpp:
        (WorkQueue::platformInitialize):
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::platformInitialize):
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::platformInitialize):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::initializeConnection):
        * Shared/mac/SecItemShim.h:
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::processLauncherWorkQueue):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::initializeConnection):
        * UIProcess/mac/SecItemShimProxy.h:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::initializeConnection):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::EventDispatcher):
        (WebKit::EventDispatcher::initializeConnection):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/ViewUpdateDispatcher.h:

2015-02-12  Anders Carlsson  <andersca@apple.com>

        Clean up the framework postprocessing phase
        https://bugs.webkit.org/show_bug.cgi?id=141544

        Reviewed by Dan Bernstein.

        Rename WK_API_AVAILABILITY_ENABLED to WK_FRAMEWORK_HEADER_POSTPROCESSING_ENABLED to better match what
        it is we're doing. Also, rename the associated script. Remove a couple of now unnecessary #defines, and
        change everything we can to be feature-based instead of OS based.

        * Configurations/WebKit.xcconfig:
        * Shared/API/Cocoa/WKFoundation.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * mac/postprocess-framework-headers.sh: Renamed from Source/WebKit2/mac/rewrite-availability-macros.sh.

2015-02-12  Tim Horton  <timothy_horton@apple.com>

        Crash removing RemoteLayerTreeDisplayRefreshMonitor from the drawing area's map
        https://bugs.webkit.org/show_bug.cgi?id=141545
        <rdar://problem/17712200>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowScreenDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        windowScreenDidChange should take uint32_t, since that's what PlatformDisplayID is.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        RemoteLayerTreeDisplayRefreshMonitor is driven by the page's
        RemoteLayerTreeDrawingArea. Because of this, we cannot have the same
        sharing of DisplayRefreshMonitors that other platforms use.
        In order to ensure that we get a unique DisplayRefreshMonitor
        per-DrawingArea, give each page a unique DisplayID derived
        from WebPage's unique ID.

2015-02-12  Tim Horton  <timothy_horton@apple.com>

        Crash under RemoteLayerTreeDrawingArea::flushLayers() when closing a tab
        https://bugs.webkit.org/show_bug.cgi?id=141541

        Reviewed by Benjamin Poulain.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        The WebPage pointer can become stale between when it is retrieved
        and dereferenced. Retrieve it by ID inside the dispatch_async block
        instead of outside of it.

2015-02-12  Antti Koivisto  <antti@apple.com>

        WebKit persistent cache uses a lot of threads
        https://bugs.webkit.org/show_bug.cgi?id=141520

        Reviewed by Andreas Kling.

        Parallel retrieves are limited but stores are not. We may end up with lots of backround io
        dispatch queue threads if they don't complete fast enough.

        This patch adds pending state for write operations similar to what retrieves already have
        and limits to number of active operations.

        * NetworkProcess/cache/NetworkCacheStorage.h:

            Combine StoreOperation and UpdateOperation and rename to WriteOperation.
            Rename RetrieveOperation to ReadOperation.
            The idea is to emphasize that these are disk operations.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::dispatchReadOperation):
        (WebKit::NetworkCacheStorage::dispatchPendingReadOperations):
        (WebKit::retrieveFromMemory):
        (WebKit::NetworkCacheStorage::retrieve):
        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::update):
        (WebKit::NetworkCacheStorage::dispatchPendingWriteOperations):

            Only allow 3 parallel writes.

        (WebKit::NetworkCacheStorage::dispatchFullWriteOperation):
        (WebKit::NetworkCacheStorage::dispatchHeaderWriteOperation):

            More informative names.

        (WebKit::NetworkCacheStorage::dispatchRetrieveOperation): Deleted.
        (WebKit::NetworkCacheStorage::dispatchPendingRetrieveOperations): Deleted.
        (WebKit::retrieveActive): Deleted.

2015-02-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to allow overriding the default color chooser implementation
        https://bugs.webkit.org/show_bug.cgi?id=98935

        Reviewed by Gustavo Noronha Silva.

        Add API to allow the user to override the default UI of color
        chooser. Similar to the file chooser API, a new run-color-chooser
        signal is added to WebKitWebView that passes a WebKitColorChooserRequest
        parameter to the signal.

        Initial patch by Arnaud Renevier <a.renevier@sisa.samsung.com>.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createColorPicker): Create a
        WebKitColorChooser is the view widget is a WebKitWebView or a
        WebColorPicker otherwise,
        * UIProcess/API/gtk/WebKitColorChooser.cpp: Added.
        (WebKit::WebKitColorChooser::create):
        (WebKit::WebKitColorChooser::WebKitColorChooser):
        (WebKit::WebKitColorChooser::~WebKitColorChooser):
        (WebKit::WebKitColorChooser::endPicker): Chain up to parent class
        when not having a request, or finish the request if we have one.
        (WebKit::WebKitColorChooser::colorChooserRequestFinished):
        (WebKit::WebKitColorChooser::colorChooserRequestRGBAChanged):
        (WebKit::WebKitColorChooser::showColorPicker): Create a new
        WebKitColorChooserRequest and emit WebKitWebView::run-color-chooser.
        If the signal is not handled, fallback to the default color
        chooser dialog implemented by the parent class.
        * UIProcess/API/gtk/WebKitColorChooser.h: Added.
        * UIProcess/API/gtk/WebKitColorChooserRequest.cpp: Added.
        (webkitColorChooserRequestGetProperty):
        (webkitColorChooserRequestSetProperty):
        (webkit_color_chooser_request_class_init):
        (webkit_color_chooser_request_set_rgba):
        (webkit_color_chooser_request_get_rgba):
        (webkit_color_chooser_request_get_element_rectangle):
        (webkit_color_chooser_request_finish):
        (webkit_color_chooser_request_cancel):
        (webkitColorChooserRequestCreate):
        * UIProcess/API/gtk/WebKitColorChooserRequest.h: Added.
        * UIProcess/API/gtk/WebKitColorChooserRequestPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init): Add run-color-chooser signal.
        (webkitWebViewEmitRunColorChooser): Emit run-color-chooser signal.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for WebKitColorChooserRequest.
        * UIProcess/API/gtk/webkit2.h: Include WebKitColorChooserRequest.h

2015-02-11  Enrica Casucci  <enrica@apple.com>

        iOS build fix.

        Unreviewed.

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

2015-02-11  Chris Dumez  <cdumez@apple.com>

        [WK2] Add logging to validate the network cache efficacy (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=141345
        <rdar://problem/19632080>

        Reviewed by Sam Weinig.

        Add diagnostic logging messages to validate the network cache efficacy.
        The following 4 messages are added:
        - networkCache / retrieval / success
        - networkCache / retrieval / unhandledRequestFailure
        - networkCache / retrieval / noLongerInCacheFailure
        - networkCache / retrieval / unusableCachedEntryFailure

        The messages are sent via IPC from the NetworkProcess to the UIProcess,
        where the WebPageProxy code already handles diagnostic messages sent by
        the WebProcess.

2015-02-11  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (iOS 8): PDFs embedded in <object>/<embed> tag don't load at all
        https://bugs.webkit.org/show_bug.cgi?id=141457
        <rdar://problem/18221851>

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::objectContentType):
        On iOS, if we don't know what to do with a PDF-in-object, treat it as an image.

2015-02-11  ChangSeok Oh  <changseok.oh@collabora.com>

        Activate ReliefLogger of a memory pressure handler for linux system.
        https://bugs.webkit.org/show_bug.cgi?id=123611

        Reviewed by Anders Carlsson.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        Make the parameter, shouldEnableMemoryPressureReliefLogging shareable with COCOA else systems.
        (WebKit::WebProcessCreationParameters::encode): ditto.
        (WebKit::WebProcessCreationParameters::decode): ditto.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess): Set shouldEnableMemoryPressureReliefLogging
        to true for linux system.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Pass the shouldEnableMemoryPressureReliefLogging value
        to MemoryPressureHandler::ReliefLogger::setLoggingEnabled().

2015-02-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK][EFL] Suppress a warning of unused params
        https://bugs.webkit.org/show_bug.cgi?id=141474

        Reviewed by Darin Adler.

        Drop unused argument name, `directoryName`.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):

2015-02-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add default color chooser implementation using GtkColorChooserDialog
        https://bugs.webkit.org/show_bug.cgi?id=141392

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createColorPicker): Call WebColorPickerGtk::create().
        * UIProcess/gtk/WebColorPickerGtk.cpp: Added.
        (WebKit::WebColorPickerGtk::create):
        (WebKit::WebColorPickerGtk::WebColorPickerGtk):
        (WebKit::WebColorPickerGtk::~WebColorPickerGtk):
        (WebKit::WebColorPickerGtk::cancel): Set initial color.
        (WebKit::WebColorPickerGtk::endPicker): Destroy the color chooser dialog.
        (WebKit::WebColorPickerGtk::didChooseColor): Notify the client.
        (WebKit::WebColorPickerGtk::colorChooserDialogRGBAChangedCallback):
        Update the selected color.
        (WebKit::WebColorPickerGtk::colorChooserDialogResponseCallback):
        Cancel or finish the operation depending on the dialog response.
        (WebKit::WebColorPickerGtk::showColorPicker): Create a
        GtkColorChooserDialog to handle the color picker operation.
        * UIProcess/gtk/WebColorPickerGtk.h: Added.
        (WebKit::WebColorPickerGtk::initialColor):

2015-02-11  Commit Queue  <commit-queue@webkit.org>

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

        Caused assertions on debug bots (Requested by ap on #webkit).

        Reverted changeset:

        "[WK2] Add logging to validate the network cache efficacy
        (Part 2)"
        https://bugs.webkit.org/show_bug.cgi?id=141345
        http://trac.webkit.org/changeset/179910

2015-02-10  Chris Dumez  <cdumez@apple.com>

        [WK2] Add logging to validate the network cache efficacy (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=141345
        <rdar://problem/19632080>

        Reviewed by Antti Koivisto.

        Add diagnostic logging messages to validate the network cache efficacy.
        The following 4 messages are added:
        - networkCache / retrieval / success
        - networkCache / retrieval / unhandledRequestFailure
        - networkCache / retrieval / noLongerInCacheFailure
        - networkCache / retrieval / unusableCachedEntryFailure

        The messages are sent via IPC from the NetworkProcess to the UIProcess,
        where the WebPageProxy code already handles diagnostic messages sent by
        the WebProcess.

2015-02-10  Conrad Shultz  <conrad_shultz@apple.com>

        Clients need the ability to hook into immediate action lifecycle
        https://bugs.webkit.org/show_bug.cgi?id=141449

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Expose new methods.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _prepareForImmediateActionAnimation]):
        (-[WKView _cancelImmediateActionAnimation]):
        (-[WKView _completeImmediateActionAnimation]):
        Stub implementations.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        Send -_prepareForImmediateActionAnimation.
        (-[WKImmediateActionController immediateActionRecognizerDidCancelAnimation:]):
        Send -_cancelImmediateActionAnimation.
        (-[WKImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):
        Send -_completeImmediateActionAnimation.

2015-02-10  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19770264> Starting a navigation gesture dismisses the keyboard

        Reviewed by Tim Horton.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture): Reordered the view hierarchy changes,
        such that m_liveSwipeView will not momentarily move out of the window, because that causes
        the window’s first responder to be set to nil (if it was a descendant of m_liveSwipView).

2015-02-10  Enrica Casucci  <enrica@apple.com>

        Hit testing is misplaced when selecting on wikipedia page.
        https://bugs.webkit.org/show_bug.cgi?id=141410
        rdar://problem/19768211

        Reviewed by Simon Fraser.

        When loading a new document into the same WebPage object, we need
        to clear the assisted node, since there is no guarantee that the
        node will be blurred. The bug was caused by the use of a stale
        assisted node to constrain the point where the gesture occurs.
        The node was still valid, since the previous page was in the cache.
        I've added a ASSERT to check that, when constraining the point to
        node rectangle, the node is in the same document as the one we
        are performing hit test on. When the frame is detached, we clear
        the assisted node if the node is part of the document is the frame
        being detached.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::constrainPoint):
        (WebKit::WebPage::resetAssistedNodeForFrame):

2015-02-10  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] NSData over retain in WKBrowsingContextController loadData
        https://bugs.webkit.org/show_bug.cgi?id=141437

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]):
        API::Data::createWithoutCopying will automatically do the retaining / releasing for us.

2015-02-10  Zhuo Li  <zachli@apple.com>

        [WK2] Add support for registering url schemes to bypass Content Security Policy.
        https://bugs.webkit.org/show_bug.cgi?id=140736

        Reviewed by Anders Carlsson.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextRegisterURLSchemeAsBypassingContentSecurityPolicy):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::registerURLSchemeAsBypassingContentSecurityPolicy):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::registerURLSchemeAsBypassingContentSecurityPolicy):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2015-02-10  Sanghyup Lee  <sh53.lee@samsung.com>

        [EFL] Use a variable to set flicking time instead of hardcoding
        https://bugs.webkit.org/show_bug.cgi?id=138950

        Reviewed by Gyuyoung Kim.

        Currently time of flick gesture animation is hardcoded as one second.
        This patch added a static variable to increase readability.

        * UIProcess/API/efl/GestureRecognizer.cpp:
        (WebKit::GestureHandler::GestureHandler):
        (WebKit::GestureHandler::flickAnimatorCallback):
        (WebKit::GestureHandler::handleFlick):

2015-02-09  Enrica Casucci  <enrica@apple.com>

        Selection flickers when trying to change size of selection.
        https://bugs.webkit.org/show_bug.cgi?id=141404
        rdar://problem/18824863

        Reviewed by Benjamin Poulain.

        When looking for the contracted range from the current range,
        we were incorrectly choosing a selection whose rectangle is empty
        as a best match candidate. This was throwing off all the logic
        and producing a contracted range whose rectangle was bigger than the
        expanded range, therefore producing a shrink threshold larger than the
        growth one.

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

2015-02-09  Brian J. Burg  <burg@cs.washington.edu>

        REGRESSION(r179705): 2nd-level inspector availability no longer controlled by DeveloperExtrasEnabled user default
        https://bugs.webkit.org/show_bug.cgi?id=141343

        Reviewed by Timothy Hatcher.

        The regression was caused by the switch to using WKWebViewConfiguration and
        its default WebPreferences object, which is used to populate the inspector page's
        Settings object. This WebPreferences is initialized with no identifier, so
        only preferences in the FOR_EACH_WEBKIT_DEBUG_*_PREFERENCE macros are populated
        from NSUserDefaults.

        The simplest fix is to move DeveloperExtrasEnabled into the DEBUG group.

        Previously, each inspector level had a unique identifier such as
        __WebInspectorPageGroupLevelN__, and the n+1 level inspector was enabled
        by toggling __WebInspectorPageGroupLevelN__.WebKit2DeveloperExrasEnabled.
        With the move to the DEBUG group, the preference becomes simply
        WebKitDeveloperExtrasEnabled, which enables any level of inspector.
        (This does not clash with Safari's "Show Develop Menu" preference, which uses
        the key "WebKitDeveloperExtrasEnabledPreferenceKey")

        * Shared/WebPreferencesDefinitions.h:

2015-02-08  Antti Koivisto  <antti@apple.com>

        Measure cache size more accurately
        https://bugs.webkit.org/show_bug.cgi?id=141378
        <rdar://problem/19760224>

        Reviewed by Chris Dumez.

        Estimate the cache disk space usage from the actual entry sizes instead of the item count.
        This prevents large cache items from making the cache grow beyond its bounds.

        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::initialize):
        (WebKit::NetworkCacheStorage::removeEntry):
        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::clear):
        (WebKit::NetworkCacheStorage::shrinkIfNeeded):

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

        REGRESSION(r179705): [GTK] The Web Inspector doesn't work after r179705
        https://bugs.webkit.org/show_bug.cgi?id=141333

        Reviewed by Žan Doberšek.

        Create an initialize WebPreferences for the inspector page. This
        was moved from cross-platform code to platform specific code.

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

2015-02-08  Timothy Horton  <timothy_horton@apple.com>

        Null deref in _clearImmediateActionState when closing a view with a DataDetectors popover open
        https://bugs.webkit.org/show_bug.cgi?id=141377
        <rdar://problem/19711203>

        Reviewed by Darin Adler.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _clearImmediateActionState]):
        We can have already detached the page when DataDetectors calls us back
        in interactionStoppedHandler. While we have kept a strong reference to the
        page in the interactionStoppedHandler block, _page is nulled out.
        It's OK to avoid doing this work, in any case, because closing a page
        tears down the TextIndicator anyway.

2015-02-08  Chris Dumez  <cdumez@apple.com>

        [WK2] Add logging to validate the network cache efficacy (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=141269
        <rdar://problem/19632080>

        Reviewed by Antti Koivisto.

        Add console logging to validate the network cache efficacy. This will
        tell us if how the network cache satisties requests, in particular:
        - Request cannot be handled by the cache
        - Entry was not in the cache but is no longer there (pruned)
        - Entry is in the cache but is not usable
        - Entry is in the cache and is used.

        This patch introduces a SQLite-based network cache statistics storage
        that is used to store requests we have seen before, and query if we
        have seen a request before. The storage is lightweight as it only
        stores hashes in the database, in a background thread.

        The statistics cache is initially bootstapped from the network disk
        cache so that we have data initially and get as accurate statistics
        as possible from the start.

        To maintain an acceptable level of performance, we have a hard limit
        on the number of unique requests that are retained set to 100000.

        Diagnostic logging for this will be added in a follow-up patch.

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

        Add Vector::removeFirstMatching() / removeAllMatching() methods taking lambda functions
        https://bugs.webkit.org/show_bug.cgi?id=141321

        Reviewed by Darin Adler.

        Use new Vector::removeFirstMatching() / removeAllMatching() methods.

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

        Add API::HistoryClient and split some things out of API::NavigationClient
        https://bugs.webkit.org/show_bug.cgi?id=141264

        Reviewed by Darin Adler.

        * UIProcess/API/APIHistoryClient.h: Added.
        (API::HistoryClient::~HistoryClient):
        (API::HistoryClient::didNavigateWithNavigationData):
        (API::HistoryClient::didPerformClientRedirect):
        (API::HistoryClient::didPerformServerRedirect):
        (API::HistoryClient::didUpdateHistoryTitle):
        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::didNavigateWithNavigationData): Deleted.
        (API::NavigationClient::didPerformClientRedirect): Deleted.
        (API::NavigationClient::didPerformServerRedirect): Deleted.
        (API::NavigationClient::didUpdateHistoryTitle): Deleted.
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::createHistoryClient):
        (WebKit::NavigationState::HistoryClient::HistoryClient):
        (WebKit::NavigationState::HistoryClient::~HistoryClient):
        (WebKit::NavigationState::HistoryClient::didNavigateWithNavigationData):
        (WebKit::NavigationState::HistoryClient::didPerformClientRedirect):
        (WebKit::NavigationState::HistoryClient::didPerformServerRedirect):
        (WebKit::NavigationState::HistoryClient::didUpdateHistoryTitle):
        (WebKit::NavigationState::NavigationClient::didNavigateWithNavigationData): Deleted.
        (WebKit::NavigationState::NavigationClient::didPerformClientRedirect): Deleted.
        (WebKit::NavigationState::NavigationClient::didPerformServerRedirect): Deleted.
        (WebKit::NavigationState::NavigationClient::didUpdateHistoryTitle): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setHistoryClient):
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didUpdateHistoryTitle):
        * UIProcess/WebPageProxy.h:
        Add a API::HistoryClient and move the few things that belong on it out of API::NavigationClient.
        Adjust accordingly in WebPageProxy and NavigationState.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView setNavigationDelegate:]):
        (-[WKWebView setUIDelegate:]):
        (-[WKWebView _setHistoryDelegate:]):
        Lazily push the NavigationState/UIDelegate clients down to WebPageProxy upon
        installation of a delegate, so that alternative (C SPI) delegate setters can
        be separately created.

        * WebKit2.xcodeproj/project.pbxproj:

2015-02-07  Antti Koivisto  <antti@apple.com>

        And as a further followup restore the 8bit test too.

        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::hashString):

2015-02-07  Antti Koivisto  <antti@apple.com>

        Use longer hashes for cache keys
        https://bugs.webkit.org/show_bug.cgi?id=141356

        Rubber-stamped by Darin Adler.

        Folloup and build fix.

        * NetworkProcess/cache/NetworkCacheCoders.h:
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::hashString):

            Use containsOnlyASCII instead of is8Bit so both paths always compute the same hash.

        * NetworkProcess/cache/NetworkCacheKey.h:

2015-02-07  Antti Koivisto  <antti@apple.com>

        Remove a printf.

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

2015-02-07  Antti Koivisto  <antti@apple.com>

        Use longer hashes for cache keys
        https://bugs.webkit.org/show_bug.cgi?id=141356

        Reviewed by Darin Adler.

        The current key hashes are 32bit. We should use longer hashes to eliminate collisions.

        This patch switches us to using MD5 digests for the cache key hashes. As a result the file names for the cache
        entries grow from 8 to 32 character.

        Note that we don't need a cryptographic hash (full cache keys are verified against the entries).
        MD5 just happens to be fast, convenient and available.

        The patch also moves the whole cache hierarchy down to a versioned subdirectory ("WebKitCache/Version 2")
        and deletes any old style cache files if they exist.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCacheCoder<MD5::Digest>::encode):
        (WebKit::NetworkCacheCoder<MD5::Digest>::decode):
        * NetworkProcess/cache/NetworkCacheCoders.h:
        * NetworkProcess/cache/NetworkCacheKey.cpp:
        (WebKit::NetworkCacheKey::NetworkCacheKey):
        (WebKit::hashString):
        (WebKit::NetworkCacheKey::computeHash):
        (WebKit::NetworkCacheKey::hashAsString):
        (WebKit::NetworkCacheKey::stringToHash):
        * NetworkProcess/cache/NetworkCacheKey.h:
        (WebKit::NetworkCacheKey::shortHash):
        (WebKit::NetworkCacheKey::toShortHash):

            32bit hash to use in the bloom filter.

        (WebKit::NetworkCacheKey::hashStringLength):
        * NetworkProcess/cache/NetworkCacheStorage.h:

            Bump the version.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::traverseCacheFiles):
        (WebKit::makeVersionedDirectoryPath):
        (WebKit::NetworkCacheStorage::NetworkCacheStorage):
        (WebKit::NetworkCacheStorage::initialize):
        (WebKit::NetworkCacheStorage::removeEntry):
        (WebKit::NetworkCacheStorage::retrieve):
        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::update):
        (WebKit::NetworkCacheStorage::shrinkIfNeeded):
        (WebKit::NetworkCacheStorage::deleteOldVersions):

            Wipe out the version 1 cache.

2015-02-06  Chris Dumez  <cdumez@apple.com>

        Have SQLiteStatement::database() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=141348

        Reviewed by Andreas Kling.

        Have SQLiteStatement::database() return a reference as it can never
        return null.

        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp:
        (WebKit::SQLiteIDBCursor::internalAdvanceOnce):

2015-02-06  Alexey Proskuryakov  <ap@apple.com>

        Report network process crashes during layout tests
        https://bugs.webkit.org/show_bug.cgi?id=139646

        Reviewed by Anders Carlsson.

        Added a way to get network process pid, modeled after how we do this for web process.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextGetNetworkProcessIdentifier):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::networkProcessCrashed): Don't reset m_networkProcess until
        after calling the client, so that the client could retrieve its pid.
        (WebKit::WebProcessPool::networkProcessIdentifier):
        * UIProcess/WebProcessPool.h:

2015-02-05  Timothy Hatcher  <timothy@apple.com>

        Support overriding the deviceScaleFactor per WKWebView/WKView
        https://bugs.webkit.org/show_bug.cgi?id=141311

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setOverrideDeviceScaleFactor:]):
        (-[WKWebView _overrideDeviceScaleFactor]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _intrinsicDeviceScaleFactor]):
        (-[WKView _setOverrideDeviceScaleFactor:]):
        (-[WKView _overrideDeviceScaleFactor]):

2015-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove WebKitWebView::close-notification signal
        https://bugs.webkit.org/show_bug.cgi?id=141330

        Reviewed by Gustavo Noronha Silva.

        In favor of a WebKitNotification::closed signal and
        webkit_notification_close() method that both applications and
        WebKit can use to close a notification. This also fixes the
        onclose event that was not fired when the notification was
        closed. It also brings back padding space in WebKitWebViewClass.

        * UIProcess/API/gtk/WebKitNotification.cpp:
        (webkit_notification_class_init): Add WebKitNotification::closed signal.
        (webkit_notification_close): Emit WebKitNotification::closed.
        * UIProcess/API/gtk/WebKitNotification.h:
        * UIProcess/API/gtk/WebKitNotificationProvider.cpp:
        (WebKitNotificationProvider::notificationCloseCallback): Callback
        for WebKitNotification::closed signal that notifies the WebProcess
        and removes the notification from the map.
        (WebKitNotificationProvider::show): Connect to WebKitNotification::closed.
        (WebKitNotificationProvider::cancelNotificationByID): Call webkit_notification_close().
        * UIProcess/API/gtk/WebKitNotificationProvider.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (notifyNotificationClosed): The user closed the annotation, call
        webkit_notification_close().
        (webNotificationClosed): The WebKitNotification has been closed,
        close the libnotify notification if it hasn't been closed yet.
        (webkitWebViewShowNotification): Create the libnotifiy
        notification if needed and associate it to the WebKitNotification
        as user data. Connect to the closed signal of both, the libnotifiy
        notification and the WebKit notification.
        (webkitWebViewCloseNotification): Deleted.
        (webkit_web_view_class_init): Remove close-notification signal and
        the default hanlder.
        (webkitWebViewEmitCloseNotification): Deleted.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Add webkit_notification_close.

2015-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        ASSERTION FAILED: !m_adoptionIsRequired in WTF::RefCountedBase::ref
        https://bugs.webkit.org/show_bug.cgi?id=141035

        Reviewed by Sergio Villar Senin.

        Rename PrinterListGtk::singleton() as PrinterListGtk::getOrCreate(), and
        make it return nullptr when the shared PrinterListGtk object is
        still being created. This can happen if the nested loop used by
        gtk_enumerate_printers dispatches a GSource that starts a new
        synchronous print operation. In that case we just ignore the
        second print operation, since there's already one ongoing.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::print): Return early if
        PrinterListGtk::getOrCreate() return nullptr.
        * WebProcess/WebPage/gtk/PrinterListGtk.cpp:
        (WebKit::PrinterListGtk::getOrCreate): Return nullptr if the
        PrinterListGtk is still enumerating the printers.
        (WebKit::PrinterListGtk::PrinterListGtk): Initialize
        m_enumeratingPrinters to true before calling
        gtk_enumerate_printers, and to false once it finishes.
        (WebKit::PrinterListGtk::singleton): Deleted.
        (WebKit::PrinterListGtk::enumeratePrintersFunction): Deleted.
        * WebProcess/WebPage/gtk/PrinterListGtk.h:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp: Add an
        assertion here since PrinterListGtk::getOrCreate() should never
        return nullptr at this point.

2015-02-05  Tim Horton  <timothy_horton@apple.com>

        Null deref in ViewGestureController::beginSwipeGesture when swiping while script is navigating
        https://bugs.webkit.org/show_bug.cgi?id=141308
        <rdar://problem/18460046>

        Reviewed by Simon Fraser.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::trackSwipeGesture):
        If script navigates (history.back, probably other cases too) while in the middle of
        building up enough scroll events to start a swipe, it can destroy the history item
        that we were planning to swipe to. If this happens, bail from the swipe.

2015-02-05  Alexey Proskuryakov  <ap@apple.com>

        Don't pass architecture to development plug-in XPC services
        https://bugs.webkit.org/show_bug.cgi?id=141309

        Reviewed by Anders Carlsson.

        We now have separate services for 32-bit and 64-bit.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        (WebKit::reexec):
        (WebKit::XPCServiceEventHandler):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToReExecService):

2015-02-05  Chris Dumez  <cdumez@apple.com>

        Use deleteEmptyDirectory() in NetworkCacheStorage::clear()
        https://bugs.webkit.org/show_bug.cgi?id=141314

        Reviewed by Antti Koivisto.

        Use deleteEmptyDirectory() in NetworkCacheStorage::clear() to simplify
        the code a little bit.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::clear):

2015-02-05  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Remove False Positive dispatch_source Leak in WebMemoryPressureHandler singleton
        https://bugs.webkit.org/show_bug.cgi?id=141307

        Reviewed by Anders Carlsson.

        * UIProcess/ios/WebMemoryPressureHandlerIOS.h:
        * UIProcess/ios/WebMemoryPressureHandlerIOS.mm:
        (WebKit::WebMemoryPressureHandler::WebMemoryPressureHandler):
        We want to keep the dispatch_source around, so just tie it to the
        singleton so that it is not reported as a leak.

2015-02-05  Antti Koivisto  <antti@apple.com>

        Switch to file backed buffer when resource is cached to disk
        https://bugs.webkit.org/show_bug.cgi?id=141295

        Reviewed by Chris Dumez.

        Wire the DidCacheResource mechanism to the new disk cache.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):

            Send DidCacheResource message to the web process so it can switch the resource to file backing.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::store):
        (WebKit::NetworkCache::update):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::DispatchPtr::DispatchPtr):
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::Data::Data):
        (WebKit::mapFile):
        (WebKit::decodeEntry):
        (WebKit::retrieveActive):
        (WebKit::NetworkCacheStorage::retrieve):
        (WebKit::NetworkCacheStorage::store):

            Map files larger than a memory page after a successful store.

        (WebKit::NetworkCacheStorage::update):
        (WebKit::encodeEntry): Deleted.

2015-02-05  Chris Dumez  <cdumez@apple.com>

        [WK2] Properly check for mmap() error case
        https://bugs.webkit.org/show_bug.cgi?id=141304

        Reviewed by Anders Carlsson.

        mmap() returns MAP_FAILED, which is (void*)-1, not a null pointer in
        case of failure. This patch updates several wrong error checks in
        WebKit2.

        * Platform/IPC/ArgumentEncoder.cpp:
        (IPC::allocBuffer):
        (IPC::ArgumentEncoder::reserve):
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendOutgoingMessage):

2015-02-05  Brian J. Burg  <burg@cs.washington.edu>

        Clean up WebInspectorProxy and use simpler inspector levels design
        https://bugs.webkit.org/show_bug.cgi?id=141135

        Reviewed by Timothy Hatcher.

        Inspector levels used to be managed by keeping a set of WebPageGroup
        instances and doing pointer comparisons to check whether the inspected
        view is itself a web inspector instance. This is unnecessary, as we
        can maintain a mapping from WebPageProxy* to its corresponding level.

        When an inspector instance is created, it is inserted into the mapping
        along with its level. An inspector's level is 1 unless its inspected page
        is in the mapping, then it is one greater that the inspected page's level.

        The level is provided by inspectorLevel(), rather than a member variable.
        WebInspectorProxy is created in the constructor of WebPageProxy. Thus, there
        would be no chance to add the inspector page's level to the mapping before the
        next level inspector tries to look it up when initializing its members.

        This patch introduces other miscellaneous cleanups, such as naming m_page
        to m_inspectedPage, using Ref and using an enum class for the attachment side.

        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorGetPage):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (resizeWebKitWebViewBaseFromAllocation):
        * UIProcess/InspectorServer/efl/WebInspectorServerEfl.cpp:
        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::pageLevelMap):
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        (WebKit::WebInspectorProxy::inspectorLevel):
        (WebKit::WebInspectorProxy::inspectorPageGroupIdentifier):
        (WebKit::WebInspectorProxy::inspectorPagePreferences):
        (WebKit::WebInspectorProxy::invalidate):
        (WebKit::WebInspectorProxy::isFront):
        (WebKit::WebInspectorProxy::connect):
        (WebKit::WebInspectorProxy::show):
        (WebKit::WebInspectorProxy::hide):
        (WebKit::WebInspectorProxy::close):
        (WebKit::WebInspectorProxy::didRelaunchInspectorPageProcess):
        (WebKit::WebInspectorProxy::showConsole):
        (WebKit::WebInspectorProxy::showResources):
        (WebKit::WebInspectorProxy::showMainResourceForFrame):
        (WebKit::WebInspectorProxy::attachBottom):
        (WebKit::WebInspectorProxy::attachRight):
        (WebKit::WebInspectorProxy::attach):
        (WebKit::WebInspectorProxy::detach):
        (WebKit::WebInspectorProxy::togglePageProfiling):
        (WebKit::WebInspectorProxy::isInspectorPage):
        (WebKit::decidePolicyForNavigationAction):
        (WebKit::WebInspectorProxy::remoteFrontendConnected):
        (WebKit::WebInspectorProxy::remoteFrontendDisconnected):
        (WebKit::WebInspectorProxy::dispatchMessageFromRemoteFrontend):
        (WebKit::WebInspectorProxy::eagerlyCreateInspectorPage):
        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::didClose):
        (WebKit::WebInspectorPageGroups::singleton): Deleted.
        (WebKit::WebInspectorPageGroups::inspectorLevel): Deleted.
        (WebKit::WebInspectorPageGroups::isInspectorPageGroup): Deleted.
        (WebKit::WebInspectorPageGroups::inspectorPageGroupLevel): Deleted.
        (WebKit::WebInspectorPageGroups::inspectorPageGroupForLevel): Deleted.
        (WebKit::WebInspectorPageGroups::createInspectorPageGroup): Deleted.
        (WebKit::WebInspectorProxy::~WebInspectorProxy): Deleted.
        (WebKit::WebInspectorProxy::inspectorPageGroup): Deleted.
        (WebKit::WebInspectorProxy::setAttachedWindowHeight): Deleted.
        (WebKit::WebInspectorProxy::enableRemoteInspection): Deleted.
        (WebKit::WebInspectorProxy::open): Deleted.
        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::create):
        (WebKit::WebInspectorProxy::inspectedPage):
        (WebKit::WebInspectorProxy::page): Deleted.
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::dockButtonClicked):
        (WebKit::WebInspectorProxy::createInspectorWindow):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowWidth):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter attachRight:]):
        (-[WKWebInspectorProxyObjCAdapter attachBottom:]):
        (WebKit::WebInspectorProxy::createInspectorWindow):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformBringToFront):
        (WebKit::WebInspectorProxy::windowFrameDidChange):
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (-[WKWebInspectorProxyObjCAdapter close]): Deleted.

2015-02-05  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Populate m_contentsFilter bloom filter from the main dispatch queue NetworkCacheStorage::initialize()
        https://bugs.webkit.org/show_bug.cgi?id=141297

        Reviewed by Antti Koivisto.

        Populate m_contentsFilter bloom filter from the main dispatch queue
        NetworkCacheStorage::initialize() to avoid thread-safety issues.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::initialize):

2015-02-05  Chris Dumez  <cdumez@apple.com>

        Use deleteFile() in NetworkCacheStorageCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=141299

        Reviewed by Antti Koivisto.

        Use deleteFile() in NetworkCacheStorageCocoa.mm to simplify the code
        a bit.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::removeEntry):
        (WebKit::NetworkCacheStorage::clear):
        (WebKit::NetworkCacheStorage::shrinkIfNeeded):

2015-02-04  Antti Koivisto  <antti@apple.com>

        Avoid copying std::functions across threads in NetworkCacheStorage
        https://bugs.webkit.org/show_bug.cgi?id=141273

        Reviewed by Andreas Kling.

        The current approach is risky. There is possiblity that captured variables are
        deleted in an unexpected thread.

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

            The capture trick here is no longer needed.

        * NetworkProcess/cache/NetworkCacheStorage.h:

            For each cache operation we create Retrive/Store/UpdateOperation object kept alive by the active operation map.
            This object captures all parameters of the operation including the lambda. When the operation completes
            the object is removed from the map in the main thread, ensuring safe destruction.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::dispatchRetrieveOperation):
        (WebKit::NetworkCacheStorage::dispatchPendingRetrieveOperations):
        (WebKit::retrieveActive):

            Instead of maintaining a separate write cache we just look through the active write and update maps.

        (WebKit::NetworkCacheStorage::retrieve):

            Use fixed sized priority array rather than a dynamic one. Vector<Deque<std::unique_ptr>> doesn't quite work.

        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::update):
        (WebKit::NetworkCacheStorage::clear):

2015-02-05  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar <calvaris@igalia.com>

        [Streams API] Implement a barebone ReadableStream interface
        https://bugs.webkit.org/show_bug.cgi?id=141045

        Reviewed by Benjamin Poulain.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:

2015-02-04  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Selection callout does not follow selection when double-tap scrolling
        https://bugs.webkit.org/show_bug.cgi?id=141214

        Reviewed by Benjamin Poulain.

        Implement the delegate that gets called after UIScrollView
        setContentOffset animations. When scrolling to a rect, do the normal
        willScroll, didScroll actions to update the selection assistant.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToRect:origin:minimumScrollDistance:]):
        (-[WKWebView scrollViewDidEndScrollingAnimation:]):

2015-02-04  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Layers that are created and destroyed in the same transaction shouldn't be encoded
        https://bugs.webkit.org/show_bug.cgi?id=141228

        Reviewed by Tim Horton.
        
        With UI-side compositing, it was possible for layers to get created and
        destroyed in the same transaction (e.g. two layouts before a single layer
        tree commit). When that happened we would encode layer creation properties
        but not encode layer properties, since the layer would be unreachable.
        
        Fix by removing deleted layers from the created layers list, which is
        converted into a map for easy searching.

        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::layerWasCreated):
        (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed):
        (WebKit::RemoteLayerTreeContext::buildTransaction):

2015-02-04  Michael Catanzaro  <mcatanzaro@igalia.com>

        Build with seccomp filters broken since r179409
        https://bugs.webkit.org/show_bug.cgi?id=141206

        Reviewed by Darin Adler.

        Fix build by renaming SeccompBrokerClient::shared to SeccompBrokerClient::singleton.

        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        (WebKit::SeccompBrokerClient::singleton):
        (WebKit::SeccompBroker::initialize):
        (WebKit::SeccompBrokerClient::shared):
        (WebKit::SeccompBroker::runLoop):

2015-02-04  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Assert in ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren() on tab switching
        https://bugs.webkit.org/show_bug.cgi?id=141223
        rdar://problem/18458993

        Reviewed by Tim Horton.

        It's possible to submit a RemoteLayerTree transaction that contains data
        about a created layer, but doesn't have any properties for that layer. This
        happens when the newly created layer isn't reached during the traversal that
        gathers layer properties (i.e. it's not rooted). However, whether we create
        a scrolling layer or not requires having properties; they are missing, so we
        create a normal layer, but then the scrolling tree commit asserts that we
        should have a scrolling layer.
        
        Fix by making scrolling layers have a corresponding layer type, which is
        stored in layer creation properties. This required exposing layer types
        up through GraphicsLayer, but that allows for some nice cleanup:
        
        1. No need to have the hokey shouldUseTiledBacking() GraphicsLayerClient hack
           for creating the page tiled layer.
        2. The notion of "custom behaviors" can be removed from GraphicsLayer entirely.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        (WebKit::RemoteLayerTreeTransaction::description):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::customBehavior): Deleted.
        (WebKit::PlatformCALayerRemote::updateCustomBehavior): Deleted.
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::createGraphicsLayer):

2015-02-04  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Manage failing API tests
        https://bugs.webkit.org/show_bug.cgi?id=141250

        Reviewed by Csaba Osztrogonác.

        * PlatformEfl.cmake: Skip to test test_ewk2_storage_manager.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Disable 2 unit test functions.
        (TEST_F):

2015-02-04  Chris Dumez  <cdumez@apple.com>

        Add removeFirst(value) / removeAll(value) methods to WTF::Vector
        https://bugs.webkit.org/show_bug.cgi?id=141192

        Reviewed by Benjamin Poulain.

        Use new Vector::removeFirst(value) / removeAll(value) API to simplify the
        code a bit.

        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp:
        (WebKit::WebSoupCustomProtocolRequestManager::unregisterSchemeForCustomProtocol):
        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::removeObserver):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::~WebProcessPool):
        (WebKit::WebProcessPool::disconnectProcess):
        * WebProcess/InjectedBundle/API/efl/ewk_extension.cpp:
        (EwkExtension::remove):

2015-02-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix GTK/EFL build after r179588.

        Add new files to CMakeLists.txt.

        * CMakeLists.txt:

2015-02-03  Shivakumar JM  <shiva.jm@samsung.com>

        Fix build warning in WebKit2/Platform/IPC module.
        https://bugs.webkit.org/show_bug.cgi?id=141229

        Reviewed by Chris Dumez.

        Fix build warning by using UNUSED_PARAM macro.

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

2015-02-03  Tim Horton  <timothy_horton@apple.com>

        Add WKPageNavigationClient as C SPI around API::NavigationClient, and adopt in WKTR
        https://bugs.webkit.org/show_bug.cgi?id=141217

        * UIProcess/API/C/WKPageRenderingProgressEventsInternal.h:
        Include, not import.

2015-02-03  Tim Horton  <timothy_horton@apple.com>

        Add WKPageNavigationClient as C SPI around API::NavigationClient, and adopt in WKTR
        https://bugs.webkit.org/show_bug.cgi?id=141217

        Reviewed by Sam Weinig.

        * Shared/API/c/WKBase.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKFrameInfoRef.cpp: Added.
        (WKFrameInfoGetTypeID):
        * UIProcess/API/C/WKFrameInfoRef.h: Added.
        * UIProcess/API/C/WKNavigationActionRef.cpp: Added.
        (WKNavigationActionGetTypeID):
        * UIProcess/API/C/WKNavigationActionRef.h: Added.
        * UIProcess/API/C/WKNavigationRef.cpp: Added.
        (WKNavigationGetTypeID):
        * UIProcess/API/C/WKNavigationRef.h: Added.
        * UIProcess/API/C/WKNavigationResponseRef.cpp: Added.
        (WKNavigationResponseGetTypeID):
        (WKNavigationResponseCanShowMIMEType):
        * UIProcess/API/C/WKNavigationResponseRef.h: Added.
        Add tiny C wrappers around API::{FrameInfo, NavigationAction, Navigation, NavigationResponse}.

        * UIProcess/API/APINavigationClient.h:
        (API::NavigationClient::decidePolicyForPluginLoad):
        Add a default implementation of decidePolicyForPluginLoad.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageNavigationClient):
        * UIProcess/API/C/WKPage.h:
        Add WKPageSetPageNavigationClient, which connects API::NavigationClient to
        the new WKPageNavigationClient C SPI.
        
        * UIProcess/API/C/WKPageNavigationClient.h: Added.
        Add WKPageNavigationClient, which one can use in place of WKPageLoaderClient
        and WKPagePolicyClient and which has the same semantics as the Modern ObjC API
        (including things like API::Navigation as WKNavigationRef, etc.)

        * UIProcess/API/C/WKPageLoaderClient.h:
        * UIProcess/API/C/WKPageRenderingProgressEvents.h: Added.
        * UIProcess/API/C/WKPageRenderingProgressEventsInternal.h: Added.
        (pageRenderingProgressEvents):
        * UIProcess/API/C/WKPluginLoadPolicy.h: Added.
        Pull some enums out into their own files (WKPageRenderingProgressEvents is
        duplicated from the Modern ObjC API's _WKRenderingProgressEvents, WKPluginLoadPolicy
        is pulled out of WKPageLoaderClient).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        Add an equivalent of pluginLoadPolicy to the NavigationClient.

        * WebKit2.xcodeproj/project.pbxproj:

2015-02-03  Timothy Horton  <timothy_horton@apple.com>

        Every PageOverlayClientImpl leaks
        https://bugs.webkit.org/show_bug.cgi?id=141224
        <rdar://problem/19652939>

        Reviewed by Simon Fraser.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlayCreate):
        * WebProcess/WebPage/WebPageOverlay.cpp:
        (WebKit::WebPageOverlay::create):
        (WebKit::WebPageOverlay::WebPageOverlay):
        (WebKit::WebPageOverlay::pageOverlayDestroyed):
        (WebKit::WebPageOverlay::willMoveToPage):
        (WebKit::WebPageOverlay::didMoveToPage):
        (WebKit::WebPageOverlay::drawRect):
        (WebKit::WebPageOverlay::mouseEvent):
        (WebKit::WebPageOverlay::didScrollFrame):
        (WebKit::WebPageOverlay::actionContextForResultAtPoint):
        (WebKit::WebPageOverlay::dataDetectorsDidPresentUI):
        (WebKit::WebPageOverlay::dataDetectorsDidChangeUI):
        (WebKit::WebPageOverlay::dataDetectorsDidHideUI):
        (WebKit::WebPageOverlay::copyAccessibilityAttributeStringValueForPoint):
        (WebKit::WebPageOverlay::copyAccessibilityAttributeBoolValueForPoint):
        (WebKit::WebPageOverlay::copyAccessibilityAttributeNames):
        * WebProcess/WebPage/WebPageOverlay.h:
        (WebKit::WebPageOverlay::client):
        Keep the PageOverlayClientImpl as a unique_ptr instead of a leaked reference,
        ensuring that it's cleaned up when the WebPageOverlay is torn down.

2015-02-03  Chris Dumez  <cdumez@apple.com>

        Drop ResourceLoadPriorityUnresolved resource load priority and use Optional<> instead
        https://bugs.webkit.org/show_bug.cgi?id=141186

        Reviewed by Antti Koivisto.

        Update code now that ResourceLoadPriorityUnresolved is not longer a
        ResourceLoadPriority enum value.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::retrieve):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):

2015-02-03  Enrica Casucci  <enrica@apple.com>

        [iOS] Add support for deleteFromInputWithFlags.
        https://bugs.webkit.org/show_bug.cgi?id=141216
        rdar://problem/19130081

        Reviewed by Benjamin Poulain.

        Adopts the new method as soon as it is available.
        The patch also removes some obsolete code used for staging.

        * Platform/spi/ios/UIKitSPI.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):

2015-02-03  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Selection Callout should not immediately disappear on pages with frequent layouts
        https://bugs.webkit.org/show_bug.cgi?id=141210

        Reviewed by Enrica Casucci.

        In iOS WebKit2 in order to keep caret refreshes in sync with WebCore layouts
        the selection assistant is told to update whenever WebKit's layer tree
        commits. Unfortunately, for pages with JavaScript animation that are
        frequently doing a layout / layer tree update, this would trigger very
        frequent selection updates that would keep the caret from blinking and
        dismiss any selection callouts.

        This change tracks the last selection drawing information so that we can
        avoid informing the assistant of a selection updates unless it has changed
        visually or needs to redraw (zoom).

        * Shared/EditorState.cpp:
        Remove include already in header.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (WebKit::WKSelectionDrawingInfo::WKSelectionDrawingInfo):
        (WebKit::operator==):
        (WebKit::operator!=):
        (-[WKContentView observeValueForKeyPath:ofObject:change:context:]):
        When zooming, force the selection update, even though the drawing
        information hasn't changed, the views will need to be updated.

        (-[WKContentView _updateChangedSelection]):
        (-[WKContentView _updateChangedSelection:]):
        Monitor EditorState for changes in selection drawing and avoid
        informing the selection assistant unless necessary.

2015-02-03  Jeremy Jones  <jeremyj@apple.com>

        Prevent flicker when exiting fullscreen by synchronizing transactions.
        https://bugs.webkit.org/show_bug.cgi?id=140897

        Reviewed by Tim Horton.

        Flush transactions before removing layerHost. This allows existing transactions to be completed before the hosting layer disappears.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::didCleanupFullscreen):

2015-02-03  Brian J. Burg  <burg@cs.washington.edu>

        Convert WebInspectorProxy to use WKWebView API for the inspector view
        https://bugs.webkit.org/show_bug.cgi?id=141037

        Reviewed by Timothy Hatcher.

        Use the newer API for PLATFORM(MAC). The main difference is that the
        WKWebView's page group cannot be set directly; instead, the group identifier
        is passed. Also add some preference setters needed for the inspector.

        Refactor some code to not use page groups directly. In a future patch,
        the PageGroup-based inspector level system will be simplified. It is
        it is no longer necessary to keep a static map of PageGroup instances,
        since they are only used to save inspector window preferences. (These used
        to prevent all levels of inspector from pausing together when a second-level
        inspector hit a breakpoint. This is not necessary with multi-process
        web inspectors.)

        Also, adjust window resizing behavior when the inspector is docked to
        the right. Window width resizes should not affect the width of the inspector
        frame. This matches the behavior of height changes when docked to the bottom.

        To support 32-bit Mac builds where WKWebView is not defined, share the stub
        platformFoo() implementations with PLATFORM(IOS). The stubs are now located
        in the platform-independent WebInspectorProxy.cpp.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _logsPageMessagesToSystemConsoleEnabled]): Added.
        (-[WKPreferences _setLogsPageMessagesToSystemConsoleEnabled:]): Added.
        (-[WKPreferences _allowFileAccessFromFileURLs]): Added.
        (-[WKPreferences _setAllowFileAccessFromFileURLs:]): Added.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        (WebKit::WebInspectorProxy::inspectorPagePreferences):
        (WebKit::WebInspectorProxy::attach):
        (WebKit::WebInspectorProxy::detach):
        (WebKit::WebInspectorProxy::setAttachedWindowHeight):
        (WebKit::WebInspectorProxy::setAttachedWindowWidth):
        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::shouldOpenAttached):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformOpen):
        (WebKit::WebInspectorProxy::platformDidClose):
        (WebKit::WebInspectorProxy::platformInvalidate):
        (WebKit::WebInspectorProxy::platformBringToFront):
        (WebKit::WebInspectorProxy::platformHide):
        (WebKit::WebInspectorProxy::platformIsFront):
        (WebKit::WebInspectorProxy::platformInspectedURLChanged):
        (WebKit::WebInspectorProxy::platformSave):
        (WebKit::WebInspectorProxy::platformAppend):
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight):
        (WebKit::WebInspectorProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight):
        (WebKit::WebInspectorProxy::platformSetToolbarHeight):
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowWidth):
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/ios/WebInspectorProxyIOS.mm: Removed.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorWKWebView _didRelaunchProcess]):
        WKWebView doesn't implement this, so remove the super call.
        (WebKit::WebInspectorProxy::closeTimerFired):
        (WebKit::createDockButton):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformAttach):
        (-[WKWebInspectorWKView _didRelaunchProcess]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2015-02-03  Antti Koivisto  <antti@apple.com>

        Memory cache for resources pending disk write
        https://bugs.webkit.org/show_bug.cgi?id=141159

        Reviewed by Andreas Kling.

        If a resource was requested from the disk cache before it has been written we ended up
        loading it again. Add a short lived memory cache to avoid this.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::decodeStorageEntry):
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCacheStorage::Data::isMap):

            Add a way to know whether a Data is backed by map or not. SharedMemory does not work correctly
            if it is not a map.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::Data::Data):
        (WebKit::NetworkCacheStorage::initialize):

            Also do some renaming.

        (WebKit::decodeEntry):
        (WebKit::NetworkCacheStorage::removeEntry):
        (WebKit::NetworkCacheStorage::retrieve):
        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::clear):
        (WebKit::NetworkCacheStorage::shrinkIfNeeded):

2015-02-02  Antti Koivisto  <antti@apple.com>

        Update cache header after revalidation without rewriting the body data
        https://bugs.webkit.org/show_bug.cgi?id=141182

        Reviewed by Andreas Kling.

        Currently we just rewrite the entire entry after revalidation.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::decodeStorageEntry):

            Include the strorage entry to the cache response so we can more easily update it.

        (WebKit::NetworkCache::update):

            Call the storage update function with the new and the exisiting storage entry.

        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::openFileForKey):

            Added an option for opening a file for writing without creating a new one.
            Renamed for clarity.

        (WebKit::encodeEntryHeader):

            Separate header encoding to a function.

        (WebKit::encodeEntry):
        (WebKit::NetworkCacheStorage::dispatchRetrieveOperation):
        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::update):

            New update function.
            If the page-rounded header size would stay unchanged we can just write the new header over the old one.
            In the unlikely event it doesn't we rewrite the whole thing.

        (WebKit::createIOChannelForKey): Deleted.

2015-02-02  Commit Queue  <commit-queue@webkit.org>

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

        need further investigation to fix !WK_API_ENABLED (32bit)
        build. (Requested by brrian_ on #webkit).

        Reverted changeset:

        "Convert WebInspectorProxy to use WKWebView API for the
        inspector view"
        https://bugs.webkit.org/show_bug.cgi?id=141037
        http://trac.webkit.org/changeset/179540

2015-02-02  Brian J. Burg  <burg@cs.washington.edu>

        Convert WebInspectorProxy to use WKWebView API for the inspector view
        https://bugs.webkit.org/show_bug.cgi?id=141037

        Reviewed by Timothy Hatcher.

        Use the newer API for PLATFORM(MAC). The main difference is that the
        WKWebView's page group cannot be set directly; instead, the group identifier
        is passed. Also add some preference setters needed for the inspector.

        Refactor some code to not use page groups directly. In a future patch,
        the PageGroup-based inspector level system will be simplified. It is
        it is no longer necessary to keep a static map of PageGroup instances,
        since they are only used to save inspector window preferences. (These used
        to prevent all levels of inspector from pausing together when a second-level
        inspector hit a breakpoint. This is not necessary with multi-process
        web inspectors.)

        Also, adjust window resizing behavior when the inspector is docked to
        the right. Window width resizes should not affect the width of the inspector
        frame. This matches the behavior of height changes when docked to the bottom.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _logsPageMessagesToSystemConsoleEnabled]): Added.
        (-[WKPreferences _setLogsPageMessagesToSystemConsoleEnabled:]): Added.
        (-[WKPreferences _allowFileAccessFromFileURLs]): Added.
        (-[WKPreferences _setAllowFileAccessFromFileURLs:]): Added.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        (WebKit::WebInspectorProxy::inspectorPagePreferences): Added.
        (WebKit::WebInspectorProxy::attach):
        (WebKit::WebInspectorProxy::detach):
        (WebKit::WebInspectorProxy::setAttachedWindowHeight):
        (WebKit::WebInspectorProxy::setAttachedWindowWidth):
        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::shouldOpenAttached):
        * UIProcess/WebInspectorProxy.h: Use default member initializers.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorWKWebView _didRelaunchProcess]):
        WKWebView doesn't implement this, so remove the super call.
        (WebKit::WebInspectorProxy::closeTimerFired):
        (WebKit::createDockButton):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformAttach):
        (-[WKWebInspectorWKView _didRelaunchProcess]): Deleted.

2015-02-02  Chris Dumez  <cdumez@apple.com>

        Make NetworkCache's constructor private
        https://bugs.webkit.org/show_bug.cgi?id=141181

        Reviewed by Antti Koivisto.

        Make NetworkCache's constructor private and mark its destructor as
        deleted as it is a singleton class.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::NetworkCache::NetworkCache): Deleted.
        * NetworkProcess/cache/NetworkCache.h:

2015-02-02  Filip Pizlo  <fpizlo@apple.com>

        Revert accidental (and super bad) change in r179490.

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

2015-02-02  Chris Dumez  <cdumez@apple.com>

        Access MemoryCache singleton using MemoryCache::singleton()
        https://bugs.webkit.org/show_bug.cgi?id=141104

        Reviewed by Andreas Kling.

        Access MemoryCache singleton using MemoryCache::singleton() static
        member function, instead of a free function, as per the recent
        coding style discussion on WebKit-dev.

2015-02-02  Jeremy Jones  <jeremyj@apple.com>

        Prevent crash when accessing WebAVPlayerController.delegate.
        https://bugs.webkit.org/show_bug.cgi?id=140893

        Reviewed by Darin Adler.

        Plumb new resetMediaState() through IPC interface WebVideoFullscreenManagerProxy.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::invalidate): remove redundant set to nullptr.
        * WebProcess/ios/WebVideoFullscreenManager.h:
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::resetMediaState):

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

        Use more references in HistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=141133

        Reviewed by Andreas Kling.

        Use more references in HistoryItem instead of pointers.

        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp:
        (WebKit::InjectedBundleBackForwardListItem::children):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toFrameState):
        (WebKit::applyFrameState):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::addItem):
        * WebProcess/WebPage/WebBackForwardListProxy.h:

2015-02-01  Dan Bernstein  <mitz@apple.com>

        Remove ViewGestureController tracing
        https://bugs.webkit.org/show_bug.cgi?id=141137

        Reviewed by Tim Horton.

        Remove the tracing added in r176133, now that http://webkit.org/b/138750 is fixed.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        (WebKit::ViewGestureController::willCommitPostSwipeTransitionLayerTree):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        (WebKit::addLogEntry): Deleted.
        (WebKit::dumpLogEntries): Deleted.
        * UIProcess/mac/ViewGestureController.h:

2015-01-31  Sam Weinig  <sam@webkit.org>

        Remove even more Mountain Lion support
        https://bugs.webkit.org/show_bug.cgi?id=141124

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebContentService.Development.xcconfig:
        * Configurations/WebContentService.xcconfig:
        * Configurations/WebKit.xcconfig:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2015-01-31  Antti Koivisto  <antti@apple.com>

        Enable WebKit disk cache on OS X
        https://bugs.webkit.org/show_bug.cgi?id=141022

        Reviewed by Gavin Barraclough.

        * config.h: Flip the switch.

2015-01-31  Antti Koivisto  <antti@apple.com>

        Unreviewed, rolling out r179447.

        Forgot to include the test.

        Reverted changeset:

        "Enable WebKit disk cache on OS X"
        https://bugs.webkit.org/show_bug.cgi?id=141022
        http://trac.webkit.org/changeset/179447

2015-01-31  Antti Koivisto  <antti@apple.com>

        Enable WebKit disk cache on OS X
        https://bugs.webkit.org/show_bug.cgi?id=141022

        Reviewed by Gavin Barraclough.

        * config.h: Flip the switch.

2015-01-31  Antti Koivisto  <antti@apple.com>

        OSObjectPtr does not work with dispatch_data_t on Maverics
        https://bugs.webkit.org/show_bug.cgi?id=141081

        Reviewed by Zalan Bujtas.

        Previous attempt to special case dispatch_data_t in OSObjectPtr didn't work in all cases
        probably due to the context sensitivity of the definition of the dispatch_data_t type.

        For now, add DispatchPtr for the cache code and use it.

        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::DispatchPtr::DispatchPtr):
        (WebKit::DispatchPtr::~DispatchPtr):
        (WebKit::DispatchPtr::operator=):
        (WebKit::DispatchPtr::get):
        (WebKit::DispatchPtr::operator bool):
        (WebKit::adoptDispatch):
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::Data::Data):
        (WebKit::NetworkCacheStorage::Data::data):
        (WebKit::NetworkCacheStorage::NetworkCacheStorage):
        (WebKit::createIOChannelForKey):
        (WebKit::decodeEntry):
        (WebKit::encodeEntryMetaData):
        (WebKit::encodeEntry):

2015-01-30  Tim Horton  <timothy_horton@apple.com>

        Add and hook up APINavigationClient
        https://bugs.webkit.org/show_bug.cgi?id=140698

        Reviewed by Sam Weinig.

        Add a single APINavigationClient that NavigationState implements and
        WebPageProxy prefers over APILoaderClient and APIPolicyClient.

        * UIProcess/API/APILoaderClient.h:
        Fix a comment.

        * UIProcess/API/APINavigationClient.h: Added.
        APINavigationClient is the union of NavigationState's overrides of APILoaderClient and APIPolicyClient.
        Names are adjusted to more closely match the Modern API.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        Instead of having policy and loader clients, NavigationState has a single navigation client.
        Adjust as necessary.

        Move as much logic as possible (isMainFrame checks, construction of API objects) out of here
        and into WebPageProxy.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Install the aforementioned single navigation client.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setNavigationClient):
        Add a navigation client setter.

        For all policy and loader client calls, if we have a navigation client, use that;
        otherwise, fall back on the policy and loader clients.

        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Update MemoryCache code to use more references instead of pointers
        https://bugs.webkit.org/show_bug.cgi?id=141099

        Reviewed by Andreas Kling.

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Rename shared() static member functions to singleton() for singleton classes.
        https://bugs.webkit.org/show_bug.cgi?id=141088

        Reviewed by Ryosuke Niwa and Benjamin Poulain.

        Rename shared() static member functions to singleton() for singleton
        classes as per the recent coding style change.

2015-01-30  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        The screen font substitution functions still need to be present in the header.

2015-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Resize the redirected XComposite again after leaving accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=140935

        Reviewed by Sergio Villar Senin.

        Since r178414 we don't resize the redirected XComposite window
        until we enter accelerated compositing mode, but after leaving it
        the redirected window keeps its size. We should resize it to 1x1
        again and free the XPixmap and cairo surface to save that memory
        while not in accelerated compositing mode.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode): Notify
        the WebKitWebViewBase.
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode): Ditto.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseEnterAcceleratedCompositingMode): Resize the
        XComposite window to the current drawing area size.
        (webkitWebViewBaseExitAcceleratedCompositingMode): Resize the
        XComposite window to and empty size.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        Do not initialize m_size since we now handle the empty size as a
        especial case. Make sure we always create the X window with at
        least 1x1 size.
        (WebKit::RedirectedXCompositeWindow::resize): Resize the window to
        at least 1x1, but when en empty size is given, call
        cleanupPixmapAndPixmapSurface() to release those resources.
        (WebKit::RedirectedXCompositeWindow::surface): Create the cairo
        surface with at least 1x1 size.

2015-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Runtime critical warnings sometimes at start up when using the network process
        https://bugs.webkit.org/show_bug.cgi?id=140998

        Reviewed by Žan Doberšek.

        This is caused by the CustomProtocolManager work queue
        theread. This WorkQueue is created when the CustomProtocolManager
        object is constructed, but destroyed when it's initialized when
        the UI process asks to use the network process. In this case,
        sometimes happens that the work queue thread that runs the main
        loop is executed once the object has been destroyed and the main
        loop pointer is nullptr.

        * Platform/WorkQueue.h:
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::platformInitialize): Use a lambda function for the
        thread body.
        (WorkQueue::platformInvalidate): Detach the worker thread before
        deleting the main loop object.
        (WorkQueue::startWorkQueueThread): Deleted.
        (WorkQueue::workQueueThreadBody): Deleted.

2015-01-29  Beth Dakin  <bdakin@apple.com>

        Another follow-on, spotted this mistake. This used to be 
        #if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 , so it should now be 
        COCOA.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):

2015-01-29  Beth Dakin  <bdakin@apple.com>

        Follow-on, fixing a bad merge from my last change. 

        * Shared/WebPreferencesDefinitions.h:

2015-01-29  Beth Dakin  <bdakin@apple.com>

        Remove more Mountain Lion code from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=141052

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sendBufferMaybeAborting):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * NetworkProcess/mac/NetworkDiskCacheMonitor.mm:
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::willCacheResponseAsync):
        * Platform/IPC/MessageDecoder.cpp:
        * Platform/IPC/MessageDecoder.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::ConnectionTerminationWatchdog::watchdogTimerFired):
        (IPC::Connection::open):
        (IPC::Connection::receiveSourceEventHandler):
        (IPC::Connection::kill):
        * Platform/IPC/mac/ImportanceAssertion.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::initializeProcessName):
        * Shared/WebPreferencesDefinitions.h:
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::initializeTimerCoalescingPolicy):
        (WebKit::ChildProcess::setApplicationIsDaemon):
        (WebKit::ChildProcess::platformInitialize):
        (WebKit::ChildProcess::setQOS):
        * Shared/mac/CookieStorageShim.mm:
        (WebKit::CookieStorageShim::initialize):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]):
        (-[WKView _windowDidChangeOcclusionState:]):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame):
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::registerNotificationObservers):
        (WebKit::WebProcessPool::unregisterNotificationObservers):
        (WebKit::privateBrowsingSession):
        (WebKit::WebProcessPool::isURLKnownHSTSHost):
        (WebKit::WebProcessPool::resetHSTSHosts):
        * UIProcess/Databases/mac/DatabaseProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        * UIProcess/WebProcessPool.h:
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::shouldAutomaticQuoteSubstitutionBeEnabled):
        (WebKit::shouldAutomaticDashSubstitutionBeEnabled):
        (WebKit::TextChecker::didChangeAutomaticQuoteSubstitutionEnabled):
        (WebKit::TextChecker::didChangeAutomaticDashSubstitutionEnabled):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::applyDebuggingPropertiesToSwipeViews):
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::updateActivePages):
        * WebProcess/com.apple.WebProcess.sb.in:
        * config.h:

2015-01-29  Sam Weinig  <sam@webkit.org>

        Remove support for screen font substitution
        https://bugs.webkit.org/show_bug.cgi?id=141038

        Reviewed by Tim Horton.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPreferencesSetScreenFontSubstitutionEnabled):
        (WKPreferencesGetScreenFontSubstitutionEnabled):
        Move now empty preferences SPI to WKDeprecatedFunctions.
        
        * Shared/WebPreferencesDefinitions.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetScreenFontSubstitutionEnabled): Deleted.
        (WKPreferencesGetScreenFontSubstitutionEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::presenterApplicationPid):
        (WebKit::WebProcess::shouldForceScreenFontSubstitution): Deleted.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Stop piping screen font substitution setting to the web process.

2015-01-29  Alexey Proskuryakov  <ap@apple.com>

        Frequent kernel panics when running WebKit regression tests
        https://bugs.webkit.org/show_bug.cgi?id=141043

        Reviewed by Sam Weinig.

        Split PluginService.Development into 32-bit and 64-bit variants, to better match
        production variant. When building FAT, we'll have the right architecture from
        the start now, so no need to re-exec into a different architecture.        

        * Configurations/PluginService.Development.xcconfig: Removed.
        * Configurations/PluginService.32.Development.xcconfig: Copied from Source/WebKit2/Configurations/PluginService.Development.xcconfig.
        * Configurations/PluginService.64.Development.xcconfig: Copied from Source/WebKit2/Configurations/PluginService.Development.xcconfig.
        Changed to use ONLY_ACTIVE_ARCH instead of CONFIGURATION, so that we build the
        right thing even in debug FAT builds.

        * Configurations/PluginService.32.xcconfig:
        * Configurations/PluginService.64.xcconfig:
        While at it, applied the same changes as in Development variants. This means that
        FAT builds will now build only the correct architecture for PluginService.64
        (it used to build FAT, unnecessarily).

        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/Info.plist:
        Updated to support multiple product names.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::serviceName): Launch the
        right development service.

        * WebKit2.xcodeproj/project.pbxproj: Split the Plugin.Development target into two.

2015-01-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build with newer Clang

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        These should be 'override's.

2015-01-29  Chris Dumez  <cdumez@apple.com>

        Clean up / modernize PageCache class
        https://bugs.webkit.org/show_bug.cgi?id=141009

        Reviewed by Darin Adler.

        Clean up / modernize PageCache class.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        (WebKit::WebBackForwardListProxy::close):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goForward):
        (WebKit::WebPage::goBack):
        (WebKit::WebPage::goToBackForwardItem):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::releasePageCache):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetCacheModel):
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformSetCacheModel):

2015-01-29  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][GTK] Fix the build after r179326
        https://bugs.webkit.org/show_bug.cgi?id=141027

        Reviewed by Alexey Proskuryakov.

        Guard MessageRecorder implementation with USE(DTRACE)
        for platforms not supporting DTrace.

        Original patch by Carlos Garcia Campos <cgarcia@igalia.com>

        * Platform/IPC/ArgumentCoders.cpp:
        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::sendMessage):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::dispatchSyncMessage):
        (IPC::Connection::dispatchMessage):
        * Platform/IPC/MessageDecoder.cpp:
        (IPC::MessageDecoder::MessageDecoder):
        * Platform/IPC/MessageDecoder.h:
        * Platform/IPC/MessageEncoder.cpp:
        (IPC::MessageEncoder::MessageEncoder):
        (IPC::MessageEncoder::encodeHeader):
        * Platform/IPC/MessageEncoder.h:
        * Platform/IPC/MessageRecorder.h:

2015-01-29  Tim Horton  <timothy_horton@apple.com>

        Avoid manually handling quickLookWithEvent: if the immediate action gesture recognizer will do Lookup for us
        https://bugs.webkit.orgshow_bug.cgi?id=141018
        <rdar://problem/19619999>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView quickLookWithEvent:]):
        Yosemite is 101000, not 10100.

2015-01-28  Tim Horton  <timothy_horton@apple.com>

        Add API::{FrameInfo, NavigationAction, NavigationResponse} types
        https://bugs.webkit.org/show_bug.cgi?id=140982

        Reviewed by Sam Weinig.

        Make C++ API objects for WK{FrameInfo, NavigationAction, NavigationResponse}
        to wrap around, as a step towards moving Modern API logic down into WebPageProxy.

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/APIFrameInfo.cpp: Added.
        * UIProcess/API/APIFrameInfo.h: Added.
        * UIProcess/API/APINavigationAction.h: Added.
        * UIProcess/API/APINavigationResponse.h: Added.
        Add API::FrameInfo, API::NavigationAction, and API::NavigationResponse.

        * UIProcess/API/Cocoa/WKFrameInfo.mm:
        * UIProcess/API/Cocoa/WKFrameInfoInternal.h:
        Make WKFrameInfo a WKObject, wrapping a API::FrameInfo.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        Make WKNavigationAction a WKObject, wrapping a API::NavigationAction.

        * UIProcess/API/Cocoa/WKNavigationResponse.mm:
        * UIProcess/API/Cocoa/WKNavigationResponseInternal.h:
        Make WKNavigationResponse a WKObject, wrapping a API::NavigationResponse.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        Adopt API::FrameInfo.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        Adopt API::FrameInfo, and reorganize the code slightly.
        Adopt API::NavigationAction.

        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):
        Adopt API::FrameInfo.
        Adopt API::NavigationResponse.

        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        Adopt API::FrameInfo.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert):
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm):
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt):
        Adopt API::FrameInfo.

        * WebKit2.xcodeproj/project.pbxproj:

2015-01-28  Antti Koivisto  <antti@apple.com>

        http/tests/xmlhttprequest/workers/methods.html sometimes times out with disk cache enabled
        https://bugs.webkit.org/show_bug.cgi?id=140976

        Reviewed by Chris Dumez.

        The previous fix sometimes invoked the completion handler twice. Explicitly track if we
        have called it or not.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::dispatchRetrieveOperation):

        Also move the error case to the done branch. According to the documentation 'done' is always set on error.

2015-01-28  Timothy Horton  <timothy_horton@apple.com>

        Add a WebKitMessageRecorder DTrace provider, exposing IPC details to DTrace
        https://bugs.webkit.org/show_bug.cgi?id=140673

        Reviewed by Sam Weinig.

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<uuid_t>::encode):
        (IPC::ArgumentCoder<uuid_t>::decode):
        * Platform/IPC/ArgumentCoders.h:
        Add a uuid_t (simple) argument coder.
        Fix a mis-named header-guard #ifdef.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::dispatchSyncMessage):
        Sync message replies inherit the message UUID from the incoming sync message.

        (IPC::Connection::sendMessage):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        Record outgoing messages. Because sendSyncMessage calls sendMessage,
        we have to explicitly avoid recording the message twice.

        (IPC::Connection::dispatchMessage):
        Record the incoming message.

        (IPC::Connection::remoteProcessID):
        Add remoteProcessID(), which tries to determine the pid of the remote process.

        * Platform/IPC/Connection.h:
        (IPC::Connection::xpcConnection):
        This can be const.

        (IPC::Connection::isValid):
        Make this public.

        * Platform/IPC/MessageDecoder.cpp:
        (IPC::MessageDecoder::MessageDecoder):
        * Platform/IPC/MessageDecoder.h:
        (IPC::MessageDecoder::setMessageProcessingToken):
        (IPC::MessageDecoder::UUID):
        Decode and store the message UUID.
        Store a MessageProcessingToken for the lifetime of the MessageDecoder;
        this ensures that all time spent processing the incoming message will be
        counted against that message.

        * Platform/IPC/MessageEncoder.cpp:
        (IPC::MessageEncoder::MessageEncoder):
        By default, create a new UUID for the message. Alternatively, allow clients
        to pass the message UUID in (used for sync message replies).
        Store the messageReceiverName and messageName.

        (IPC::MessageEncoder::encodeHeader):
        Factor encodeHeader() out of the constructors so most of their code can be shared.

        (IPC::MessageEncoder::isSyncMessage):
        (IPC::MessageEncoder::shouldDispatchMessageWhenWaitingForSyncReply):
        Add getters for these flags.

        * Platform/IPC/MessageEncoder.h:
        (IPC::MessageEncoder::messageReceiverName):
        (IPC::MessageEncoder::messageName):
        (IPC::MessageEncoder::destinationID):
        (IPC::MessageEncoder::UUID):

        * Platform/IPC/MessageRecorder.h: Added.
        * Platform/IPC/MessageRecorder.cpp: Added.
        (MessageRecorder::MessageRecorder):
        Add a class that interfaces with a custom DTrace provider to log incoming and outgoing messages.

        (MessageRecorder::shared):
        (MessageRecorder::isEnabled):
        Determine if either of the message probes are enabled. If not, we'll avoid most of the
        work associated with MessageRecorder.

        (MessageRecorder::recordOutgoingMessage):
        (MessageRecorder::recordIncomingMessage):
        Build a WebKitMessageRecord and MessageProcessingToken from the Message(De|En)coder.
        Once the MessageProcessingToken is deallocated, the probe will be invoked with the WebKitMessageRecord.

        (MessageRecorder::MessageProcessingToken::MessageProcessingToken):
        (MessageRecorder::MessageProcessingToken::~MessageProcessingToken):
        Keep track of when the token is created and destroyed; these are considered the beginning
        and ending "processing" times of the message (and as such the token should be kept alive for
        exactly as long as the message is being processed).

        * Platform/IPC/MessageRecorderProbes.d: Added.
        Add a DTrace provider source file with two probes, message_sent and message_received.
        The struct must match the struct in MessageRecorder.h.
        
        * Platform/IPC/ProcessType.h: Added.
        Add an enum of process types.

        * WebKit2.xcodeproj/project.pbxproj:

        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.h:
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebProcess.h:
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebProcessProxy.h:
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.h:
        Annotate Connection::Clients with process types.
        
2015-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crash closing inspected page with frequent activity
        https://bugs.webkit.org/show_bug.cgi?id=140973

        Reviewed by Timothy Hatcher.

        * WebProcess/WebPage/WebInspector.h:
        (WebKit::WebInspector::disconnectFromPage):        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        Be sure to close the WebInspector connection through the page
        when the page is closing so that the WebKit::WebInspector is
        relinquishes itself as the InspectorFrontendChannel.

2015-01-28  Timothy Horton  <timothy_horton@apple.com>

        Avoid manually handling quickLookWithEvent: if the immediate action gesture recognizer will do Lookup for us
        https://bugs.webkit.org/show_bug.cgi?id=141018
        <rdar://problem/19619999>

        Reviewed by Beth Dakin.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView quickLookWithEvent:]):
        If we have an immediate action gesture recognizer, just call super and
        avoid WebKit's special quickLookWithEvent: implementation.

2015-01-28  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove remaining PLATFORM(WIN) code blocks from WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=140972

        Reviewed by Darin Adler.

        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):

2015-01-28  Beth Dakin  <bdakin@apple.com>

        Remove Mountain Lion code from WebKit and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=141010

        Reviewed by Sam Weinig.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/mac/WebEventFactory.mm:
        (WebKit::phaseForEvent):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView quickLookWithEvent:]):
        (-[WKView updateLayer]):
        (-[WKView createFullScreenWindow]):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewVisible):
        * WebKit2Prefix.h:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebProcess/com.apple.WebProcess.sb.in:

2015-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crash when closing inspected page
        https://bugs.webkit.org/show_bug.cgi?id=140968

        Reviewed by Timothy Hatcher.

        Handle cases where the corePage could be null. With the Inspector Process
        in its own process, messages may come to the WebContentProcess after
        the WebCore::Page has itself been destroyed.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::show):
        (WebKit::WebInspector::close):
        (WebKit::WebInspector::openInNewTab):
        (WebKit::WebInspector::evaluateScriptForTest):
        (WebKit::WebInspector::showConsole):
        (WebKit::WebInspector::showResources):
        (WebKit::WebInspector::showMainResourceForFrame):
        (WebKit::WebInspector::startPageProfiling):
        (WebKit::WebInspector::stopPageProfiling):
        (WebKit::WebInspector::canAttachWindow):
        (WebKit::WebInspector::sendMessageToBackend):
        (WebKit::WebInspector::remoteFrontendConnected):
        (WebKit::WebInspector::remoteFrontendDisconnected):

2015-01-28  Sam Weinig  <sam@webkit.org>

        Convert WebPreferences and VisitedLinkProvider to be bridged API::Objects
        https://bugs.webkit.org/show_bug.cgi?id=141002

        Reviewed by Tim Horton.

        * Shared/API/APIObject.h:
        Add VisitedLinkProvider type.
        
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Allocate WebPreferences and VisitedLinkProvider as their Objective-C counterpart.
        
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences init]):
        Switch to constructInWrapper.

        (-[WKPreferences dealloc]):
        Call the WebPreferences destructor.
        
        (-[WKPreferences _apiObject]):
        Add implementation of the WKObject protocol.

        * UIProcess/API/Cocoa/WKPreferencesInternal.h:
        Convert to using ObjectStorage.

        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm:
        (-[_WKVisitedLinkProvider init]):
        Switch to constructInWrapper.

        (-[_WKVisitedLinkProvider dealloc]):
        Call the VisitedLinkProvider destructor.

        (-[_WKVisitedLinkProvider _apiObject]):
        Add implementation of the WKObject protocol.

        * UIProcess/API/Cocoa/_WKVisitedLinkProviderInternal.h:
        Convert to using ObjectStorage.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::create):
        * UIProcess/VisitedLinkProvider.h:
        Switch create() to return a Ref.

        * UIProcess/WebPreferences.h:
        Make the constructor public for use by constructInWrapper.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createWebPage):
        * UIProcess/WebProcessPool.h:
        Store the VisitedLinkProvider in a Ref.

2015-01-28  Dana Burkart  <dburkart@apple.com>

        Move ASan flag settings from DebugRelease.xcconfig to Base.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=136765

        Reviewed by Alexey Proskuryakov.

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

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Fix typo in markPagesForVistedLinkStyleRecalc()
        https://bugs.webkit.org/show_bug.cgi?id=140977

        Reviewed by Darin Adler.

        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::setVisitedLinkTable):
        (WebKit::VisitedLinkTableController::visitedLinkStateChanged):
        (WebKit::VisitedLinkTableController::allVisitedLinkStateChanged):
        (WebKit::VisitedLinkTableController::removeAllVisitedLinks):

2015-01-27  Antti Koivisto  <antti@apple.com>

        http/tests/xmlhttprequest/workers/methods.html sometimes times out with disk cache enabled
        https://bugs.webkit.org/show_bug.cgi?id=140976

        Reviewed by Chris Dumez.

        Running

            run-webkit-tests --release -2 http/tests/xmlhttprequest/workers/methods.html --iterations=100

        would usually time out an iteration.

        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::dispatchRetrieveOperation):

        Using dispatch_io_read with an empty file calls the handler block immediately with done boolean set
        without it being an error. We failed to call the completion handler and any synchronous xhr would hang.
        We may see an empty cache file if we are just in process of writing it.

        Fix by handling this case specifically.

2015-01-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add missing file to WebInspector compilation for GTK+.

        * PlatformGTK.cmake: Add UserInterface/External/ESLint/eslint.js

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Rename pageCache() to PageCache::shared() and return a reference
        https://bugs.webkit.org/show_bug.cgi?id=140983

        Reviewed by Andreas Kling.

        Rename pageCache() to PageCache::shared() as this is a singleton class
        and have it return a reference instead of a pointer.

        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::setVisitedLinkTable):
        (WebKit::VisitedLinkTableController::visitedLinkStateChanged):
        (WebKit::VisitedLinkTableController::allVisitedLinkStateChanged):
        (WebKit::VisitedLinkTableController::removeAllVisitedLinks):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        (WebKit::WebBackForwardListProxy::close):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::releasePageCache):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetCacheModel):
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformSetCacheModel):

2015-01-27  Alexey Proskuryakov  <ap@apple.com>

        More build fixes for newer clang.

        Rubber-stamped by Anders Carlsson.

        Added missing override keywords, marked some deprecated accessibility methods as such.

        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        (WebKit::PluginProcessMainDelegate::doPreInitializationWork): Deleted.
        (WebKit::PluginProcessMainDelegate::getExtraInitializationData): Deleted.
        (WebKit::PluginProcessMainDelegate::doPostRunWork): Deleted.
        * PluginProcess/WebProcessConnection.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (PageOverlayClientImpl::actionContextForResultAtPoint): Deleted.
        (PageOverlayClientImpl::dataDetectorsDidPresentUI): Deleted.
        (PageOverlayClientImpl::dataDetectorsDidChangeUI): Deleted.
        (PageOverlayClientImpl::dataDetectorsDidHideUI): Deleted.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (WebKit::NetscapePlugin::isBeingAsynchronouslyInitialized): Deleted.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/Plugins/PluginProxy.h:
        (WebKit::PluginProxy::isBeingAsynchronouslyInitialized): Deleted.
        * WebProcess/WebCoreSupport/WebContextMenuClient.h:

2015-01-27  Beth Dakin  <bdakin@apple.com>

        Immediate action gesture recognizer still doesn't work well with IB
        https://bugs.webkit.org/show_bug.cgi?id=140967
        -and corresponding-
        rdar://problem/19621509

        Reviewed by Tim Horton.

        We should add (or remove) the gesture recognizer in viewDidMoveToWindow because 
        initWithFrame it too early and IB might mess with it.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        (-[WKView initWithFrame:processPool:configuration:webView:]):

2015-01-27  Beth Dakin  <bdakin@apple.com>

        Invoking an immediate action on link often dismisses selection
        https://bugs.webkit.org/show_bug.cgi?id=140911
        -and corresponding-
        rdar://problem/19572685

        Reviewed by Tim Horton.

        Calling _page->setMaintainsInactiveSelection(false) in complete is often 
        too soon. Instead, call it in dismissContentRelativeChildWindows. This is more 
        similar to the timing for the TextIndicator.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController dismissContentRelativeChildWindows]):
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WKImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):

2015-01-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r166975): [GTK] Page overlays are not drawn anymore after r166975
        https://bugs.webkit.org/show_bug.cgi?id=131433

        Reviewed by Žan Doberšek.

        Implement page overlays for the GTK+ port.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        Override pure virtual setViewOverlayRootLayer().
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display): Remove FIXME and use modern
        for loop.
        (WebKit::DrawingAreaImpl::attachViewOverlayGraphicsLayer): Remove
        ifdefs and use LayerTreeHost::setViewOverlayRootLayer().
        * WebProcess/WebPage/LayerTreeHost.h: Add pure virtual setViewOverlayRootLayer().
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk): Initialize m_viewOverlayRootLayer.
        (WebKit::LayerTreeHostGtk::initialize): Remove FIXME.
        (WebKit::LayerTreeHostGtk::setNonCompositedContentsNeedDisplay):
        Remove unused old page overlays code.
        (WebKit::LayerTreeHostGtk::setNonCompositedContentsNeedDisplayInRect): Ditto.
        (WebKit::LayerTreeHostGtk::sizeDidChange): Ditto.
        (WebKit::LayerTreeHostGtk::paintContents): Remove FIXME.
        (WebKit::LayerTreeHostGtk::flushPendingLayerChanges): Flush
        compositing state on m_pageOverlayLayers if present.
        (WebKit::LayerTreeHostGtk::setViewOverlayRootLayer): Set m_pageOverlayLayers.
        (WebKit::LayerTreeHostGtk::createPageOverlayLayer): Deleted.
        (WebKit::LayerTreeHostGtk::destroyPageOverlayLayer): Deleted.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h: Remove unused old
        page overlays code.

2015-01-27  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove remaining PLUGIN_ARCHITECTURE(WIN) code blocks from WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=140912

        Reviewed by Anders Carlsson.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        * Shared/Plugins/PluginQuirks.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::userAgent):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:

2015-01-26  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fix possible crash when -[WKWebView evaluateJavaScript:completionHandler:] was called then the WKWebView is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=140203
        rdar://problem/19198492

        Reviewed by Sam Weinig.
        
        When handling the OwnerWasInvalidated case in -[WKWebView evaluateJavaScript:completionHandler:],
        the block passed to dispatch_async() needs to be retained. Fix by passing the RefPtr
        to the lambda.

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

2015-01-26  Chris Dumez  <cdumez@apple.com>

        Rename Document::body() to Document::bodyOrFrameset() for clarity
        https://bugs.webkit.org/show_bug.cgi?id=140902

        Reviewed by Andreas Kling.

        Rename Document::body() to Document::bodyOrFrameset() for clarity. This
        method does not necessarily return an HTMLBodyElement, it can also
        return a frameset as per the specification:
        http://www.w3.org/TR/html5/dom.html#dom-tree-accessors

        This method is often misused internally (the caller is only interested
        in the <body> element). I will fix these instances in a follow-up patch,
        this patch is only renaming mechanically.

2015-01-26  Antti Koivisto  <antti@apple.com>

        Add a user default for disabling network cache
        https://bugs.webkit.org/show_bug.cgi?id=140904

        Reviewed by Andreas Kling

        defaults write com.apple.Safari WebKitNetworkCacheEnabled -bool YES/NO

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):

2015-01-26  Chris Dumez  <cdumez@apple.com>

        First argument to DOM traversal functions should be a reference
        https://bugs.webkit.org/show_bug.cgi?id=140895

        Reviewed by Antti Koivisto.

        First argument to DOM traversal functions should be a reference instead
        of a pointer as it is dereferenced without null-check.

2015-01-26  Beth Dakin  <bdakin@apple.com>

        Blacklist iBooks for WebKit's default immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=140854
        -and corresponding-
        rdar://problem/19489518

        Reviewed by Tim Horton.

        Blacklist iBooks.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _updateImmediateActionItem]):

2015-01-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] [SVG -> OTF Converter] Flip the switch off on iOS
        https://bugs.webkit.org/show_bug.cgi?id=140860

        Reviewed by Darin Adler.

        The fonts it makes are grotesque. (See what I did there? Typographic
        humor is the best humor.)

        * Configurations/FeatureDefines.xcconfig:

2015-01-26  Fabien Vallée  <fvallee@connected-labs.com>

        AX: crash in accessibilityRootObjectWrapper method (WebPageAccessibilityObjectAtk.cpp)
        <https://bugs.webkit.org/show_bug.cgi?id=140618>

        Reviewed by Chris Fleizach.

        Check if document()->axObjectCache() is nullptr to fix the crash.
        Similar patch has been applied on mac port:
        <http://trac.webkit.org/changeset/167136>

        Crash occured on <http://itv.mit-xperts.com/hbbtvtest/appmanager/>
        (this page needs CEHTML / HbbTV extensions, conditions cannot
        be reproduced using regression tests)

        * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp:
        (accessibilityRootObjectWrapper):

2015-01-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] gtkdoc does not appear in DevHelp
        https://bugs.webkit.org/show_bug.cgi?id=139369

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Include the API version in the gtkdoc filenames.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: Renamed from Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt.
        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types: Renamed from Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk.types.

2015-01-25  Timothy Horton  <timothy_horton@apple.com>

        Unresponsive Web processes sometimes throw ObjC exceptions under didPerformActionMenuHitTest:
        https://bugs.webkit.org/show_bug.cgi?id=140859
        <rdar://problem/19571057>

        Reviewed by Darin Adler.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController didPerformActionMenuHitTest:userData:]):
        If we've already given up on this gesture (either because it was canceled or the
        willBeginAnimation timeout expired), we shouldn't build a new animationController for it.
        This is true both because it wouldn't look good to swap animationControllers out
        from under the gesture, but also because AppKit throws an exception when you do this
        and that breaks a lot of things.

2015-01-24  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Drop WKDiagnosticLoggingResultType defines
        https://bugs.webkit.org/show_bug.cgi?id=140838

        Reviewed by Sam Weinig.

        Drop WKDiagnosticLoggingResultType defines in _WKDiagnosticLoggingDelegate.h
        header now that the client-side is correctly using
        _WKDiagnosticLoggingResultType instead.

        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:

2015-01-23  Antti Koivisto  <antti@apple.com>

        Implement cache size limit
        https://bugs.webkit.org/show_bug.cgi?id=140844

        Reviewed by Andreas Kling.

        Prevent the cache from growing without bounds. The simple scheme implemented here
        estimates the cache size from number of entries. When the estimated size exceeds
        the maximum size we randomly clear 1/4 of the entries.

        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::NetworkCacheStorage):
        (WebKit::NetworkCacheStorage::initialize):
        (WebKit::NetworkCacheStorage::removeEntry):
        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::setMaximumSize):
        (WebKit::NetworkCacheStorage::clear):
        (WebKit::NetworkCacheStorage::shrinkIfNeeded):
        (WebKit::NetworkCacheStorage::initializeKeyFilter): Deleted.

2015-01-23  Timothy Horton  <timothy_horton@apple.com>

        Fix the pre-Yosemite build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dismissContentRelativeChildWindows]):

2015-01-23  Timothy Horton  <timothy_horton@apple.com>

        QLPreviewMenuItem popovers don't close when the page scrolls
        https://bugs.webkit.org/show_bug.cgi?id=140806
        <rdar://problem/19555618>

        Reviewed by Beth Dakin.

        Now that QLPreviewMenuItem's popover doesn't eat scrolls, we need to dismiss it if the page scrolls.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dismissContentRelativeChildWindows]):
        Send _dismissContentRelativeChildWindows on to WKImmediateActionController.

        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController dismissContentRelativeChildWindows]):
        (-[WKImmediateActionController _defaultAnimationController]):
        Keep track of the active QLPreviewMenuItem, and close it upon scroll.

2015-01-23  Timothy Horton  <timothy_horton@apple.com>

        Infinite recursion in _clearImmediateActionState
        https://bugs.webkit.org/show_bug.cgi?id=140807
        <rdar://problem/19571601>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _clearImmediateActionState]):
        Clear _hasActivatedActionContext before calling didUseActions, because
        didUseActions can call _clearImmediateActionState.

2015-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add initial database process support
        https://bugs.webkit.org/show_bug.cgi?id=139491

        Reviewed by Sergio Villar Senin.

        Add initial support for DatabaseProcess, disabled by default for
        now.

        * CMakeLists.txt: Add required files to compilation.
        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::createDatabaseToWebProcessConnection):
        Add the unix domain sockets implementation.
        * DatabaseProcess/EntryPoint/unix/DatabaseProcessMain.cpp: Added.
        (main):
        * DatabaseProcess/gtk/DatabaseProcessMainGtk.cpp: Added.
        (WebKit::DatabaseProcessMainUnix):
        * DatabaseProcess/unix/DatabaseProcessMainUnix.h: Added.
        * PlatformGTK.cmake: Add required files to compilation.
        * Shared/ProcessExecutablePath.h:
        * Shared/gtk/KeyedDecoder.cpp: Added.
        (WebKit::KeyedDecoder::KeyedDecoder):
        (WebKit::KeyedDecoder::~KeyedDecoder):
        (WebKit::KeyedDecoder::buildDictionaryFromGVariant):
        (WebKit::KeyedDecoder::decodeBytes):
        (WebKit::KeyedDecoder::decodeBool):
        (WebKit::KeyedDecoder::decodeUInt32):
        (WebKit::KeyedDecoder::decodeInt32):
        (WebKit::KeyedDecoder::decodeInt64):
        (WebKit::KeyedDecoder::decodeFloat):
        (WebKit::KeyedDecoder::decodeDouble):
        (WebKit::KeyedDecoder::decodeString):
        (WebKit::KeyedDecoder::beginObject):
        (WebKit::KeyedDecoder::endObject):
        (WebKit::KeyedDecoder::beginArray):
        (WebKit::KeyedDecoder::beginArrayElement):
        (WebKit::KeyedDecoder::endArrayElement):
        (WebKit::KeyedDecoder::endArray):
        * Shared/gtk/KeyedDecoder.h: Added.
        * Shared/gtk/KeyedEncoder.cpp: Added.
        (WebKit::KeyedEncoder::KeyedEncoder):
        (WebKit::KeyedEncoder::~KeyedEncoder):
        (WebKit::KeyedEncoder::encodeBytes):
        (WebKit::KeyedEncoder::encodeBool):
        (WebKit::KeyedEncoder::encodeUInt32):
        (WebKit::KeyedEncoder::encodeInt32):
        (WebKit::KeyedEncoder::encodeInt64):
        (WebKit::KeyedEncoder::encodeFloat):
        (WebKit::KeyedEncoder::encodeDouble):
        (WebKit::KeyedEncoder::encodeString):
        (WebKit::KeyedEncoder::beginObject):
        (WebKit::KeyedEncoder::endObject):
        (WebKit::KeyedEncoder::beginArray):
        (WebKit::KeyedEncoder::beginArrayElement):
        (WebKit::KeyedEncoder::endArrayElement):
        (WebKit::KeyedEncoder::endArray):
        (WebKit::KeyedEncoder::finishEncoding):
        * Shared/gtk/KeyedEncoder.h: Added.
        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        (WebKit::executablePathOfDatabaseProcess):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::didCreateDatabaseToWebProcessConnection):
        Add the unix domain sockets implementation.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Handle the
        DatabaseProcess too.
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultIndexedDBDatabaseDirectory):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureWebToDatabaseProcessConnection): Add
        the unix domain sockets implementation.

2015-01-22  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Ignore synthetic click initiated on a previous page
        https://bugs.webkit.org/show_bug.cgi?id=139556
        rdar://problem/18586008

        Reviewed by David Kilzer.

        Under the right accumulation of bad luck, a synthetic click could be generated
        on a page that never asked for it.

        What happened was:
        1) Page Foo listen to touch event.
        2) In response to touch events, Foo decides to navigate to page Bar
           *but* it does not cancel the native gesture recognizers with preventDefault().
        3) Page Bar loads.
        4) The native gesture recognizer ask us to click, we forward that to the WebProcess
           and generate a synthetic mouse event.
        -> Bar receives a click.
        If you are unlucky enough, it looks like a single tap does a double click.

        There are two ways this patch avoids the problem:

        First, in the UIProcess, we just cancel the HighlightLongPressGestureRecognizer
        on didCommitLoadForMainFrame. This prevents "fast clicks" from accidentally going through.
        This is not bullet proof because we get didCommitLoadForMainFrame asynchronously but
        killing the timer and gesture seems like a good idea.

        Second, we skip any tap command at the WebProcess level when it was issued for
        the previous page. This is using the same principle we used for VisibleContentRect:
        any input generated before the current layer tree commit is useless for the current page.

        We track the commit ID in the UIProcess when we decide to do the tracking or not.
        Note that we keep the ID regardless of the tracking state, it does not matter if we have sent
        touch events, what matters is what content was on screen when the touch events were handled.

        If the user interaction result in a tap, we send the commit ID along the tap commands.
        In the WebProcess, we know the actual layer tree commit associated with the current page.
        If the tap was generated with a layer ID preceding the current page, we fail the command.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLoadForMainFrame]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _attemptClickAtLocation:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::commitPotentialTap):
        (WebKit::WebPageProxy::handleTap):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::commitPotentialTap):

2015-01-22  Chris Dumez  <cdumez@apple.com>

        [WK2][Cocoa] Drop WKWebViewConfiguration._featureCounterEnabled SPI.
        https://bugs.webkit.org/show_bug.cgi?id=140799

        Reviewed by Dan Bernstein.

        Drop WKWebViewConfiguration._featureCounterEnabled SPI now that the
        client-side has been updated.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _setAllowsAlternateFullscreen:]):
        (-[WKWebViewConfiguration _featureCounterEnabled]): Deleted.
        (-[WKWebViewConfiguration _setFeatureCounterEnabled:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2015-01-22  Antti Koivisto  <antti@apple.com>

        Fix ENABLE(NETWORK_CACHE) build

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didFinishLoading):

2015-01-22  Timothy Horton  <timothy_horton@apple.com>

        UserData decoding of WKTypeRefWrapper always fails
        https://bugs.webkit.org/show_bug.cgi?id=140791
        <rdar://problem/19438402>

        Reviewed by Anders Carlsson.

        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::ObjCObjectGraph::decode):
        Add a missing break.

2015-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        Add a build flag for ES6 class syntax
        https://bugs.webkit.org/show_bug.cgi?id=140760

        Reviewed by Michael Saboff.

        * Configurations/FeatureDefines.xcconfig:

2015-01-22  Chris Dumez  <cdumez@apple.com>

        Drop the legacy FeatureCounter class
        https://bugs.webkit.org/show_bug.cgi?id=140749

        Reviewed by Andreas Kling.

        Drop the legacy FeatureCounter class and use DiagnosticLoggingClient
        instead.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _featureCounterEnabled]):
        (-[WKWebViewConfiguration _setFeatureCounterEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::willStartUserTriggeredZooming):

2015-01-22  Beth Dakin  <bdakin@apple.com>

        ibtoold crash below -[WebView close]
        https://bugs.webkit.org/show_bug.cgi?id=140782
        -and corresponding-
        rdar://problem/19558472

        Reviewed by Tim Horton.

        Retain the NSImmediateActionGestureRecognizer. This should not be necessary, but 
        it is because interface builder can mess with our views.
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController willDestroyView:]):
        (-[WKImmediateActionController _cancelImmediateAction]):
        (-[WKImmediateActionController _cancelImmediateActionIfNeeded]):
        (-[WKImmediateActionController _updateImmediateActionItem]):

2015-01-22  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix iphoneos SDK builds for ios-ews queue
        <http://webkit.org/b/140748>

        Reviewed by Daniel Bates.

        * Platform/spi/ios/BKSProcessAssertionSPI.h: Add -invalidate
        definition.  Sort @property to the top of BKSProcessAssertion.

2015-01-22  Shivakumar JM  <shiva.jm@samsung.com>

        Fix build warning in WebKit2/UIProcess module
        https://bugs.webkit.org/show_bug.cgi?id=140758

        Reviewed by Csaba Osztrogonác.

        Fix build warnings by using UNUSED_PARAM macro

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserContentFilter):
        (WKPageGroupRemoveAllUserContentFilters):

2014-11-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use API::ContextMenuClient and API::InjectedBundle::PageContextMenuClient classes
        https://bugs.webkit.org/show_bug.cgi?id=138467

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        (webkitContextMenuPopulate): Add a version that receives a Vector<WebContextMenuItemData>&.
        (webkitContextMenuCreate): Change it to receive a const
        Vector<WebContextMenuItemData>& instead of a API::Array* and also
        add a another version that receives const Vector<ContextMenuItem>&.
        * UIProcess/API/gtk/WebKitContextMenuClient.cpp:
        (attachContextMenuClientToView): Use a class derived from
        API::ContextMenuClient to implement the context menu client.
        (getContextMenuFromProposedMenu): Deleted.
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        (webkitContextMenuItemCreate): Change it to receive a const
        WebContextMenuItemData& and added another version that receives a
        const ContextMenuItem&.
        * UIProcess/API/gtk/WebKitContextMenuItemPrivate.h:
        * UIProcess/API/gtk/WebKitContextMenuPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewPopulateContextMenu): Remove the creation of a
        WebHitTestResult::Data, since it receives it now as parameter.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResult.cpp:
        (webkitWebHitTestResultCreate): Change it to receive a const
        HitTestResult& instead of const InjectedBundleHitTestResult&.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResultPrivate.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitWebPageCreate): Use a class derived from
        API::InjectedBundle::PageContextMenuClient to implement the
        context menu client.
        (getContextMenuFromDefaultMenu): Deleted.

2015-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Try to fix Debug build after r178889.

        * UIProcess/API/C/WKPage.cpp: Include Logging.h.

2015-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add API::ContextMenuClient and API::InjectedBundle::PageContextMenuClient classes
        https://bugs.webkit.org/show_bug.cgi?id=138466

        Reviewed by Anders Carlsson.

        Move ContextMenuClient to use API classes in both UI and Injected
        Bundle APIs.

        * CMakeLists.txt: Remove WebPageContextMenuClient.cpp.
        * UIProcess/API/APIContextMenuClient.h: Renamed from Source/WebKit2/UIProcess/WebPageContextMenuClient.h.
        (API::ContextMenuClient::~ContextMenuClient):
        (API::ContextMenuClient::getContextMenuFromProposedMenu):
        (API::ContextMenuClient::customContextMenuItemSelected):
        (API::ContextMenuClient::contextMenuDismissed):
        (API::ContextMenuClient::showContextMenu):
        (API::ContextMenuClient::hideContextMenu):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageContextMenuClient):
        * UIProcess/WebPageContextMenuClient.cpp: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setContextMenuClient):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::internalShowContextMenu):
        (WebKit::WebPageProxy::contextMenuItemSelected):
        (WebKit::WebPageProxy::initializeContextMenuClient): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj: Remove deleted files and add
        new files to compilation.
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageContextMenuClient.h: Copied from Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.h.
        (API::InjectedBundle::PageContextMenuClient::~PageContextMenuClient):
        (API::InjectedBundle::PageContextMenuClient::getCustomMenuFromDefaultItems):
        (API::InjectedBundle::PageContextMenuClient::prepareForActionMenu):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetContextMenuClient):
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        (WebKit::InjectedBundlePageContextMenuClient::InjectedBundlePageContextMenuClient):
        (WebKit::InjectedBundlePageContextMenuClient::getCustomMenuFromDefaultItems):
        (WebKit::InjectedBundlePageContextMenuClient::prepareForActionMenu):
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.h:
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::menuItemsWithUserData):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setInjectedBundleContextMenuClient):
        (WebKit::WebPage::close):
        (WebKit::WebPage::initializeInjectedBundleContextMenuClient): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleContextMenuClient):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):

2015-01-20  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] WebKitTestRunner: Tests fail due to incorrect web view size

        <https://bugs.webkit.org/show_bug.cgi?id=139736>
        <rdar://problem/19282196>

        This starts happening after we fail to reset the test controller to
        consistent values in TestInvocation::invoke(). When we terminate the
        web process and relaunch it, the new WebPage object created in the web
        process is using the default ViewportConfiguration with dimensions of
        1024x768.

        The PageClient on iOS currently notifies the WKWebView and the
        WKContentView when the web process is relaunched. This patch extends
        that to also notify the WKView.

        Reviewed by Benjamin Poulain.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Declare -_didRelaunchProcess.

        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]):
        Call the new method that accepts a WKView.
        (-[WKView _didRelaunchProcess]):
        Call -_frameOrBoundsChanged to update the web process's size to the
        size of the WKView.

        * UIProcess/ios/PageClientImplIOS.h:
        Add a constructor that takes a WKView, and add a member var to hold it.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        Implement the constructor that takes a WKView.
        (WebKit::PageClientImpl::didRelaunchProcess):
        Tell the WKView that the web process relaunched.

        * UIProcess/ios/WKContentView.h:
        Declare an initializer that takes a WKView.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
        Split out from -[WKContentView initWithFrame:processPool:configuration:webView:].
        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
        Perform some initialization, including creating the PageClient, and
        call the common initializer.
        (-[WKContentView initWithFrame:processPool:configuration:wkView:]):
        Ditto.

2015-01-21  Sam Weinig  <sam@webkit.org>

        Add WKPageGroupRef SPI for user content filters
        https://bugs.webkit.org/show_bug.cgi?id=140728

        Reviewed by Anders Carlsson.

        While Safari is transitioning to WKUserContentController, it is useful
        for them to have access to have access to content filters on the page group
        where they currently have user content related functionality.

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserContentFilter):
        (WKPageGroupRemoveAllUserContentFilters):
        * UIProcess/API/C/WKPageGroup.h:
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::addUserContentFilter):
        (WebKit::WebPageGroup::removeAllUserContentFilters):
        * UIProcess/WebPageGroup.h:
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):
        (WebKit::WebPageGroupProxy::addUserContentFilter):
        (WebKit::WebPageGroupProxy::removeAllUserContentFilters):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        * WebProcess/WebPage/WebPageGroupProxy.messages.in:

2015-01-21  Beth Dakin  <bdakin@apple.com>

        Crash in QuickLook preview delegate method
        https://bugs.webkit.org/show_bug.cgi?id=140740
        -and corresponding-
        rdar://problem/19540806

        Reviewed by Tim Horton.

        Clear out the delegate.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController willDestroyView:]):

2015-01-21  Zan Dobersek  <zdobersek@igalia.com>

        AsyncRequestImpl casting in AsyncRequest::completeRequest() is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=139724

        Reviewed by Darin Adler.

        AsyncRequestImpl casting in AsyncRequest::completeRequest() relies on
        the parameter pack to properly determine the type of the AsyncRequestImpl
        object. The casting result can be incorrect when an argument is passed
        by reference while the original object was constructed with a callback
        that expects an argument that's passed by value.

        To avoid this the AsyncRequestImpl template is now instantiated with
        raw types, with callback parameters remaining raw types in case
        of being integral (enforcing passing-by-value these arguments when
        dispatching), and const references being used otherwise (enforcing
        passing-by-reference).

        This enables casting AsyncRequest objects to the correct AsyncRequestImpl<>
        by running the parameter pack through std::decay.

        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::putRecord):
        (WebKit::UniqueIDBDatabase::getRecord):
        (WebKit::UniqueIDBDatabase::openCursor):
        (WebKit::UniqueIDBDatabase::cursorAdvance):
        (WebKit::UniqueIDBDatabase::cursorIterate):
        (WebKit::UniqueIDBDatabase::count):
        (WebKit::UniqueIDBDatabase::deleteRange):
        * Shared/AsyncRequest.h:
        (WebKit::AsyncRequest::completeRequest):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        (WebKit::WebIDBServerConnection::getOrEstablishIDBDatabaseMetadata):
        (WebKit::WebIDBServerConnection::get):

2015-01-21  Chris Dumez  <cdumez@apple.com>

        [WK2] Stop using WKDiagnosticLoggingResultType.h C API header in Cocoa API
        https://bugs.webkit.org/show_bug.cgi?id=140655

        Reviewed by Anders Carlsson.

        Stop using WKDiagnosticLoggingResultType.h C API header in Cocoa API.
        Instead, introduce a new _WKDiagnosticLoggingResultType enum in
        _WKDiagnosticLoggingDelegate.h.

        A few defines mapping WKDiagnosticLoggingResultType enum and its values
        to the new _WKDiagnosticLoggingResultType are temporarily added until
        the client-side is transitioned.

        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h:
        * UIProcess/Cocoa/DiagnosticLoggingClient.mm:
        (WebKit::toWKDiagnosticLoggingResultType):
        (WebKit::DiagnosticLoggingClient::logDiagnosticMessageWithResult):

2015-01-21  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Use C++ lambdas in ProcessLauncher class
        https://bugs.webkit.org/show_bug.cgi?id=138186

        Reviewed by Darin Adler.

        Replace uses of WTF::bind() in the ProcessLauncher class with C++ lambdas.

        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        (WebKit::tryPreexistingProcess):
        (WebKit::createProcess):

2015-01-21  Zan Dobersek  <zdobersek@igalia.com>

        Clean up ViewUpdateDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=140619

        Reviewed by Darin Adler.

        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        Replace WTF::bind() with a C++ lambda.
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        Use WTF::move() to move the HashMap member into the local variable.

2015-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(INSPECTOR) ifdef guards
        https://bugs.webkit.org/show_bug.cgi?id=140668

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encode):
        (IPC::ArgumentCoder<ResourceRequest>::decode):
        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorGetTypeID):
        (WKInspectorGetPage):
        (WKInspectorIsConnected):
        (WKInspectorIsVisible):
        (WKInspectorIsFront):
        (WKInspectorConnect):
        (WKInspectorShow):
        (WKInspectorHide):
        (WKInspectorClose):
        (WKInspectorShowConsole):
        (WKInspectorShowResources):
        (WKInspectorShowMainResourceForFrame):
        (WKInspectorIsAttached):
        (WKInspectorAttach):
        (WKInspectorDetach):
        (WKInspectorIsProfilingPage):
        (WKInspectorTogglePageProfiling):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetInspector):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        * UIProcess/PageClient.h:
        * UIProcess/WebInspectorProxy.cpp:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getLaunchOptions):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::disableInspectorNodeSearch):
        * UIProcess/ios/WebInspectorProxyIOS.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::disableInspectorNodeSearch):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        (WKBundleInspectorGetTypeID):
        (WKBundleInspectorShow):
        (WKBundleInspectorClose):
        (WKBundleInspectorEvaluateScriptForTest):
        (WKBundleInspectorSetPageProfilingEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetInspector):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
        * WebProcess/WebPage/WebInspector.cpp:
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in:
        * WebProcess/WebPage/WebInspectorUI.cpp:
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebPage/WebInspectorUI.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::close):
        (WebKit::WebPage::inspectorUI):
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/efl/WebInspectorEfl.cpp:
        * WebProcess/WebPage/efl/WebInspectorUIEfl.cpp:
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        * WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::disableInspectorNodeSearch):
        * WebProcess/WebPage/mac/WebInspectorMac.mm:
        * WebProcess/WebPage/mac/WebInspectorUIMac.mm:
        * config.h:

2015-01-20  Martin Hock  <mhock@apple.com>

        [iOS][WK2] Redraw find-in-page indicator on rotation
        https://bugs.webkit.org/show_bug.cgi?id=140632
        <rdar://problem/18858394>

        Reviewed by Tim Horton.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::redraw): Add method to redraw find indicator (only used by iOS).
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameDidLayout):
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::updateFindIndicator): Redraw should not trigger zoom.

2015-01-20  David Kilzer  <ddkilzer@apple.com>

        Switch to comparing PLATFORM_NAME in terms of macosx
        <http://webkit.org/b/139516>

        Reviewed by Timothy Hatcher.

        * WebKit2.xcodeproj/project.pbxproj:
        * mac/rewrite-availability-macros.sh: Remove the else block that
        checked for an unknown PLATFORM_NAME.

2015-01-19  Simon Fraser  <simon.fraser@apple.com>

        Add a way to collect scrolling performance data (viewport tile coverage) with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=140474

        Reviewed by Tim Horton.
        
        Add a private method to enable scrolling data collection to WKWebView. When enabled, create
        a RemoteLayerTreeScrollingPerformanceData object that collects "blank pixel" data on
        every layer tree commit and scroll, and stores them in a vector. A second SPI call
        allows retrieval of an NSArray of this data.
        
        To allow RemoteLayerTreeScrollingPerformanceData to find the correct layer which
        contains the main tile grid, we set a layer name on the appropriate layer (even
        in release builds).

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView visibleRectInScreenCoordinates]):
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView _setScrollPerformanceDataCollectionEnabled:]):
        (-[WKWebView _scrollPerformanceDataCollectionEnabled]):
        (-[WKWebView _scrollPerformanceData]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/RemoteLayerTreeScrollingPerformanceData.h: Added.
        (WebKit::RemoteLayerTreeScrollingPerformanceData::BlankPixelCount::BlankPixelCount):
        * UIProcess/Cocoa/RemoteLayerTreeScrollingPerformanceData.mm: Added.
        (WebKit::RemoteLayerTreeScrollingPerformanceData::RemoteLayerTreeScrollingPerformanceData):
        (WebKit::RemoteLayerTreeScrollingPerformanceData::~RemoteLayerTreeScrollingPerformanceData):
        (WebKit::RemoteLayerTreeScrollingPerformanceData::didCommitLayerTree):
        (WebKit::RemoteLayerTreeScrollingPerformanceData::didScroll):
        (WebKit::RemoteLayerTreeScrollingPerformanceData::BlankPixelCount::canCoalesce):
        (WebKit::RemoteLayerTreeScrollingPerformanceData::appendBlankPixelCount):
        (WebKit::RemoteLayerTreeScrollingPerformanceData::data):
        (WebKit::findTileGridContainerLayer):
        (WebKit::RemoteLayerTreeScrollingPerformanceData::blankPixelCount):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setScrollPerformanceDataCollectionEnabled):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::scrollPerformanceDataCollectionEnabled):
        (WebKit::WebPageProxy::scrollingPerformanceData):
        * WebKit2.xcodeproj/project.pbxproj:

2015-01-19  Dean Jackson  <dino@apple.com>

        Support "plus-darker" in mix-blend mode
        https://bugs.webkit.org/show_bug.cgi?id=140646
        <rdar://problem/19523370>

        Reviewed by Simon Fraser.

        Output the appropriate blending type when logging.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):

2015-01-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.7.4 release.

        * gtk/NEWS: Add release notes for 2.7.4.

2015-01-20  Tomas Popela  <tpopela@redhat.com>

        [GTK] Add API to set the web view editable into WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=139443

        Reviewed by Carlos Garcia Campos.

        Provide a way to set the web view editable, without accessing the DOM
        and setting the contenteditable attribute to elements.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewSetProperty):
        (webkitWebViewGetProperty):
        (webkit_web_view_class_init):
        (webkit_web_view_is_editable):
        (webkit_web_view_set_editable):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2015-01-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add an option to create WebKitWebView snapshots with transparent background
        https://bugs.webkit.org/show_bug.cgi?id=140617

        Reviewed by Gustavo Noronha Silva.

        Add WEBKIT_SNAPSHOT_OPTIONS_TRANSPARENT_BACKGROUND flag to not
        fill with white the background before rendering the snapshot.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_snapshot): Pass a TransparentBackground
        boolean argument to the WEbProcess.
        * UIProcess/API/gtk/WebKitWebView.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitWebPageDidReceiveMessage): Set the FrameView background as
        transparent when TransparentBackground option is True before
        rendering the snapshot.

2015-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to change the WebKitWebView background color
        https://bugs.webkit.org/show_bug.cgi?id=140610

        Reviewed by Gustavo Noronha Silva.

        When a color different than the default one (opaque white) is
        used, the SetDrawsBackground message is sent to the WebProcess with
        a False value to indicate WebCore to not render backgrounds. The
        background color passed is saved in the WebPageProxy and used by
        the backing store to fill the background before the actual
        contents are rendered in the WebView.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_set_background_color):
        (webkit_web_view_get_background_color):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_backgroundColor member.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::backgroundColor): Return m_backgroundColor.
        (WebKit::WebPageProxy::setBackgroundColor): Set m_backgroundColor.
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate): Fill the damage region
        with the WebPageProxy background color when the WebProcess is not
        rendering backgrounds. If the background color is not fully opaque
        we need to clear the region before filling it with the color.

2015-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Flip the switch on
        https://bugs.webkit.org/show_bug.cgi?id=140592

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2015-01-19  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/140504> REGRESSION (r178452): Visited link coloring only appears to work in the first web process

        Roll out r178452 since it broke visited link coloring.

        Reviewed by Anders Carlsson.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider):
        (WebKit::VisitedLinkProvider::addProcess):
        (WebKit::VisitedLinkProvider::removeProcess):
        (WebKit::VisitedLinkProvider::removeAll):
        (WebKit::VisitedLinkProvider::webProcessWillOpenConnection):
        (WebKit::VisitedLinkProvider::webProcessDidCloseConnection):
        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired):
        (WebKit::VisitedLinkProvider::resizeTable):
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::processDidFinishLaunching):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::disconnect):
        (WebKit::WebProcessProxy::addVisitedLinkProvider):
        (WebKit::WebProcessProxy::didDestroyVisitedLinkProvider):
        * UIProcess/WebProcessProxy.h:

2015-01-19  Sam Weinig  <sam@webkit.org>

        Sprinkle some CTTE on API::PolicyClient and API::FormClient
        https://bugs.webkit.org/show_bug.cgi?id=140656

        Reviewed by Tim Horton.

        - Use references rather than pointers where possible.
        - Store and pass the listeners as Refs.
        - Make API::FormClient more like API::PolicyClient by making it the
          responsibility of the client implementation to call the default policy.

        * UIProcess/API/APIFormClient.h:
        (API::FormClient::willSubmitForm):
        * UIProcess/API/APIPolicyClient.h:
        (API::PolicyClient::decidePolicyForNavigationAction):
        (API::PolicyClient::decidePolicyForNewWindowAction):
        (API::PolicyClient::decidePolicyForResponse):
        (API::PolicyClient::unableToImplementPolicy):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPagePolicyClient):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setFormDelegate:]):
        * UIProcess/API/gtk/WebKitPolicyClient.cpp:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForNewWindowAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):
        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::willSubmitForm):
        * UIProcess/WebFormClient.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::setUpPolicyListenerProxy):
        (WebKit::WebFrameProxy::setUpFormSubmissionListenerProxy):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::willSubmitForm):

2015-01-18  Sam Weinig  <sam@webkit.org>

        Merge API::ProcessPoolConfiguration and _WKProcessPoolConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=140601

        Reviewed by Anders Carlsson.

        - Converts _WKProcessPoolConfiguration to be backed via API::ProcessPoolConfiguration.
        - Expands API::ProcessPoolConfiguration to add all the parameters necessary to fully
          initialize a WebProcessPool. This allows -[WKProcessPool _initWithConfiguration:] to
          be a simple pass through initializer, which in turn allows us to consider WebProcessPools
          created on the C++ and Objective-C sides as equivalent.
        - Makes WebProcessPool own the reference to the API::ProcessPoolConfiguration (rather than
          the WKProcessPool wrapper).

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Create the API::ProcessPoolConfigurations using [_WKProcessPoolConfiguration alloc] as its 
        storage..

        * UIProcess/API/APIProcessPoolConfiguration.cpp:
        (API::ProcessPoolConfiguration::create):
        (API::ProcessPoolConfiguration::createWithLegacyOptions):
        (API::ProcessPoolConfiguration::ProcessPoolConfiguration):
        (API::ProcessPoolConfiguration::~ProcessPoolConfiguration):
        (API::ProcessPoolConfiguration::copy):
        (API::ProcessPoolConfiguration::webProcessPoolConfiguration): Deleted.
        * UIProcess/API/APIProcessPoolConfiguration.h:
        Add the remaining initialization parameters and add a convenience create function
        for configuring legacy WebProcessPools (for use by the C-SPI).

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::websiteDataDirectoryFileSystemRepresentation):
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        Expose helper for getting the website data directories for use in the ProcessPoolConfiguration.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextCreate):
        (WKContextCreateWithInjectedBundlePath):
        (WKContextCreateWithConfiguration):
        Use ProcessPoolConfiguration::createWithLegacyOptions() to keep backwards compatibility.

        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCreate):
        Update for ProcessPoolConfiguration::create() returning a Ref. Note, this function
        was not changed to call ProcessPoolConfiguration::createWithLegacyOptions() since
        it has not been around long enough to warrant it.

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        Use ProcessPoolConfiguration::createWithLegacyOptions() to keep backwards compatibility.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool description]):
        Change to pull the configuration from the underlying API::Object.

        (-[WKProcessPool _configuration]):
        Change to pull the configuration from the underlying API::Object and call the new
        copy() helper on it.
        
        (-[WKProcessPool _initWithConfiguration:]):
        Convert to be a simple pass through to API::Object::constructInWrapper.

        (websiteDataDirectoryURL): Deleted.
        Moved to APIWebsiteDataStore.h

        * UIProcess/API/Cocoa/WKProcessPoolInternal.h:
        Removes the _WKProcessPoolConfiguration member, now that it is stored on the WebProcessPool.
        
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration init]):
        (-[_WKProcessPoolConfiguration dealloc]):
        Added to support API::Object bridging.

        (-[_WKProcessPoolConfiguration injectedBundleURL]):
        (-[_WKProcessPoolConfiguration setInjectedBundleURL:]):
        Convert to getting the URL from the underlying object. Moved the exception
        that used to be on creation of the WKProcessPool.

        (-[_WKProcessPoolConfiguration maximumProcessCount]):
        (-[_WKProcessPoolConfiguration setMaximumProcessCount:]):
        Convert to getting the count from the underlying object.

        (-[_WKProcessPoolConfiguration cachePartitionedURLSchemes]):
        Convert to constructing the NSArray on demand from the underlying Vector.

        (-[_WKProcessPoolConfiguration setCachePartitionedURLSchemes:]):
        Converts the NSArray to a Vector rather than storing the array.

        * UIProcess/API/Cocoa/_WKProcessPoolConfigurationInternal.h: Added.
        (API::wrapper):
        Add boilerplate for API::Object bridging.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        Update to use API::ProcessPoolConfiguration::createWithLegacyOptions() to keep backwards compatibility.


        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::inspectorProcessPool):
        Update to call API::ProcessPoolConfiguration::createWithLegacyOptions().

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::create):
        (WebKit::websiteDataStoreConfiguration):
        (WebKit::WebProcessPool::WebProcessPool):
        (WebKit::WebProcessPool::applyPlatformSpecificConfigurationDefaults): Deleted.
        This functionality was moved to the constructor of the API::ProcessPoolConfiguration.
        * UIProcess/WebProcessPool.h:
        Changed to take (and store) a API::ProcessPoolConfiguration rather than the WebProcessPoolConfiguration.

        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
        (WebKit::WebProcessPool::platformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::platformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::platformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::platformDefaultMediaKeysStorageDirectory): Deleted.
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
        (WebKit::WebProcessPool::platformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::platformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::platformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::platformDefaultMediaKeysStorageDirectory): Deleted.
        * UIProcess/gtk/WebProcessPoolGtk.cpp:
        (WebKit::WebProcessPool::legacyPlatformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultIndexedDBDatabaseDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultLocalStorageDirectory):
        (WebKit::WebProcessPool::legacyPlatformDefaultMediaKeysStorageDirectory):
        (WebKit::WebProcessPool::platformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::platformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebProcessPool::platformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebProcessPool::platformDefaultMediaKeysStorageDirectory): Deleted.
        Renamed to make it clear these were the legacy locations for these directories.

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

2015-01-19  Beth Dakin  <bdakin@apple.com>

         Speculative build fix.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:webView:]):

2015-01-19  Timothy Horton  <timothy_horton@apple.com>

        Adjust naming of action menu SPI
        https://bugs.webkit.org/show_bug.cgi?id=140644
        <rdar://problem/19448129>

        Reviewed by Brian Weinstein.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:processPool:configuration:webView:]):
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        (-[WKActionMenuController didCloseMenu:withEvent:]):
        (-[WKActionMenuController menuNeedsUpdate:]):
        (-[WKActionMenuController _updateActionMenuItems]):

2015-01-19  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Use C++ lambda instead of WTF::bind() in ThreadedCompositor::updateSceneState()
        https://bugs.webkit.org/show_bug.cgi?id=140613

        Reviewed by Carlos Garcia Campos.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::updateSceneState): Replace the use of WTF::bind() with a C++ lambda.

2015-01-19  Commit Queue  <commit-queue@webkit.org>

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

        Broke multiple SVG tests on Mountain Lion (Requested by ap on
        #webkit).

        Reverted changeset:

        "[SVG -> OTF Converter] Flip the switch on"
        https://bugs.webkit.org/show_bug.cgi?id=140592
        http://trac.webkit.org/changeset/178653

2015-01-19  Dean Jackson  <dino@apple.com>

        Add "override" to fix the build with newer clangs.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):

2015-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Flip the switch on
        https://bugs.webkit.org/show_bug.cgi?id=140592

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2015-01-18  Daniel Bates  <dabates@apple.com>

        Attempt to fix the iOS build after <http://trac.webkit.org/changeset/178631>
        (https://bugs.webkit.org/show_bug.cgi?id=129441)

        * UIProcess/WKInspectorHighlightView.mm:
        (-[WKInspectorHighlightView update:]): Substitute HighlightType::Node and
        HighlightType::Rects for HighlightTypeNode and HighlightTypeRects, respectively.
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight): Pass lvalue reference to WebCore::Highlight
        instead of pointer in call to InspectorController::getHighlight().

2015-01-18  Sam Weinig  <sam@webkit.org>

        Fix style issues and add availability macros missed in r178634
        https://bugs.webkit.org/show_bug.cgi?id=140597

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
        Add missing availability macros.

        * UIProcess/API/Cocoa/_WKUserContentFilter.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm:
        (-[_WKUserContentFilter initWithName:serializedRules:]):
        (-[_WKUserContentFilter _initWithName:serializedRules:]): Deleted.
        Removed unnecessary leading underscore from init method.

2015-01-17  Sam Weinig  <sam@webkit.org>

        Add initial experimental user content filtering API
        https://bugs.webkit.org/show_bug.cgi?id=140584

        Reviewed by Benjamin Poulain.

        Moves content filtering from being per-ProcessPool to per-UserContentController.

        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * UIProcess/API/APIUserContentFilter.cpp: Added.
        (API::UserContentFilter::UserContentFilter):
        (API::UserContentFilter::~UserContentFilter):
        * UIProcess/API/APIUserContentFilter.h: Added.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKUserContentFilterRef.cpp: Added.
        (WKUserContentFilterGetTypeID):
        (WKUserContentFilterCreate):
        * UIProcess/API/C/WKUserContentFilterRef.h: Added.
        * UIProcess/API/C/WebKit2_C.h:
        * UIProcess/API/Cocoa/_WKUserContentFilter.h: Added.
        * UIProcess/API/Cocoa/_WKUserContentFilter.mm: Added.
        (WKUserContentControllerAddUserContentFilter):
        (WKUserContentControllerRemoveAllUserContentFilters):
        (-[_WKUserContentFilter _initWithName:ruleList:]):
        * UIProcess/API/Cocoa/_WKUserContentFilterInternal.h: Added.
        Add a basic UserContentFilter type and expose it via both the Objective-C API (as _WKUserContentFilter)
        and via the C SPI (as WKUserContentFilterRef).

        * UIProcess/API/C/WKUserContentControllerRef.h:
        * UIProcess/API/C/WKUserContentControllerRef.cpp:
        Add C-SPI to set and remove WKUserContentFilterRefs.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _loadContentExtensionWithIdentifier:serializedRules:successCompletionHandler:errorCompletionHandler:]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processDidFinishLaunching):
        (WebKit::WebProcessPool::loadContentExtension): Deleted.
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::loadContentExtension): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        Remove the old SPI for loading content filters that was per-ProcessPool. Content filters now follow
        the same pattern as UserScripts and UserStyleSheets as being per-UserContentController.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController _addUserContentFilter:]):
        (-[WKUserContentController _removeAllUserContentFilters]):
        * UIProcess/API/Cocoa/WKUserContentControllerInternal.h:
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h: Added.
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addUserContentFilter):
        (WebKit::WebUserContentControllerProxy::removeAllUserContentFilters):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserContentFilters):
        (WebKit::WebUserContentController::removeAllUserContentFilters):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:
        Pipe user content filters over to all the WebProcesses that the UserContentController is
        connected to.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

2015-01-17  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Add Cocoa delegate for logging diagnostic messages
        https://bugs.webkit.org/show_bug.cgi?id=140410

        Reviewed by Sam Weinig.

        Add Cocoa delegate for logging diagnostic messages.

        * UIProcess/API/APIDiagnosticLoggingClient.h: Copied from Source/WebKit2/UIProcess/WebPageDiagnosticLoggingClient.h.
        (API::DiagnosticLoggingClient::~DiagnosticLoggingClient):
        (API::DiagnosticLoggingClient::logDiagnosticMessage):
        (API::DiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (API::DiagnosticLoggingClient::logDiagnosticMessageWithValue):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageDiagnosticLoggingClient):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _diagnosticLoggingDelegate]):
        (-[WKWebView _setDiagnosticLoggingDelegate:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKDiagnosticLoggingDelegate.h: Copied from Source/WebKit2/UIProcess/WebPageDiagnosticLoggingClient.h.
        * UIProcess/Cocoa/DiagnosticLoggingClient.h: Copied from Source/WebKit2/UIProcess/WebPageDiagnosticLoggingClient.h.
        * UIProcess/Cocoa/DiagnosticLoggingClient.mm: Added.
        (WebKit::DiagnosticLoggingClient::DiagnosticLoggingClient):
        (WebKit::DiagnosticLoggingClient::delegate):
        (WebKit::DiagnosticLoggingClient::setDelegate):
        (WebKit::DiagnosticLoggingClient::logDiagnosticMessage):
        (WebKit::DiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (WebKit::DiagnosticLoggingClient::logDiagnosticMessageWithValue):
        * UIProcess/WebPageDiagnosticLoggingClient.cpp:
        (WebKit::WebPageDiagnosticLoggingClient::WebPageDiagnosticLoggingClient):
        * UIProcess/WebPageDiagnosticLoggingClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setDiagnosticLoggingClient):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::logDiagnosticMessage):
        (WebKit::WebPageProxy::logDiagnosticMessageWithResult):
        (WebKit::WebPageProxy::logDiagnosticMessageWithValue):
        (WebKit::WebPageProxy::initializeDiagnosticLoggingClient): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::diagnosticLoggingClient):
        * WebKit2.xcodeproj/project.pbxproj:

2015-01-17  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r178618): Change to WKWebViewConfiguration broke iOS build
        <https://bugs.webkit.org/show_bug.cgi?id=140559>

        Blind fix to address the following build failure:

            Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm:79:7: error: interface type cannot be statically allocated
                T m_value;
                  ^
                  *
            Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm:94:55: note: in instantiation of template class 'LazyInitialized<WKWebViewContentProviderRegistry>' requested here
                LazyInitialized<WKWebViewContentProviderRegistry> _contentProviderRegistry;
                                                                  ^
            Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm:53:21: error: assigning to 'WKWebViewContentProviderRegistry *' from incompatible type 'RetainPtr<WKWebViewContentProviderRegistry *>'
                        m_value = f();
                                ^ ~~~
            Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm:222:37: note: in instantiation of function template specialization 'LazyInitialized<WKWebViewContentProviderRegistry>::get<(lambda at Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm:222:41)>' requested here
                return _contentProviderRegistry.get([] { return adoptNS([[WKWebViewContentProviderRegistry alloc] init]); });
                                                ^
            Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.mm:57:24: error: property 'get' not found on object of type 'WKWebViewContentProviderRegistry *'
                    return m_value.get();
                                   ^
            3 errors generated.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: Change
        _contentProviderRegistry to be a LazyInitialized<RetainPtr<>> to
        match other instance variables.

2015-01-16  Sam Weinig  <sam@webkit.org>

        Add a basic configuration object for WKView
        https://bugs.webkit.org/show_bug.cgi?id=140559

        Reviewed by Anders Carlsson.

        - Adds WKPageConfigurationRef (backed by API::PageConfiguration). WKWebView configuration
          is not yet bridged to this, but that will happen soon. For now, it has a few basic
          configuration options.
        - Adds WKUserContentControllerRef as C-SPI version of WKUserContentController.
        - Adds WKUserScriptRef as C-SPI version of WKUserScript.

        * Shared/API/APIObject.h:
        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toWKUserScriptInjectionTime):
        * UIProcess/API/APIPageConfiguration.cpp: Added.
        (API::PageConfiguration::PageConfiguration):
        (API::PageConfiguration::~PageConfiguration):
        (API::PageConfiguration::processPool):
        (API::PageConfiguration::setProcessPool):
        (API::PageConfiguration::userContentController):
        (API::PageConfiguration::setUserContentController):
        (API::PageConfiguration::pageGroup):
        (API::PageConfiguration::setPageGroup):
        (API::PageConfiguration::preferences):
        (API::PageConfiguration::setPreferences):
        (API::PageConfiguration::relatedPage):
        (API::PageConfiguration::setRelatedPage):
        (API::PageConfiguration::webPageConfiguration):
        * UIProcess/API/APIPageConfiguration.h: Added.
        (API::PageConfiguration::create):
        * UIProcess/API/APIUserScript.cpp: Added.
        (API::generateIdentifier):
        (API::UserScript::generateUniqueURL):
        * UIProcess/API/APIUserScript.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPageConfigurationRef.cpp: Added.
        (WKPageConfigurationGetTypeID):
        (WKPageConfigurationCreate):
        (WKPageConfigurationGetContext):
        (WKPageConfigurationSetContext):
        (WKPageConfigurationGetPageGroup):
        (WKPageConfigurationSetPageGroup):
        (WKPageConfigurationGetUserContentController):
        (WKPageConfigurationSetUserContentController):
        (WKPageConfigurationGetPreferences):
        (WKPageConfigurationSetPreferences):
        (WKPageConfigurationGetRelatedPage):
        (WKPageConfigurationSetRelatedPage):
        * UIProcess/API/C/WKPageConfigurationRef.h: Added.
        * UIProcess/API/C/WKUserContentControllerRef.cpp: Added.
        (WKUserContentControllerGetTypeID):
        (WKUserContentControllerCreate):
        (WKUserContentControllerCopyUserScripts):
        (WKUserContentControllerAddUserScript):
        (WKUserContentControllerRemoveAllUserScripts):
        * UIProcess/API/C/WKUserContentControllerRef.h: Added.
        * UIProcess/API/C/WKUserScriptRef.cpp: Added.
        (WKUserScriptGetTypeID):
        (WKUserScriptCreateWithSource):
        (WKUserScriptCopySource):
        (WKUserScriptGetInjectionTime):
        (WKUserScriptGetMainFrameOnly):
        * UIProcess/API/C/WKUserScriptRef.h: Added.
        * UIProcess/API/C/WebKit2_C.h:
        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript initWithSource:injectionTime:forMainFrameOnly:]):
        (generateIdentifier): Deleted.
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (LazyInitialized::get):
        (LazyInitialized::set):
        (LazyInitialized::peek):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:configurationRef:]):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        (WebKit::WebUserContentControllerProxy::create):
        * WebKit2.xcodeproj/project.pbxproj:

2015-01-16  Anders Carlsson  <andersca@apple.com>

        Pass the connection along to WebProcessLifetimeTracker
        https://bugs.webkit.org/show_bug.cgi?id=140569

        Reviewed by Andreas Kling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::connectionWillOpen):
        (WebKit::WebPageProxy::connectionDidClose):
        * UIProcess/WebProcessLifetimeTracker.cpp:
        (WebKit::WebProcessLifetimeTracker::connectionWillOpen):
        (WebKit::WebProcessLifetimeTracker::connectionDidClose):
        (WebKit::WebProcessLifetimeTracker::connectionWillClose): Deleted.
        * UIProcess/WebProcessLifetimeTracker.h:

2015-01-16  Anders Carlsson  <andersca@apple.com>

        More WebPageProxy CTTE
        https://bugs.webkit.org/show_bug.cgi?id=140565

        Reviewed by Andreas Kling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::connectionWillOpen):
        (WebKit::WebPageProxy::connectionDidClose):
        (WebKit::WebPageProxy::connectionWillClose): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        (WebKit::WebProcessProxy::connectionDidClose):

2015-01-16  Anders Carlsson  <andersca@apple.com>

        Remove dead code
        https://bugs.webkit.org/show_bug.cgi?id=140563

        Reviewed by Geoffrey Garen.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processWillOpenConnection): Deleted.
        (WebKit::WebProcessPool::processWillCloseConnection): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        (WebKit::WebProcessProxy::connectionDidClose):

2015-01-16  Anders Carlsson  <andersca@apple.com>

        Sprinkle some CTTE in ChildProcessProxy member functions
        https://bugs.webkit.org/show_bug.cgi?id=140562

        Reviewed by Andreas Kling.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):
        (WebKit::ChildProcessProxy::clearConnection):
        (WebKit::ChildProcessProxy::connectionWillOpen):
        (WebKit::ChildProcessProxy::connectionDidClose):
        (WebKit::ChildProcessProxy::connectionWillClose): Deleted.
        * Shared/ChildProcessProxy.h:
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::connectionWillOpen): Deleted.
        (WebKit::DatabaseProcessProxy::connectionWillClose): Deleted.
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::connectionWillOpen):
        (WebKit::NetworkProcessProxy::connectionWillClose): Deleted.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        (WebKit::WebProcessProxy::connectionDidClose):
        (WebKit::WebProcessProxy::connectionWillClose): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::initializeConnection):
        * UIProcess/mac/SecItemShimProxy.h:

2015-01-16  Beth Dakin  <bdakin@apple.com>

        Should cancel immediate action sooner in WK2
        https://bugs.webkit.org/show_bug.cgi?id=140561
        -and corresponding-
        rdar://problem/19490114

        Reviewed by Tim Horton.

        _cancelImmediateActionIfNeeded will cancel the immediate action if there is no 
        animation controller or if the DDActionContext doesn’t want to use its actions.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _cancelImmediateActionIfNeeded]):

        Call _cancelImmediateActionIfNeeded to cancel earlier.
        (-[WKImmediateActionController didPerformActionMenuHitTest:userData:]):

        Re-factor this code to use the newly-added method _cancelImmediateActionIfNeeded
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):

2015-01-16  Anders Carlsson  <andersca@apple.com>

        Don't try to send SetSession messages before the web page has been constructed in the web process
        https://bugs.webkit.org/show_bug.cgi?id=140558

        Reviewed by Andreas Kling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        We already send the session ID along in the page creation parameters so just message the network process
        if we need to create an ephemeral session.

        (WebKit::WebPageProxy::setSessionID):
        Add an isValid call for good measure.

2015-01-16  Anders Carlsson  <andersca@apple.com>

        Log unhandled messages in the web process
        https://bugs.webkit.org/show_bug.cgi?id=140549

        Reviewed by Andreas Kling.

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

2015-01-16  Shivakumar JM  <shiva.jm@samsung.com>

        Fix build warning in WebKit2/UIProcess module.
        https://bugs.webkit.org/show_bug.cgi?id=140538

        Reviewed by Csaba Osztrogonác.

        Fix build warnings by removing parameter name from functions

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::processWillOpenConnection):
        (WebKit::StorageManager::processDidCloseConnection):
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processWillOpenConnection):
        (WebKit::WebProcessPool::processWillCloseConnection):

2015-01-15  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(SQL_DATABASE) guards
        https://bugs.webkit.org/show_bug.cgi?id=140434

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/OriginAndDatabases.cpp:
        * Shared/OriginAndDatabases.h:
        * Shared/WebCoreArgumentCoders.cpp:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetDatabaseManager):
        * UIProcess/API/C/WKDatabaseManager.cpp:
        (WKDatabaseManagerGetTypeID):
        (WKDatabaseManagerGetOriginKey):
        (WKDatabaseManagerGetOriginQuotaKey):
        (WKDatabaseManagerGetOriginUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsKey):
        (WKDatabaseManagerGetDatabaseDetailsNameKey):
        (WKDatabaseManagerGetDatabaseDetailsDisplayNameKey):
        (WKDatabaseManagerGetDatabaseDetailsExpectedUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsCurrentUsageKey):
        (WKDatabaseManagerGetDatabaseDetailsCreationTimeKey):
        (WKDatabaseManagerGetDatabaseDetailsModificationTimeKey):
        (WKDatabaseManagerSetClient):
        (WKDatabaseManagerGetDatabasesByOrigin):
        (WKDatabaseManagerGetDatabaseOrigins):
        (WKDatabaseManagerDeleteDatabasesWithNameForOrigin):
        (WKDatabaseManagerDeleteDatabasesForOrigin):
        (WKDatabaseManagerDeleteAllDatabases):
        (WKDatabaseManagerSetQuotaForOrigin):
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::informDatabaseQuotaReached):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        * UIProcess/WebDatabaseManagerProxy.h:
        * UIProcess/WebDatabaseManagerProxy.messages.in:
        * UIProcess/WebProcessPool.cpp:
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        (WebKit::PageUIClientEfl::exceededDatabaseQuota):
        * UIProcess/efl/PageUIClientEfl.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearAllDatabases):
        (WebKit::InjectedBundle::setDatabaseQuota):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.messages.in:
        * WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.cpp:
        * WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):

2015-01-15  Anders Carlsson  <andersca@apple.com>

        Add a connection parameter to StorageManager willOpen/didClose functions
        https://bugs.webkit.org/show_bug.cgi?id=140527

        Reviewed by Tim Horton.

        Rename processWillCloseConnection to processDidCloseConnection and pass connections
        to both functions since in the near future we won't be able to get the connection from 
        the web process proxy in these scenarios.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::processWillOpenConnection):
        (WebKit::StorageManager::processDidCloseConnection):
        (WebKit::StorageManager::processWillCloseConnection): Deleted.
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::webProcessWillOpenConnection):
        (WebKit::WebsiteDataStore::webProcessDidCloseConnection):

2015-01-15  Chris Dumez  <cdumez@apple.com>

        [WK2] Wire diagnostic logging messages through the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=140486

        Reviewed by Sam Weinig.

        Wire diagnostic logging messages through the UIProcess.
        Eventually, the corresponding bundle API should go away.

        * CMakeLists.txt:
        Add UIProcess/WebPageDiagnosticLoggingClient.cpp to CMake.

        * Shared/API/c/WKDiagnosticLoggingResultType.h:
        Extract WKDiagnosticLoggingResultType enumeration from
        WKBundlePageDiagnosticLoggingClient.h into its own header so that
        it can be shared with the new WKPageDiagnosticLoggingClient.h.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toDiagnosticLoggingResultType):
        Add WebCore::DiagnosticLoggingResultType <-> WKDiagnosticLoggingResultType
        casting functions.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageDiagnosticLoggingClient):
        * UIProcess/API/C/WKPage.h:
        Add WKPage API so that the application can set the DiagnosticLoggingClient.

        * UIProcess/API/C/WKPageDiagnosticLoggingClient.h: Added.
        New WK2 diagnostic logging client that will eventually replace the existing
        WKBundlePageDiagnosticLoggingClient.h injected bundle client.

        * UIProcess/WebPageDiagnosticLoggingClient.cpp: Copied from Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp.
        * UIProcess/WebPageDiagnosticLoggingClient.h: Copied from Source/WebCore/page/DiagnosticLoggingClient.h.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        Handle new IPC messages for logging diagnostic messages.

        * UIProcess/WebPageProxy.messages.in:
        Add 3 IPC messages for logging diagnostic messages.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files to XCode project.

        * WebProcess/InjectedBundle/API/c/WKBundlePageDiagnosticLoggingClient.h:
        Remove WKDiagnosticLoggingResultType enum as it was moved to its own
        header.

        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.h:
        Use WebCore::DiagnosticLoggingResultType enum type instead of
        WKDiagnosticLoggingResultType and call toAPI() to convert to
        WKDiagnosticLoggingResultType type.

        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult):
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue):
        Send IPC to WebPageProxy in addition to calling the injected bundle client.

        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:
        Use new DiagnosticLoggingResultType enum instead of the old LogType one.

2015-01-15  Dan Bernstein  <mitz@apple.com>

        Added availability annotations to modern Cocoa SPI.

        Rubber-stamped by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2015-01-15  Anders Carlsson  <andersca@apple.com>

        Fix assertions on the Mountain Lion bots.

        It is allowed to call addWorkQueueMessageReceiver even if the connection is open
        so remove that assertion.

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

2015-01-15  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed build fix after r178536.

        Initialize member variables in the proper order.

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

2015-01-15  Enrica Casucci  <enrica@apple.com>

        [WK2] Add support for fully editable WKWebView.
        https://bugs.webkit.org/show_bug.cgi?id=140515

        Reviewed by Anders Carlsson.

        WKWebView has now a new property (_editable) to control
        the editability of the entire content.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isEditable]):
        (-[WKWebView _setEditable:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setEditable):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isEditable):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setEditable):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2015-01-15  Anders Carlsson  <andersca@apple.com>

        Clearing the website data store should clear local storage
        https://bugs.webkit.org/show_bug.cgi?id=140507

        Reviewed by Andreas Kling.

        * Shared/WebsiteData/WebsiteDataTypes.h:
        Add WebsiteDataTypeLocalStorage.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        Add WKWebsiteDataTypeLocalStorage

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (toWebsiteDataTypes):
        Handle WKWebsiteDataTypeLocalStorage.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::fileModificationTime):
        Use an early return.

        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
        Change this to take an std::chrono::system_clock::time_point and don't
        try to modifiy m_origins while iterating it.

        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        Update declarations.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        Change this to take an std::chrono::system_clock::time_point.

        * UIProcess/Storage/StorageManager.h:
        Update declarations.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeData):
        Remove data from the storage manager as well.

2015-01-15  Anders Carlsson  <andersca@apple.com>

        Give WebsiteDataStore a StorageManager
        https://bugs.webkit.org/show_bug.cgi?id=140505

        Reviewed by Andreas Kling.

        The process pool storage manager is still around but is only used for clearing data. It will be removed
        completely in an upcoming commit.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        Set up the local storage directory.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (websiteDataDirectoryURL):
        Export this so it can be called from APIWebsiteDataStoreCocoa.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        Call WebsiteDataStore::cloneSessionData instead.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::websiteDataStore):
        Add getter.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::websiteDataStoreConfiguration):
        Update this to take a WebProcessPoolConfiguration object and assign the local storage directory.

        (WebKit::WebProcessPool::WebProcessPool):
        Pass the configuration to websiteDataStoreConfiguration.

        (WebKit::WebProcessPool::processWillOpenConnection):
        (WebKit::WebProcessPool::processWillCloseConnection):
        Remove storage manager calls.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        When creating a persistent data store, also create a storage manager.

        (WebKit::WebsiteDataStore::cloneSessionData):
        Clone the session storage namespace.

        (WebKit::WebsiteDataStore::webPageWasAdded):
        Create a session storage namespace for this page.

        (WebKit::WebsiteDataStore::webPageWasRemoved):
        Destroy the session storage namespace.

        (WebKit::WebsiteDataStore::webProcessWillOpenConnection):
        Tell the storage manager about the new process connection.

        (WebKit::WebsiteDataStore::webPageWillOpenConnection):
        Set the allowed connection.

        (WebKit::WebsiteDataStore::webPageDidCloseConnection):
        Clear the allowed connection.

        (WebKit::WebsiteDataStore::webProcessDidCloseConnection):
        Tell the storage manager that the process connection has been closed.

        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Add new members.

2015-01-15  Anders Carlsson  <andersca@apple.com>

        More work on the lifetime observer
        https://bugs.webkit.org/show_bug.cgi?id=140500

        Reviewed by Andreas Kling.

        Add webPageWasAdded/webPageWasRemoved functions; these will be called first and last during the
        lifetime of the web page. Also remove removeObserver since nobody is calling it.

        * UIProcess/WebProcessLifetimeObserver.h:
        (WebKit::WebProcessLifetimeObserver::webPageWasAdded):
        (WebKit::WebProcessLifetimeObserver::webPageWasRemoved):
        * UIProcess/WebProcessLifetimeTracker.cpp:
        (WebKit::WebProcessLifetimeTracker::addObserver):
        (WebKit::WebProcessLifetimeTracker::pageWasInvalidated):
        (WebKit::WebProcessLifetimeTracker::removeObserver): Deleted.
        * UIProcess/WebProcessLifetimeTracker.h:

2015-01-14  Anders Carlsson  <andersca@apple.com>

        Don't pass an allowed connection when creating a session storage namespace
        https://bugs.webkit.org/show_bug.cgi?id=140482

        Reviewed by Sam Weinig.

        Instead, always call setAllowedSessionStorageNamespaceConnection. This will make it easier to
        move the storage manager into WebsiteDataStore and make it use the process lifetime observer machinery.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::SessionStorageNamespace::create):
        (WebKit::StorageManager::SessionStorageNamespace::SessionStorageNamespace):
        (WebKit::StorageManager::createSessionStorageNamespace):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):

2015-01-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r177075): [GTK] Creating a second web view disables accelerated compositing in existing web view
        https://bugs.webkit.org/show_bug.cgi?id=140494

        Reviewed by Gustavo Noronha Silva.

        The problem is that r177075 moved the creation of the redirected
        XComposite window to realize method, but leaving the call to
        webkitWebViewBaseUpdatePreferences() in both places Realize() and
        CreateWebPage(). webkitWebViewBaseUpdatePreferences() only updates
        the accelerating compositing setting nowadays, depending on
        whether the redirected XComposited window could be created or not
        (something that depends on whether XRender, XComposite and XDamage
        extensions are available in the current display). So, when the
        first web view is created, webkitWebViewBaseUpdatePreferences() is
        called first from CreateWebPage(), and always disabling
        accelerated compositing because the redirected window hasn't been
        created yet, and then from Realize() right after the redirected
        window is created so that accelerated compositing is enabled. When
        the second web view is created the same happens, but since
        settings are shared among web views, the first call to
        webkitWebViewBaseUpdatePreferences() from CreateWebPage() disables
        accelerated compositing and the web page exists accelerated
        compositing mode and never enters it again unless the page is
        reloaded. I guess the web page should enter accelerated
        compositing mode again when the setting is enabled again from
        Realize(), but since the setting is global and doesn't depend on
        every web view, we should never disable it once it has been
        enabled in any case.
        Since we want to enable accelerated compositing mode when the
        redirected XComposite window has been successfully created, we can
        use the SetNativeSurfaceHandleForCompositing message to enable the
        setting and remove webkitWebViewBaseUpdatePreferences().

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewUpdateSettings):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseCreateWebPage):
        (webkitWebViewBaseUpdatePreferences): Deleted.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNativeSurfaceHandleForCompositing):

2015-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r178464.

        * UIProcess/API/gtk/WebKitUserContent.cpp:
        (_WebKitUserScript::_WebKitUserScript):
        (webkitUserScriptGetUserScript):
        * UIProcess/API/gtk/WebKitUserContentPrivate.h:

2015-01-14  Sam Weinig  <sam@webkit.org>

        Convert WKUserScript to be an API::Object bridged object
        https://bugs.webkit.org/show_bug.cgi?id=140471

        Reviewed by Dan Bernstein.

        * Shared/API/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Add Type::UserScript.

        * UIProcess/API/APIUserScript.h: Added.
        Add API object for UserScripts.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController init]):
        (-[WKUserContentController userScripts]):
        (-[WKUserContentController addUserScript:]):
        (-[WKUserContentController removeAllUserScripts]):
        (toWebCoreUserScriptInjectionTime): Deleted.
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addUserScript):
        (WebKit::WebUserContentControllerProxy::removeAllUserScripts):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        (WebKit::WebUserContentControllerProxy::userScripts):
        Store the WKUserScripts in the WebUserContentControllerProxy instead of the
        Objective-C layer WKUserContentController, to allow creation of the object
        from either the Objective-C or C++ sides.

        * UIProcess/API/Cocoa/WKUserScript.mm:
        (generateIdentifier):
        (-[WKUserScript initWithSource:injectionTime:forMainFrameOnly:]):
        (-[WKUserScript source]):
        (-[WKUserScript injectionTime]):
        (-[WKUserScript isForMainFrameOnly]):
        (-[WKUserScript _apiObject]):
        * UIProcess/API/Cocoa/WKUserScriptInternal.h:
        (API::wrapper):
        (API::toWebCoreUserScriptInjectionTime):
        (API::toWKUserScriptInjectionTime):
        Convert to get properties from the API::UserScript.

        * WebKit2.xcodeproj/project.pbxproj:
        Add the new file.

2015-01-14  Anders Carlsson  <andersca@apple.com>

        Add per page connection callbacks to the lifetime observer
        https://bugs.webkit.org/show_bug.cgi?id=140475

        Reviewed by Andreas Kling.

        * UIProcess/WebProcessLifetimeObserver.cpp:
        (WebKit::WebProcessLifetimeObserver::addWebPage):
        (WebKit::WebProcessLifetimeObserver::removeWebPage):
        * UIProcess/WebProcessLifetimeObserver.h:
        (WebKit::WebProcessLifetimeObserver::webPageWillOpenConnection):
        (WebKit::WebProcessLifetimeObserver::webPageDidCloseConnection):

2015-01-14  Anders Carlsson  <andersca@apple.com>

        Make WebsiteDataStore a WebProcessLifetimeObserver
        https://bugs.webkit.org/show_bug.cgi?id=140472

        Reviewed by Andreas Kling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        (WebKit::WebsiteDataStore::removeData):
        (WebKit::WebsiteDataStore::addWebPage): Deleted.
        (WebKit::WebsiteDataStore::removeWebPage): Deleted.
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2015-01-14  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Add private API to toggle diagnostic logging setting
        https://bugs.webkit.org/show_bug.cgi?id=140464

        Reviewed by Dan Bernstein.

        Add private API to toggle diagnostic logging setting for iOS.
        Previously, there was only a WK2 private C API for this.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _diagnosticLoggingEnabled]):
        (-[WKPreferences _setDiagnosticLoggingEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2015-01-14  Anders Carlsson  <andersca@apple.com>

        Switch VisitedLinkProvider over to WebProcessLifetimeObserver
        https://bugs.webkit.org/show_bug.cgi?id=140469

        Reviewed by Andreas Kling.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider):
        (WebKit::VisitedLinkProvider::removeAll):
        (WebKit::VisitedLinkProvider::webProcessWillOpenConnection):
        (WebKit::VisitedLinkProvider::webProcessDidCloseConnection):
        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired):
        (WebKit::VisitedLinkProvider::resizeTable):
        (WebKit::VisitedLinkProvider::addProcess): Deleted.
        (WebKit::VisitedLinkProvider::removeProcess): Deleted.
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::processDidFinishLaunching):
        * UIProcess/WebProcessLifetimeObserver.cpp:
        (WebKit::WebProcessLifetimeObserver::processes):
        * UIProcess/WebProcessLifetimeObserver.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::disconnect):
        (WebKit::WebProcessProxy::addVisitedLinkProvider): Deleted.
        (WebKit::WebProcessProxy::didDestroyVisitedLinkProvider): Deleted.
        * UIProcess/WebProcessProxy.h:

2015-01-14  Anders Carlsson  <andersca@apple.com>

        Add willOpen and didClose member functions to WebProcessLifetimeObserver
        https://bugs.webkit.org/show_bug.cgi?id=140449

        Reviewed by Andreas Kling.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::addVisitedLinkHash):
        (WebKit::VisitedLinkProvider::webProcessWillOpenConnection):
        (WebKit::VisitedLinkProvider::webProcessDidCloseConnection):
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        * UIProcess/WebProcessLifetimeObserver.cpp:
        (WebKit::WebProcessLifetimeObserver::addWebPage):
        (WebKit::WebProcessLifetimeObserver::removeWebPage):
        * UIProcess/WebProcessLifetimeObserver.h:
        (WebKit::WebProcessLifetimeObserver::webProcessWillOpenConnection):
        (WebKit::WebProcessLifetimeObserver::webProcessDidCloseConnection):

2015-01-14  Dan Bernstein  <mitz@apple.com>

        Added availability annotations to some modern Cocoa SPI.

        Rubber-stamped by Anders Carlsson.

        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

2015-01-14  Hunseop Jeong  <hs85.jeong@samsung.com>

        [GTK] Fix build after r178385
        https://bugs.webkit.org/show_bug.cgi?id=140429

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/gtk/WebKitUserContentManager.cpp:
        (_WebKitUserContentManagerPrivate::_WebKitUserContentManagerPrivate):

2015-01-14  Commit Queue  <commit-queue@webkit.org>

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

        Wrong fix (Requested by KaL on #webkit).

        Reverted changeset:

        "Unreviewed GTK build fix after r178385."
        http://trac.webkit.org/changeset/178412

2015-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not schedule a redraw for the redirected XComposite window when not in accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=140354

        Reviewed by Martin Robinson.

        The RedirectedXCompositeWindow uses XDamage to be notified when
        the XWindow has been modified. Since the redirected window is
        created unconditionally we always receive a XDamage notify when
        the window is mapped, and we schedule a redraw in the web view
        even when the web view is not in accelerated compositing mode.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Only call gtk_widget_queue_draw() when
        in accelerated compositing mode.

2015-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not resize the redirected XComposite window when not in accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=140353

        Reviewed by Martin Robinson.

        We create the redirected XComposite window unconditionally, but
        with a size of 1x1 to save memory. However, we are always resizing
        it, so in the end we always end up with a XWindow allocated for
        the same size of the web view, even for web views that never enter
        in accelerated compositing mode.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewRenderAcceleratedCompositingResults): Resize the
        RedirectedXCompositeWindow to the current web view size to ensure
        the sizes match before drawing.
        (resizeWebKitWebViewBaseFromAllocation): Only resize the
        RedirectedXCompositeWindow when in accelerated compositing mode.
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::RedirectedXCompositeWindow::resize): Return early if the
        given size is the current size.

2015-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r177075): Flickering when the WebView is realized
        https://bugs.webkit.org/show_bug.cgi?id=140352

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize): Pass the parent GdkWindow to the
        RedirectedXCompositeWindow constructor.
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::supportsXDamageAndXComposite): Get the display from the
        given GdkWindow.
        (WebKit::RedirectedXCompositeWindow::create): Receive a GdkWindow
        instead of the Display and sise that is always 1x1.
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        Use the passed in GdkWindow to get the Display, Visual and Depth
        instead of using the window as parent and reparent afterwards.
        * UIProcess/gtk/RedirectedXCompositeWindow.h:

2015-01-14  Gwang Yoon Hwang  <yoon@igalia.com>

        Unreviewed GTK build fix after r178385.

        WebUserContentControllerProxy is not RefCounted anymore.

        * UIProcess/API/gtk/WebKitUserContentManager.cpp:
        (_WebKitUserContentManagerPrivate::_WebKitUserContentManagerPrivate):

2015-01-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed GTK build fix after r178375.

        uint64_t navigationID -> API::Navigation*.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:

2015-01-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed GTK build fix after r178375.

        WebFrameProxy is now a reference instead of a pointer.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:

2015-01-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed GTK build fix after r178375.

        WebPageProxy is now a reference instead of a pointer.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:

2015-01-13  Anders Carlsson  <andersca@apple.com>

        Fill in more of WebProcessLifetimeTracker
        https://bugs.webkit.org/show_bug.cgi?id=140418

        Reviewed by Andreas Kling.

        * UIProcess/WebProcessLifetimeObserver.cpp:
        (WebKit::WebProcessLifetimeObserver::WebProcessLifetimeObserver):
        (WebKit::WebProcessLifetimeObserver::~WebProcessLifetimeObserver):
        (WebKit::WebProcessLifetimeObserver::addWebPage):
        (WebKit::WebProcessLifetimeObserver::removeWebPage):
        * UIProcess/WebProcessLifetimeObserver.h:
        * UIProcess/WebProcessLifetimeTracker.cpp:
        (WebKit::WebProcessLifetimeTracker::WebProcessLifetimeTracker):
        (WebKit::WebProcessLifetimeTracker::addObserver):
        (WebKit::WebProcessLifetimeTracker::connectionWillOpen):
        (WebKit::WebProcessLifetimeTracker::connectionWillClose):
        (WebKit::WebProcessLifetimeTracker::pageWasInvalidated):
        (WebKit::WebProcessLifetimeTracker::processIsRunning):
        * UIProcess/WebProcessLifetimeTracker.h:

2015-01-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r178375.

        LoaderClient::didLayout() now takes a reference to the WebPageProxy
        instead of a pointer.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):

2015-01-13  Sam Weinig  <sam@webkit.org>

        Convert WebUserContentControllerProxy to an API::Object bridged to WKUserContentController
        https://bugs.webkit.org/show_bug.cgi?id=140414

        Reviewed by Dan Bernstein.

        * Shared/API/APIObject.h:
        Add Type::UserContentController.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Allocate WebUserContentControllerProxy using [WKUserContentController alloc].

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController init]):
        (-[WKUserContentController dealloc]):
        (-[WKUserContentController _apiObject]):
        * UIProcess/API/Cocoa/WKUserContentControllerInternal.h:
        (WebKit::wrapper):
        Convert to using API::ObjectStorage for the internal WebUserContentControllerProxy.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::create): Deleted.
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        Convert to inherit from API::ObjectImpl<> and remove create function.

2015-01-13  Anders Carlsson  <andersca@apple.com>

        Stub out more of the process lifetime tracker code
        https://bugs.webkit.org/show_bug.cgi?id=140411

        Reviewed by Sam Weinig.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::connectionWillOpen):
        (WebKit::WebPageProxy::connectionWillClose):
        * UIProcess/WebProcessLifetimeTracker.cpp:
        (WebKit::WebProcessLifetimeTracker::connectionWillOpen):
        (WebKit::WebProcessLifetimeTracker::connectionWillClose):
        (WebKit::WebProcessLifetimeTracker::pageWasInvalidated):
        * UIProcess/WebProcessLifetimeTracker.h:

2015-01-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake] Unreviewed build fix after r178366.

        * CMakeLists.txt: Add new files added by r178366.

2015-01-13  Sam Weinig  <sam@webkit.org>

        Move more of the Navigation infrastructure down to WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=140395

        Reviewed by Anders Carlsson.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didStartProvisionalLoadForFrame):
        (API::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (API::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (API::LoaderClient::didCommitLoadForFrame):
        (API::LoaderClient::didFinishDocumentLoadForFrame):
        (API::LoaderClient::didFinishLoadForFrame):
        (API::LoaderClient::didFailLoadWithErrorForFrame):
        (API::LoaderClient::didSameDocumentNavigationForFrame):
        (API::LoaderClient::didReceiveTitleForFrame):
        (API::LoaderClient::didFirstLayoutForFrame):
        (API::LoaderClient::didFirstVisuallyNonEmptyLayoutForFrame):
        (API::LoaderClient::didRemoveFrameFromHierarchy):
        (API::LoaderClient::didDisplayInsecureContentForFrame):
        (API::LoaderClient::didRunInsecureContentForFrame):
        (API::LoaderClient::didDetectXSSForFrame):
        (API::LoaderClient::didLayout):
        (API::LoaderClient::canAuthenticateAgainstProtectionSpaceInFrame):
        (API::LoaderClient::didReceiveAuthenticationChallengeInFrame):
        (API::LoaderClient::didStartProgress):
        (API::LoaderClient::didChangeProgress):
        (API::LoaderClient::didFinishProgress):
        (API::LoaderClient::processDidBecomeUnresponsive):
        (API::LoaderClient::interactionOccurredWhileProcessUnresponsive):
        (API::LoaderClient::processDidBecomeResponsive):
        (API::LoaderClient::processDidCrash):
        (API::LoaderClient::didChangeBackForwardList):
        (API::LoaderClient::shouldKeepCurrentBackForwardListItemInList):
        (API::LoaderClient::willGoToBackForwardListItem):
        (API::LoaderClient::pluginLoadPolicy):
        (API::LoaderClient::didFailToInitializePlugin):
        (API::LoaderClient::didBlockInsecurePluginVersion):
        (API::LoaderClient::webGLLoadPolicy):
        (API::LoaderClient::resolveWebGLLoadPolicy):
        (API::LoaderClient::didDestroyNavigation): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::NavigationState::LoaderClient::didCommitLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame):
        (WebKit::NavigationState::LoaderClient::didSameDocumentNavigationForFrame):
        (WebKit::NavigationState::LoaderClient::didLayout):
        (WebKit::NavigationState::LoaderClient::canAuthenticateAgainstProtectionSpaceInFrame):
        (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame):
        (WebKit::NavigationState::LoaderClient::processDidCrash):
        (WebKit::NavigationState::LoaderClient::didDestroyNavigation): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeBackForwardList):
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::shouldKeepCurrentBackForwardListItemInList):
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::didStartProgress):
        (WebKit::WebPageProxy::didChangeProgress):
        (WebKit::WebPageProxy::didFinishProgress):
        (WebKit::WebPageProxy::didDestroyNavigation):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didLayout):
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::didDetectXSSForFrame):
        (WebKit::WebPageProxy::webGLPolicyForURL):
        (WebKit::WebPageProxy::resolveWebGLPolicyForURL):
        (WebKit::WebPageProxy::processDidBecomeUnresponsive):
        (WebKit::WebPageProxy::interactionOccurredWhileProcessUnresponsive):
        (WebKit::WebPageProxy::processDidBecomeResponsive):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::canAuthenticateAgainstProtectionSpaceInFrame):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        (WebKit::WebPageProxy::didFailToInitializePlugin):
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
        - Moves conversion from navigationID to API::Navigation into WebPageProxy
          from NavigationState.
        - Changes API::LoaderClient to pass WebPageProxy and WebFrameProxy by reference
          rather than pointer, and to take an API::Navigation instead of a navigationID.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        Move access of the navigationID to after calling into the client bundle to avoid
        passing a navigationID of a deleted navigation to the UIProcess. This problem was
        caught via the WebKit2.StopLoadingDuringDidFailProvisionalLoadTest API test, which
        now exercises the Navigation code path. Had that test been written using a Navigation
        delegate, the issue would have happened prior to this change.

2015-01-13  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out a per page process lifetime tracker object
        https://bugs.webkit.org/show_bug.cgi?id=140399

        Reviewed by Beth Dakin.

        This will make it easier for certain objects that track a set of web page proxy objects
        (user content controller, visited link provider, data store) to be notified when their
        underlying processes come and go.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessLifetimeObserver.cpp: Added.
        * UIProcess/WebProcessLifetimeObserver.h: Added.
        * UIProcess/WebProcessLifetimeTracker.cpp: Added.
        (WebKit::WebProcessLifetimeTracker::WebProcessLifetimeTracker):
        (WebKit::WebProcessLifetimeTracker::~WebProcessLifetimeTracker):
        (WebKit::WebProcessLifetimeTracker::addObserver):
        (WebKit::WebProcessLifetimeTracker::removeObserver):
        * UIProcess/WebProcessLifetimeTracker.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2015-01-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake] Unreviewed build fix after r178309.

        * CMakeLists.txt: Rename moved files at r178309.

2015-01-11  Sam Weinig  <sam@webkit.org>

        Remove support for SharedWorkers
        https://bugs.webkit.org/show_bug.cgi?id=140344

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createSharedWorkerStrategy): Deleted.
        * NetworkProcess/NetworkProcessPlatformStrategies.h:
        * WebKit2Prefix.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createSharedWorkerStrategy): Deleted.
        (WebKit::WebPlatformStrategies::isAvailable): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2015-01-12  Anders Carlsson  <andersca@apple.com>

        Move a couple of API files to UIProcess/API.

        Rubber-stamped by Tim Horton.

        * UIProcess/API/APINavigationData.cpp: Renamed from Source/WebKit2/UIProcess/APINavigationData.cpp.
        * UIProcess/API/APINavigationData.h: Renamed from Source/WebKit2/UIProcess/APINavigationData.h.
        * UIProcess/API/APIProcessPoolConfiguration.cpp: Renamed from Source/WebKit2/UIProcess/APIProcessPoolConfiguration.cpp.
        * UIProcess/API/APIProcessPoolConfiguration.h: Renamed from Source/WebKit2/UIProcess/APIProcessPoolConfiguration.h.
        * UIProcess/API/APISession.cpp: Renamed from Source/WebKit2/UIProcess/APISession.cpp.
        * UIProcess/API/APISession.h: Renamed from Source/WebKit2/UIProcess/APISession.h.
        * WebKit2.xcodeproj/project.pbxproj:

2015-01-12  Martin Hock  <mhock@apple.com>

        [iOS][WK2] Push content bounds on layer tree commit to prevent drawing stale fixed position rects
        https://bugs.webkit.org/show_bug.cgi?id=140264
        <rdar://problem/18873545>

        Reviewed by Benjamin Poulain.

        When a resize occurs, we need to push the new content bounds to the web
        process or stale fixed position rects may draw incorrectly.

        As an example, suppose that WKWebView in UIProcess performs
        _frameOrBoundsChanged with new view bounds.
        Meanwhile, we'll switch to WebContentProcess and perform layout.
        Switching back to UIProcess, _frameOrBoundsChanged calls WKWebView
        _updateVisibleContentRects.
        _updateVisibleContentRects calls WKContentView didUpdateVisibleRect with
        the new bounds.
        didUpdateVisibleRects in turn calls WebPageProxyIOS
        computeCustomFixedPositionRect.
        computeCustomFixedPositionRect asks for the content bounds from
        PageClientImplIOS contentsSize which queries WKContentView's bounds
        size. But those bounds are stale because the layer tree commit hasn't
        occurred yet.

        By informing the WKWebView of the updated content size on layer tree
        commit, we ensure that the fixed position rects will be drawn correctly.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLayerTree:]): Push new content bounds to the web process.

2015-01-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow targetting the SVG->OTF font converter with ENABLE(SVG_OTF_CONVERTER)
        https://bugs.webkit.org/show_bug.cgi?id=136769

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2015-01-12  Zan Dobersek  <zdobersek@igalia.com>

        Clean up FrameTree::traverseNext() traversals of main frames
        https://bugs.webkit.org/show_bug.cgi?id=140338

        Reviewed by Andreas Kling.

        There's no reason to pass the main frame as the stayWithin parameter
        to FrameTree::traverseNext() when traversing over that same main frame.

        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::searchWithSpotlight):

2015-01-12  Timothy Horton  <timothy_horton@apple.com>

        Multi-rect TextIndicators are vertically flipped in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=140350
        <rdar://problem/19441243>

        Reviewed by Beth Dakin.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        Adjust to the field name changes.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setTextIndicator:fadeOut:]):
        Convert the textBoundingRect from root view to screen coordinates.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        (WebKit::FindController::drawRect):
        Adjust to the new name, and use contentsToRootView when comparing against
        the stored m_findIndicatorRect.

2015-01-11  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Suspend or resume when visibility is changed
        https://bugs.webkit.org/show_bug.cgi?id=140285

        Reviewed by Gyuyoung Kim.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp: Copied the logic from TiledCoreAnimationDrawingArea.
        (WebKit::CoordinatedDrawingArea::viewStateDidChange):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:

2015-01-10  Gwang Yoon Hwang  <yoon@igalia.com>

        [ThreadedCompositor] Prevent excessive rendering call.
        https://bugs.webkit.org/show_bug.cgi?id=140297

        Reviewed by Žan Doberšek.

        Not to waste CPU time on waiting V-Sync interval, the update timer of
        compositing thread should be throttled.

        In case of updating scene state, this update timer should be called as
        soon as possible. However, when CoordinatedGraphicsScene requests update
        viewport to advance the animations, this call should be scheduled for
        a next frame.

        No new tests. No change in functionality.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::CompositingRunLoop::CompositingRunLoop):
        (WebKit::CompositingRunLoop::setUpdateTimer):
        (WebKit::CompositingRunLoop::updateTimerFired):
        (WebKit::ThreadedCompositor::setNeedsDisplay):
        (WebKit::ThreadedCompositor::updateViewport):
        (WebKit::ThreadedCompositor::scheduleDisplayImmediately):
        (WebKit::ThreadedCompositor::didChangeVisibleRect):
        (WebKit::ThreadedCompositor::scheduleDisplayIfNeeded): Deleted.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:

2015-01-09  Sam Weinig  <sam@webkit.org>

        Try to fix the GTK and EFL builds.

        * CMakeLists.txt:

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

        Get rid of the database strategy
        https://bugs.webkit.org/show_bug.cgi?id=140322

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createDatabaseStrategy): Deleted.
        * NetworkProcess/NetworkProcessPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createDatabaseStrategy): Deleted.
        (WebKit::WebPlatformStrategies::getDatabaseServer): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

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

        [Cocoa] Remove deprecated WKRenderingProgressEvents
        https://bugs.webkit.org/show_bug.cgi?id=140325

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKRenderingProgressEvents.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:

2015-01-09  Sam Weinig  <sam@webkit.org>

        Move Navigation creation out of the Cocoa layer and down into the WebPageProxy level
        https://bugs.webkit.org/show_bug.cgi?id=140319

        Reviewed by Anders Carlsson.

        - Adds WebNavigationState, a class at the WebPageProxy level to handle the creation
          and storage of Navigations. Starts moving some of the functionality from NavigationState
          there.

        * UIProcess/API/APINavigation.cpp:
        (API::Navigation::Navigation):
        * UIProcess/API/APINavigation.h:
        (API::Navigation::create):
        (API::Navigation::navigationID):
        Have each Navigation store its navigationID and generate it via the WebNavigationState
        that is passed to the constructor.
        
        * 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 _restoreFromSessionStateData:]):
        (-[WKWebView _restoreSessionState:andNavigate:]):
        Update for WebPageProxy functions returning the Navigations directly, rather than
        the navigationID.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        Remove creation of the load request navigation which is now handled by the WebPageProxy.

        (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::NavigationState::LoaderClient::didCommitLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame):
        (WebKit::NavigationState::LoaderClient::didSameDocumentNavigationForFrame):
        (WebKit::NavigationState::LoaderClient::didDestroyNavigation):
        (WebKit::NavigationState::LoaderClient::processDidCrash):
        Change to get/take/remove Navigations from the WebPageProxy's WebNavigationState

        (WebKit::NavigationState::createLoadRequestNavigation): Deleted.
        (WebKit::NavigationState::createBackForwardNavigation): Deleted.
        (WebKit::NavigationState::createReloadNavigation): Deleted.
        (WebKit::NavigationState::createLoadDataNavigation): Deleted.
        Move Navigation creation to WebNavigationState.

        * UIProcess/WebFrameListenerProxy.cpp:
        (WebKit::WebFrameListenerProxy::WebFrameListenerProxy):
        (WebKit::WebFrameListenerProxy::receivedPolicyDecision):
        * UIProcess/WebFrameListenerProxy.h:
        (WebKit::WebFrameListenerProxy::navigation):
        (WebKit::WebFrameListenerProxy::setNavigation):
        (WebKit::WebFrameListenerProxy::navigationID): Deleted.
        (WebKit::WebFrameListenerProxy::setNavigationID): Deleted.
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::receivedPolicyDecision):
        * UIProcess/WebFrameProxy.h:
        Store a Navigation rather than a navigationID on the WebFrameListenerProxy.

        * UIProcess/WebNavigationState.cpp: Added.
        (WebKit::WebNavigationState::WebNavigationState):
        (WebKit::WebNavigationState::~WebNavigationState):
        (WebKit::WebNavigationState::createLoadRequestNavigation):
        (WebKit::WebNavigationState::createBackForwardNavigation):
        (WebKit::WebNavigationState::createReloadNavigation):
        (WebKit::WebNavigationState::createLoadDataNavigation):
        (WebKit::WebNavigationState::navigation):
        (WebKit::WebNavigationState::takeNavigation):
        (WebKit::WebNavigationState::didDestroyNavigation):
        (WebKit::WebNavigationState::clearAllNavigations):
        * UIProcess/WebNavigationState.h: Added.
        (WebKit::WebNavigationState::generateNavigationID):
        New class to manage navigations.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcessForReload):
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::reload):
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::generateNavigationID): Deleted.
        Create navigations directly rather than generating a navigation ID and letting
        the API level create Navigation.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::navigationState):
        Add WebNavigationState member and accessor.

        * WebKit2.xcodeproj/project.pbxproj:
        Add WebNavigationState.h/cpp

2015-01-09  Daniel Bates  <dabates@apple.com>

        [iOS] Make DumpRenderTree build with public SDK
        https://bugs.webkit.org/show_bug.cgi?id=140311

        Reviewed by Sam Weinig.

        Add more SPI declarations.

        * Platform/spi/ios/UIKitSPI.h:

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

        Web Inspector: Remove or use TimelineAgent Resource related event types
        https://bugs.webkit.org/show_bug.cgi?id=140155

        Reviewed by Timothy Hatcher.

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

2015-01-09  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the WebKit2 build with the public SDK

        Forward declare class WebView.

        * Platform/spi/ios/UIKitSPI.h:

2015-01-09  Sam Weinig  <sam@webkit.org>

        Make WKNavigation bridged to API::Navigation (Take 2)
        https://bugs.webkit.org/show_bug.cgi?id=140272

        Reviewed by Dan Bernstein.

        * Shared/API/APIObject.h:
        Add Navigation.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Bridge to WKNavigation.

        * UIProcess/API/APINavigation.cpp: Added.
        (API::Navigation::Navigation):
        (API::Navigation::~Navigation):
        * UIProcess/API/APINavigation.h: Added.
        (API::Navigation::create):
        (API::Navigation::request):
        Add initial implementation.

        * UIProcess/API/Cocoa/WKNavigation.mm:
        (-[WKNavigation dealloc]):
        (-[WKNavigation _request]):
        (-[WKNavigation _apiObject]):
        * UIProcess/API/Cocoa/WKNavigationInternal.h:
        (API::wrapper):
        Implement bridging to API::Navigation and get the request from the underlying object.

        * 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 _restoreSessionState:andNavigate:]):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::createLoadRequestNavigation):
        (WebKit::NavigationState::createBackForwardNavigation):
        (WebKit::NavigationState::createReloadNavigation):
        (WebKit::NavigationState::createLoadDataNavigation):
        (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::NavigationState::LoaderClient::didCommitLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame):
        (WebKit::NavigationState::LoaderClient::didSameDocumentNavigationForFrame):
        Switch to storing API::Navigations.

        * WebKit2.xcodeproj/project.pbxproj:
        Add the new files.

2015-01-09  Gwang Yoon Hwang  <yoon@igalia.com>

        Rename GraphicsLayerAnimation to TextureMapperAnimation
        https://bugs.webkit.org/show_bug.cgi?id=140296

        Reviewed by Martin Robinson.

        GraphicsLayerAnimation is changed to TextureMapperAnimation
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextureMapperAnimation>::encode):
        (IPC::ArgumentCoder<TextureMapperAnimation>::decode):
        (IPC::ArgumentCoder<TextureMapperAnimations>::encode):
        (IPC::ArgumentCoder<TextureMapperAnimations>::decode):
        (IPC::ArgumentCoder<GraphicsLayerAnimation>::encode): Deleted.
        (IPC::ArgumentCoder<GraphicsLayerAnimation>::decode): Deleted.
        (IPC::ArgumentCoder<GraphicsLayerAnimations>::encode): Deleted.
        (IPC::ArgumentCoder<GraphicsLayerAnimations>::decode): Deleted.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:

2015-01-08  Enrica Casucci  <enrica@apple.com>

        [iOS] Cannot paste an image URL in a plain text field in a page.
        https://bugs.webkit.org/show_bug.cgi?id=140274
        rdar://problem/18590809

        Reviewed by Alexey Proskuryakov.

        supportedPasteboardTypesForCurrentSelection should include kUTTypeURL for plain
        text controls and WebArchivePboardType for rich text controls.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView supportedPasteboardTypesForCurrentSelection]): Remove obsolete and
        incorrect FIXME.

2015-01-09  Commit Queue  <commit-queue@webkit.org>

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

        Broke multiple API tests (Requested by ap on #webkit).

        Reverted changeset:

        "Make WKNavigation bridged to API::Navigation"
        https://bugs.webkit.org/show_bug.cgi?id=140272
        http://trac.webkit.org/changeset/178141

2015-01-08  Benjamin Poulain  <benjamin@webkit.org>

        [WK2] Start a prototype for declarative site specific extensions
        https://bugs.webkit.org/show_bug.cgi?id=140160

        Reviewed by Andreas Kling.

        Provide a small SPI for OS X. This will likely move
        to a better place.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _loadContentExtensionWithIdentifier:serializedRules:successCompletionHandler:errorCompletionHandler:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::processDidFinishLaunching):
        (WebKit::WebProcessPool::loadContentExtension):
        * UIProcess/WebProcessPool.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::loadContentExtension):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2015-01-08  Sam Weinig  <sam@webkit.org>

        Make WKNavigation bridged to API::Navigation
        https://bugs.webkit.org/show_bug.cgi?id=140272

        Reviewed by Anders Carlsson.

        * Shared/API/APIObject.h:
        Add Navigation.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Bridge to WKNavigation.

        * UIProcess/API/APINavigation.cpp: Added.
        (API::Navigation::Navigation):
        (API::Navigation::~Navigation):
        * UIProcess/API/APINavigation.h: Added.
        (API::Navigation::create):
        (API::Navigation::request):
        Add initial implementation.

        * UIProcess/API/Cocoa/WKNavigation.mm:
        (-[WKNavigation dealloc]):
        (-[WKNavigation _request]):
        (-[WKNavigation _apiObject]):
        * UIProcess/API/Cocoa/WKNavigationInternal.h:
        (API::wrapper):
        Implement bridging to API::Navigation and get the request from the underlying object.

        * 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 _restoreSessionState:andNavigate:]):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::createLoadRequestNavigation):
        (WebKit::NavigationState::createBackForwardNavigation):
        (WebKit::NavigationState::createReloadNavigation):
        (WebKit::NavigationState::createLoadDataNavigation):
        (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::NavigationState::LoaderClient::didCommitLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame):
        (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame):
        (WebKit::NavigationState::LoaderClient::didSameDocumentNavigationForFrame):
        Switch to storing API::Navigations.

        * WebKit2.xcodeproj/project.pbxproj:
        Add the new files.

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

        Text not drawn or white-on-white for "Close Page"/"Go Back" button on safe browsing warning page
        https://bugs.webkit.org/show_bug.cgi?id=140232

        Yet another attempt to get the Safari 7/8 build to work. I've moved the
        stubs back into a place where they can be seen (both definition and implementation).
        I also removed the previous workaround.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPreferencesSetApplicationChromeModeEnabled): Deleted.
        (WKPreferencesGetApplicationChromeModeEnabled): Deleted.
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetApplicationChromeModeEnabled):
        (WKPreferencesGetApplicationChromeModeEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

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

        Text not drawn or white-on-white for "Close Page"/"Go Back" button on safe browsing warning page
        https://bugs.webkit.org/show_bug.cgi?id=140232

        Unreviewed followup to try to get the Mavericks Safari to build.

        * Shared/WebPreferencesDefinitions.h: Add the application chrome mode definition.

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

        Text not drawn or white-on-white for "Close Page"/"Go Back" button on safe browsing warning page
        https://bugs.webkit.org/show_bug.cgi?id=140232
        <rdar://problem/19371010>

        Reviewed by Anders Carlsson.

        Remove the applicationChromeMode setting, but leave stubs in to make
        sure existing binaries don't break.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPreferencesSetApplicationChromeModeEnabled):
        (WKPreferencesGetApplicationChromeModeEnabled):
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetApplicationChromeModeEnabled): Deleted.
        (WKPreferencesGetApplicationChromeModeEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorPageGroups::createInspectorPageGroup):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2015-01-08  Gwang Yoon Hwang  <yoon@igalia.com>

        [ThreadedCompositor] Update active animations without interrupting the main-thread
        https://bugs.webkit.org/show_bug.cgi?id=140245

        Reviewed by Martin Robinson.

        In the Threaded Compositor, CoordinatedGraphicsScene can directly
        request updateViewport to the compositing thread if it has any active
        animation.

        To keep current behavior of CoordinatedGraphics, this patch modifies
        CoordinatedGraphicsScene to remember the constructed thread as a
        clientRunLoop, and dispatch updateViewport calls to clientRunLoop.

        No new tests. No change in functionality.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::dispatchOnClientRunLoop):
        (WebKit::CoordinatedGraphicsScene::CoordinatedGraphicsScene):
        (WebKit::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebKit::CoordinatedGraphicsScene::updateViewport):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::ThreadedCompositor):
        (WebKit::ThreadedCompositor::runCompositingThread):

2015-01-08  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Seperate updateBackingStore from flushCompositingState.
        https://bugs.webkit.org/show_bug.cgi?id=136887

        Reviewed by Žan Doberšek.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::flushPendingLayerChanges):
        Modified to call GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers

2015-01-07  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK][ThreadedCompositor] Add support for threaded compositor.
        https://bugs.webkit.org/show_bug.cgi?id=118265

        Reviewed by Martin Robinson.

        This patch introduces a threaded compositor for WebKitGTK+.
        It is disabled as a default because it is a initial implementation.
        The threaded compositor can be enabled using --threaded-compositor
        option at compile time.

        No new tests, this is an experimental feature.

        * PlatformGTK.cmake:
        Adds CoodinatedGraphics and threaded compositor related classes to
        support threaded compositor

        * Shared/DrawingAreaInfo.h:
        Use DrawingAreaImpl for threaded compositor

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate::_WebKitSettingsPrivate):
        Modified to use forceCompositingMode when the threaded compositor used.
        If we does not set this mode here, it cannot draw the root content layer.

        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp: Added.
        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h: Added.
        (WebKit::ThreadedCoordinatedLayerTreeHost::rootLayer):
        Implements ThreadedCoordinatedLayerTreeHost to use the threaded
        compositor. It is basically similar with CoordinatedLayerTreeHost but it uses ThreadedCompositor instead of IPC.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        (WebKit::DrawingArea::DrawingArea):
        * WebProcess/WebPage/DrawingArea.h:
        COORDINATED_GRAPHICS_MULTIPROCESS is introduced to classify IPC specific codes
        from Coordinated Graphics.
        And COORDINATED_GRAPHICS_THREADED is used to guard the threaded
        compositor specific codes.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        Modified to use forceCompositingMode when the threaded compositor used.
        If we does not set this mode here, it will crash because of PageOverlay.
        (WebKit::DrawingAreaImpl::mainFrameContentSizeChanged):
        (WebKit::DrawingAreaImpl::updateBackingStoreState):
        Modified to handle contents / viewport size changes for threaded compositor.
        (WebKit::DrawingAreaImpl::attachViewOverlayGraphicsLayer):
        Added to support Overlay layer in the threaded compositor.
        (WebKit::DrawingAreaImpl::setNativeSurfaceHandleForCompositing):
        Push the surface handle for compositing to the threaded compositor.

        * WebProcess/WebPage/DrawingAreaImpl.h: Use COORDINATED_GRAPIHCS_THREADED to guard the threaded compositor related codes.
        * WebProcess/WebPage/LayerTreeHost.cpp: Ditto.
        * WebProcess/WebPage/LayerTreeHost.h: Ditto.
        * WebProcess/WebPage/WebPage.cpp: Ditto.
        * WebProcess/WebPage/WebPage.h: Ditto.
        * WebProcess/WebPage/WebPage.messages.in: Ditto.

        * WebProcess/gtk/WebProcessMainGtk.cpp:
            Modified to call XInitThreads to use thread-safe xlib.

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

        [iOS] Make WebKit2 build with public iOS SDK and more build fixes for DRT
        https://bugs.webkit.org/show_bug.cgi?id=137371

        Reviewed by David Kilzer.

        * Configurations/BaseTarget.xcconfig: Append directory $(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks to
        the list of directories to search for frameworks so that we the linker can find and link against iOS private
        frameworks (e.g. AssertionServices).
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::willCacheResponseAsync): Add PLATFORM(IOS)-guard around call to NetworkDiskCacheMonitor::monitorFileBackingStoreCreation().
        * Platform/IPC/mac/ConnectionMac.mm: Add header sys/mman.h.
        * Platform/spi/ios/BKSProcessAssertionSPI.h: Added.
        * Platform/spi/ios/CorePDFSPI.h: Added.
        * Platform/spi/ios/DataDetectorsUISPI.h: Added.
        * Platform/spi/ios/ManagedConfigurationSPI.h: Added.
        * Platform/spi/ios/TCCSPI.h: Added.
        * Platform/spi/ios/TextInputSPI.h: Added.
        * Platform/spi/ios/UIKitSPI.h: Added.
        * Shared/Downloads/ios/DownloadIOS.mm: Add USE(CFNETWORK)-guard around CFNetwork-specific code and conditionally
        include header CFNetwork/CFURLDownload.h.
        (WebKit::Download::startWithHandle): Ditto.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.mm: Include header ServersSPI.h instead
        of directly including private headers.
        * Shared/ios/NativeWebTouchEventIOS.mm: Include header UIKitSPI.h instead of directly including private headers.
        * Shared/mac/SandboxUtilities.cpp: Include header sys/param.h.
        * UIProcess/API/Cocoa/WKWebView.mm: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: Ditto.
        * UIProcess/API/Cocoa/WKWebViewInternal.h: Ditto.
        * UIProcess/API/ios/WKViewIOS.mm: Ditto.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: Include header ServersSPI.h instead of directly including private headers.
        * UIProcess/ios/PageClientImplIOS.mm: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/ProcessAssertionIOS.mm: Include header BKSProcessAssertionSPI.h instead of directly including private headers.
        * UIProcess/ios/SmartMagnificationController.mm: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/ViewGestureControllerIOS.mm: Ditto.
        * UIProcess/ios/WKActionSheet.mm: Ditto.
        * UIProcess/ios/WKActionSheetAssistant.h: Include header DataDetectorsUISPI.h instead of directly including private headers.
        * UIProcess/ios/WKActionSheetAssistant.mm: Include headers TCCSPI.h and UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/WKContentView.mm: Include header UIKitSPI.h instead of directly including private headers. Also, move CALayer SPI
        forward declarations to QuartzCoreSPI.h
        * UIProcess/ios/WKContentViewInteraction.h: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/WKContentViewInteraction.mm: Ditto. Also, include headers CoreGraphicsSPI.h, CoreText/CTFont.h, DataDetectorsUISPI.h,
        ManagedConfigurationSPI.h, TextInputSPI.h.
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/WKPDFPageNumberIndicator.mm: Ditto.
        * UIProcess/ios/WKPDFView.h: Include header CorePDFSPI.h instead of directly including private headers.
        * UIProcess/ios/WKPDFView.mm: Ditto. Also, remove header _UIHighlightViewSPI.h and include UIKitSPI.h.
        * UIProcess/ios/WKScrollView.h: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/WKSyntheticClickTapGestureRecognizer.h: Ditto.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm: Ditto.
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: Ditto.
        * UIProcess/ios/forms/WKFileUploadPanel.mm: Ditto.
        * UIProcess/ios/forms/WKFormInputControl.mm: Ditto.
        * UIProcess/ios/forms/WKFormPopover.mm: Ditto.
        * UIProcess/ios/forms/WKFormSelectControl.h: Ditto.
        * UIProcess/ios/forms/WKFormSelectControl.mm: Ditto.
        * UIProcess/ios/forms/WKFormSelectPicker.mm: Ditto.
        * UIProcess/ios/forms/WKFormSelectPopover.mm: Ditto.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm: Include headers ServersSPI.h and GraphicsServicesSPI.h instead of
        directly including private headers. Also, ignore deprecated declaration for bootstrap_register2().
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm: Include header GraphicsServicesSPI.h instead of directly
        including private headers.
        * config.h: Moved EXTERN_C_BEGIN and EXTERN_C_END macros from here to file wtf/Compiler.h and renamed them to WTF_EXTERN_C_BEGIN
        and  WTF_EXTERN_C_END, respectively, so that we can make use of them in SPI wrapper headers (e.g. UIKitSPI.h).

2015-01-07  Simon Fraser  <simon.fraser@apple.com>

        Make WebKitAcceleratedDrawingEnabled into a "debug" pref, so that it's read without page group prefixes
        https://bugs.webkit.org/show_bug.cgi?id=140221

        Reviewed by Sam Weinig.
        
        Applications should not be toggling WebKitAcceleratedDrawingEnabled; it's really only
        useful to toggle for debugging, so make it a debug pref.

        * Shared/WebPreferencesDefinitions.h:

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

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

        Breaks the iOS build (Requested by enrica on #webkit).

        Reverted changeset:

        "[iOS] Make WebKit2 build with public iOS SDK and more build
        fixes for DRT"
        https://bugs.webkit.org/show_bug.cgi?id=137371
        http://trac.webkit.org/changeset/178068

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

        [iOS] Make WebKit2 build with public iOS SDK and more build fixes for DRT
        https://bugs.webkit.org/show_bug.cgi?id=137371

        Reviewed by David Kilzer.

        * Configurations/BaseTarget.xcconfig: Append directory $(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks to
        the list of directories to search for frameworks so that we the linker can find and link against iOS private
        frameworks (e.g. AssertionServices).
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::willCacheResponseAsync): Add PLATFORM(IOS)-guard around call to NetworkDiskCacheMonitor::monitorFileBackingStoreCreation().
        * Platform/IPC/mac/ConnectionMac.mm: Add header sys/mman.h.
        * Platform/spi/ios/BKSProcessAssertionSPI.h: Added.
        * Platform/spi/ios/CorePDFSPI.h: Added.
        * Platform/spi/ios/DataDetectorsUISPI.h: Added.
        * Platform/spi/ios/ManagedConfigurationSPI.h: Added.
        * Platform/spi/ios/TCCSPI.h: Added.
        * Platform/spi/ios/TextInputSPI.h: Added.
        * Platform/spi/ios/UIKitSPI.h: Added.
        * Shared/Downloads/ios/DownloadIOS.mm: Add USE(CFNETWORK)-guard around CFNetwork-specific code and conditionally
        include header CFNetwork/CFURLDownload.h.
        (WebKit::Download::startWithHandle): Ditto.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.mm: Include header ServersSPI.h instead
        of directly including private headers.
        * Shared/ios/NativeWebTouchEventIOS.mm: Include header UIKitSPI.h instead of directly including private headers.
        * Shared/mac/SandboxUtilities.cpp: Include header sys/param.h.
        * UIProcess/API/Cocoa/WKWebView.mm: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: Ditto.
        * UIProcess/API/Cocoa/WKWebViewInternal.h: Ditto.
        * UIProcess/API/ios/WKViewIOS.mm: Ditto.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: Include header ServersSPI.h instead of directly including private headers.
        Also, ignore deprecated declaration for bootstrap_register2().
        * UIProcess/ios/PageClientImplIOS.mm: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/ProcessAssertionIOS.mm: Include header BKSProcessAssertionSPI.h instead of directly including private headers.
        * UIProcess/ios/SmartMagnificationController.mm: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/ViewGestureControllerIOS.mm: Ditto.
        * UIProcess/ios/WKActionSheet.mm: Ditto.
        * UIProcess/ios/WKActionSheetAssistant.h: Include header DataDetectorsUISPI.h instead of directly including private headers.
        * UIProcess/ios/WKActionSheetAssistant.mm: Include headers TCCSPI.h and UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/WKContentView.mm: Include header UIKitSPI.h instead of directly including private headers. Also, move CALayer SPI
        forward declarations to QuartzCoreSPI.h
        * UIProcess/ios/WKContentViewInteraction.h: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/WKContentViewInteraction.mm: Ditto. Also, include headers CoreGraphicsSPI.h, CoreText/CTFont.h, DataDetectorsUISPI.h,
        ManagedConfigurationSPI.h, TextInputSPI.h.
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/WKPDFPageNumberIndicator.mm: Ditto.
        * UIProcess/ios/WKPDFView.h: Include header CorePDFSPI.h instead of directly including private headers.
        * UIProcess/ios/WKPDFView.mm: Ditto. Also, remove header _UIHighlightViewSPI.h and include UIKitSPI.h.
        * UIProcess/ios/WKScrollView.h: Include header UIKitSPI.h instead of directly including private headers.
        * UIProcess/ios/WKSyntheticClickTapGestureRecognizer.h: Ditto.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm: Ditto.
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: Ditto.
        * UIProcess/ios/forms/WKFileUploadPanel.mm: Ditto.
        * UIProcess/ios/forms/WKFormInputControl.mm: Ditto.
        * UIProcess/ios/forms/WKFormPopover.mm: Ditto.
        * UIProcess/ios/forms/WKFormSelectControl.h: Ditto.
        * UIProcess/ios/forms/WKFormSelectControl.mm: Ditto.
        * UIProcess/ios/forms/WKFormSelectPicker.mm: Ditto.
        * UIProcess/ios/forms/WKFormSelectPopover.mm: Ditto.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm: Include headers ServersSPI.h and GraphicsServicesSPI.h instead of
        directly including private headers.
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm: Include header GraphicsServicesSPI.h instead of directly
        including private headers.
        * config.h: Moved EXTERN_C_BEGIN and EXTERN_C_END macros from here to file wtf/Compiler.h and renamed them to WTF_EXTERN_C_BEGIN
        and  WTF_EXTERN_C_END, respectively, so that we can make use of them in SPI wrapper headers (e.g. UIKitSPI.h).

2015-01-07  Beth Dakin  <bdakin@apple.com>

        Adopt delegate callbacks so that standardQuickLookMenuItem does not obscure the 
        link
        https://bugs.webkit.org/show_bug.cgi?id=140206
        -and corresponding-
        rdar://problem/19300492

        Reviewed by Tim Horton.

        Providing and item frame will ensure that the original link is not obscured.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController menuItem:itemFrameForPoint:]):

        For now use a max size that is smaller than the WKView, with the screen’s aspect 
        ratio, and scaled down.
        (-[WKImmediateActionController menuItem:maxSizeForPoint:]):

2015-01-07  Alexey Proskuryakov  <ap@apple.com>

        Release build fix.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:

2015-01-06  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Secondary WebKit processes get re-exec'ed twice when running under ASan
        https://bugs.webkit.org/show_bug.cgi?id=140175

        Reviewed by Sam Weinig.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::addDYLDEnvironmentAdditions):
        If the main process is ASanified, add the ASan dynamic library to DYLD_INSERT_LIBRARIES.
        This avoids an extra re-exec, which is very annoying when debugging.
        The library is linked in using @rpath, so the only reliable way to find its location
        is by examining binary images loaded into the current process.

2015-01-07  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] m_layer member in GraphicsLayerTextureMapper is always non-null
        https://bugs.webkit.org/show_bug.cgi?id=140135

        Reviewed by Darin Adler.

        GraphicsLayerTextureMapper::layer() now returns a reference,
        so the call sites are updated.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):
        (WebKit::LayerTreeHostGtk::layerFlushTimerFired):
        (WebKit::LayerTreeHostGtk::compositeLayersToContext):

2015-01-06  Gwang Yoon Hwang  <yoon@igalia.com>

        Remove the remaining uses of OwnPtr in threaded compositor.
        https://bugs.webkit.org/show_bug.cgi?id=140172

        Reviewed by Sam Weinig.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
        (WebKit::ThreadedCompositor::runCompositingThread):
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:

2015-01-06  Timothy Horton  <timothy_horton@apple.com>

        View state change callbacks are sometimes dropped on the floor
        https://bugs.webkit.org/show_bug.cgi?id=140156
        <rdar://problem/19255417>

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchViewStateChange):
        Always send SetViewState to the Web process if we have any
        registered view state change callbacks. Otherwise, if nothing changed,
        we can end up never calling the callback.

2015-01-06  Timothy Horton  <timothy_horton@apple.com>

        Make explicit which TextIndicator animations are driven manually, and which run automatically
        https://bugs.webkit.org/show_bug.cgi?id=140113
        <rdar://problem/19383425>

        Reviewed by Darin Adler.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Delete an inaccurate comment.

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Remove now unused IndexedDB code
        https://bugs.webkit.org/show_bug.cgi?id=140128

        Reviewed by Darin Adler.

        Remove a function.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createIDBFactoryBackend): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2015-01-06  Darin Adler  <darin@apple.com>

        Fix race in FindController code
        https://bugs.webkit.org/show_bug.cgi?id=140114

        Reviewed by Anders Carlsson.

        No idea how to reproduce this. Just ran into the crash in my local testing.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString): Use a RefPtr to guarantee the FindController is
        not deleted while a this pointer is stored in a function.

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Add a DatabaseProvider subclass in WebKit2 and use it for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=140108

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Databases/WebDatabaseProvider.cpp: Added.
        (WebKit::databaseProviders):
        (WebKit::WebDatabaseProvider::getOrCreate):
        (WebKit::WebDatabaseProvider::WebDatabaseProvider):
        (WebKit::WebDatabaseProvider::~WebDatabaseProvider):
        (WebKit::WebDatabaseProvider::createIDBFactoryBackend):
        * WebProcess/Databases/WebDatabaseProvider.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2015-01-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: inspector view top inset should not include height of web view banners
        https://bugs.webkit.org/show_bug.cgi?id=140076

        Reviewed by Anders Carlsson.

        Added _totalHeightOfBanners property to WKView, which is used by the WebInspectorProxy
        to calculate the correct vertical position of the Inspector view frame. The browser is
        responsible for setting the property value whenever banners are installed or uninstalled from
        the view.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setTotalHeightOfBanners:]):
        (-[WKView _totalHeightOfBanners]):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):

2015-01-05  Timothy Horton  <timothy_horton@apple.com>

        Implicitly dismissed DD popovers don't clear immediate action state, prematurely dismissing the next DD highlight
        https://bugs.webkit.org/show_bug.cgi?id=140088
        <rdar://problem/19298391>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _menuItemForDataDetectedText]):
        Instead of just tearing down the TextIndicator, clear all state.

2015-01-05  Csaba Osztrogonác  <ossy@webkit.org>

        One more URTBF after r177917.

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

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Get rid of PassRefPtr from IPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=140092

        Reviewed by Andreas Kling.

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::DatabaseToWebProcessConnection):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::createServerConnection):
        (IPC::Connection::createClientConnection):
        (IPC::Connection::Connection):
        * Platform/IPC/Connection.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::WebProcessConnection):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::initialize):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::WebToDatabaseProcessConnection):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::createInspectorPage):
        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::establishConnection):

2015-01-05  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r177917.

        * UIProcess/WebBatteryManagerProxy.h:
        * UIProcess/WebVibrationProxy.h:

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Clean up Connection::SyncMessageState
        https://bugs.webkit.org/show_bug.cgi?id=140087

        Reviewed by Andreas Kling.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::syncMessageStateMapMutex):
        Change this to return an std::mutex and use std::call_once to initialize it properly.

        (IPC::Connection::SyncMessageState::getOrCreate):
        Return a Ref.

        (IPC::Connection::SyncMessageState::~SyncMessageState):
        Use an std::lock_guard.

        (IPC::Connection::SyncMessageState::processIncomingMessage):
        Replace a bind call with a lambda.

        (IPC::Connection::SyncMessageState::dispatchMessages):
        ConnectionAndIncomingMessage now holds a Ref<Connection>.

        (IPC::Connection::SyncMessageState::dispatchMessageAndResetDidScheduleDispatchMessagesForConnection):
        Change Connection to a reference.

        (IPC::Connection::processIncomingMessage):
        Change Connection to a reference.

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Clean up the storage manager some more
        https://bugs.webkit.org/show_bug.cgi?id=140086

        Reviewed by Andreas Kling.

        Use lambdas instead of WTF::bind and get rid of a couple of internal functions.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit::StorageManager::destroySessionStorageNamespace):
        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnection):
        (WebKit::StorageManager::cloneSessionStorageNamespace):
        (WebKit::StorageManager::processWillCloseConnection):
        (WebKit::StorageManager::createSessionStorageNamespaceInternal): Deleted.
        (WebKit::StorageManager::destroySessionStorageNamespaceInternal): Deleted.
        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnectionInternal): Deleted.
        (WebKit::StorageManager::cloneSessionStorageNamespaceInternal): Deleted.
        (WebKit::StorageManager::invalidateConnectionInternal): Deleted.
        * UIProcess/Storage/StorageManager.h:

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Change more connection pointers to references
        https://bugs.webkit.org/show_bug.cgi?id=140085

        Reviewed by Andreas Kling.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::addListener):
        (WebKit::StorageManager::StorageArea::removeListener):
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::createTransientLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        (WebKit::StorageManager::getValues):
        (WebKit::StorageManager::setItem):
        (WebKit::StorageManager::removeItem):
        (WebKit::StorageManager::clear):
        (WebKit::StorageManager::applicationWillTerminate):
        (WebKit::StorageManager::invalidateConnectionInternal):
        (WebKit::StorageManager::findStorageArea):
        * UIProcess/Storage/StorageManager.h:

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Change more of the IPC code to take connections by reference
        https://bugs.webkit.org/show_bug.cgi?id=140083

        Reviewed by Andreas Kling.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::didReceiveMessage):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::didReceiveMessage):
        (WebKit::DatabaseToWebProcessConnection::didReceiveSyncMessage):
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkResourceLoader.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::dispatchSyncMessage):
        (IPC::Connection::dispatchMessage):
        * Platform/IPC/Connection.h:
        (IPC::Connection::waitForAndDispatchImmediately):
        * Platform/IPC/MessageReceiver.h:
        (IPC::MessageReceiver::didReceiveSyncMessage):
        * Platform/IPC/MessageReceiverMap.cpp:
        (IPC::MessageReceiverMap::dispatchMessage):
        (IPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/IPC/MessageReceiverMap.h:
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didReceiveMessage):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * PluginProcess/WebProcessConnection.h:
        * Scripts/webkit/messages.py:
        (async_message_statement):
        (sync_message_statement):
        (generate_message_handler):
        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::dispatchMessage):
        (WebKit::ChildProcessProxy::dispatchSyncMessage):
        * Shared/ChildProcessProxy.h:
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::didReceiveSyncMessage):
        * Shared/Plugins/NPRemoteObjectMap.h:
        * Shared/WebConnection.h:
        * Shared/mac/SecItemShim.h:
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::didReceiveMessage):
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        (WebKit::NetworkProcessProxy::didReceiveSyncMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebApplicationCacheManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebDatabaseManagerProxy.h:
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebGeolocationManagerProxy.h:
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebMediaCacheManagerProxy.h:
        * UIProcess/WebOriginDataManagerProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPasteboardProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::dispatchMessage):
        (WebKit::WebProcessPool::dispatchSyncMessage):
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebResourceCacheManagerProxy.h:
        * UIProcess/ios/SmartMagnificationController.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/SecItemShimProxy.h:
        * UIProcess/mac/ViewGestureController.h:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::didReceiveMessage):
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::didReceiveMessage):
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/Geolocation/WebGeolocationManager.h:
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        * WebProcess/MediaCache/WebMediaCacheManager.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Notifications/WebNotificationManager.h:
        * WebProcess/OriginData/WebOriginDataManager.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveMessage):
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Storage/StorageAreaMap.h:
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.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:
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPageGroupProxy.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        * WebProcess/ios/WebVideoFullscreenManager.h:

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Pass IPC::Connection by reference to IPC message handlers
        https://bugs.webkit.org/show_bug.cgi?id=140082

        Reviewed by Darin Adler.

        * Platform/IPC/HandleMessage.h:
        (IPC::callMemberFunctionImpl):
        (IPC::callMemberFunction):
        (IPC::handleMessage):
        (IPC::handleMessageDelayed):
        * Scripts/webkit/messages.py:
        (async_message_statement):
        (sync_message_statement):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::createTransientLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        (WebKit::StorageManager::getValues):
        (WebKit::StorageManager::setItem):
        (WebKit::StorageManager::removeItem):
        (WebKit::StorageManager::clear):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::didPostMessage):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::startUpdating):
        (WebKit::WebGeolocationManagerProxy::stopUpdating):
        (WebKit::WebGeolocationManagerProxy::setEnableHighAccuracy):
        * UIProcess/WebGeolocationManagerProxy.h:
        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::WebOriginDataManagerProxy::didGetOrigins):
        (WebKit::WebOriginDataManagerProxy::didDeleteEntries):
        (WebKit::WebOriginDataManagerProxy::didDeleteAllEntries):
        * UIProcess/WebOriginDataManagerProxy.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::handleMessage):
        (WebKit::WebProcessPool::handleSynchronousMessage):
        * UIProcess/WebProcessPool.h:
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::secItemRequest):
        * UIProcess/mac/SecItemShimProxy.h:

2015-01-04  Anders Carlsson  <andersca@apple.com>

        Clean up some of the IPC code
        https://bugs.webkit.org/show_bug.cgi?id=140057

        Reviewed by Antti Koivisto.

        Use std::mutex instead of WTF::Mutex. Change a couple of pointers to references in the connection client.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::didClose):
        (WebKit::DatabaseProcess::didReceiveInvalidMessage):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::didClose):
        (WebKit::DatabaseToWebProcessConnection::didReceiveInvalidMessage):
        * DatabaseProcess/DatabaseToWebProcessConnection.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::didReceiveInvalidMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::didReceiveInvalidMessage):
        * NetworkProcess/NetworkProcess.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::sendMessage):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::sendOutgoingMessages):
        (IPC::Connection::dispatchDidReceiveInvalidMessage):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::dispatchMessage):
        (IPC::Connection::dispatchOneMessage):
        * Platform/IPC/Connection.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didClose):
        (WebKit::PluginProcess::didReceiveInvalidMessage):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didClose):
        (WebKit::WebProcessConnection::didReceiveInvalidMessage):
        * PluginProcess/WebProcessConnection.h:
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::didClose):
        (WebKit::DatabaseProcessProxy::didReceiveInvalidMessage):
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::didReceiveInvalidMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didClose):
        (WebKit::PluginProcessProxy::didReceiveInvalidMessage):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::didReceiveInvalidMessage):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        (WebKit::WebToDatabaseProcessConnection::didClose):
        (WebKit::WebToDatabaseProcessConnection::didReceiveInvalidMessage):
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::didReceiveInvalidMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didClose):
        (WebKit::PluginProcessConnection::didReceiveInvalidMessage):
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspectorUI.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didClose):
        (WebKit::WebProcess::didReceiveInvalidMessage):
        * WebProcess/WebProcess.h:

2015-01-01  Sam Weinig  <sam@webkit.org>

        Remove GroupSettings
        https://bugs.webkit.org/show_bug.cgi?id=140037

        Reviewed by Dan Bernstein.

        Remove unused databaseDirectoryIdentifier parameters.

        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp:
        (WebKit::WebIDBFactoryBackend::WebIDBFactoryBackend):
        (WebKit::WebIDBFactoryBackend::getDatabaseNames):
        (WebKit::WebIDBFactoryBackend::deleteDatabase):
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h:
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createIDBFactoryBackend):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2015-01-01  Jeff Miller  <jeffm@apple.com>

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

        Reviewed by Darin Adler.

        * 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.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-iOS.plist:
        * PluginProcess/EntryPoint/mac/LegacyProcess/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.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist:
        * mac/Info-WebKit2.plist:

2014-12-31  Sam Weinig  <sam@webkit.org>

        Move scrolling code off of WTF::bind
        https://bugs.webkit.org/show_bug.cgi?id=140019

        Reviewed by Darin Adler.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        (WebKit::EventDispatcher::touchEvent):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):

2015-01-01  Darin Adler  <darin@apple.com>

        We often misspell identifier as "identifer"
        https://bugs.webkit.org/show_bug.cgi?id=140025

        Reviewed by Michael Saboff.

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        * UIProcess/WebPageGroup.cpp:
        (WebKit::pageGroupData):
        (WebKit::WebPageGroup::WebPageGroup):
        * UIProcess/WebPageGroup.h:
        (WebKit::WebPageGroup::identifier):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::createInspectorPage):
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebKit::WebPageGroupProxy::identifier):
        Fix misspellings.

2014-12-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK] Suppress unused parameter warnings in ui clients
        https://bugs.webkit.org/show_bug.cgi?id=140012

        Drop the parameter name of WebKitUIClient::isPlayingAudioDidChange
        to suppress warnings.

        Reviewed by Benjamin Poulain.

        * UIProcess/API/gtk/WebKitUIClient.cpp:

2014-12-31  Sam Weinig  <sam@webkit.org>

        Remove the remaining uses of OwnPtr from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=140017

        Reviewed by Dan Bernstein.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.h:
        (WebKit::RemoteScrollingCoordinatorTransaction::setStateTreeToEncode):
        (WebKit::RemoteScrollingCoordinatorTransaction::scrollingStateTree):
        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.mm:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::updateScrollingTree):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]):
        (-[WKPrintingView _askPageToComputePageRects]):
        (-[WKPrintingView _drawPreview:]):
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:

2014-12-31  Bartlomiej Gajda  <b.gajda@samsung.com>

        Fix build warnings after r177792.
        https://bugs.webkit.org/show_bug.cgi?id=140005.

        Reviewed by Anders Carlsson.

        Add UNUSED_PARAM(connection) for async messages.

        * Scripts/webkit/messages.py:
        (generate_message_handler):

2014-12-31  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for the GTK port.

        Move the ArgumentCodersGtk.h inclusion from WebPageProxy.cpp to
        WebPageProxy.h. This makes GTK-specific IPC coders available to
        WebPageProxyMessageReceiver, fixing a build error due to missing
        ArgumentCoder template specializations for WebCore::DragData type
        that is used in the GTK-specific StartDrag message.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:

2014-12-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177824 and r177826.
        https://bugs.webkit.org/show_bug.cgi?id=140011

        The new test crashes (Requested by ap on #webkit).

        Reverted changesets:

        "Too large plugins are crashing."
        https://bugs.webkit.org/show_bug.cgi?id=139856
        http://trac.webkit.org/changeset/177824

        "Fix bug number typo in the previous commit."
        http://trac.webkit.org/changeset/177826

2014-12-30  Gabor Rapcsanyi  <rgabor@webkit.org>

        Too large plugins are crashing.
        https://bugs.webkit.org/show_bug.cgi?id=139868

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::updateBackingStore): Return false if backingStore cannot be allocated.

2014-12-30  Anders Carlsson  <andersca@apple.com>

        Transient local storage namespaces need to ref their storage areas
        https://bugs.webkit.org/show_bug.cgi?id=140006
        <rdar://problem/19225389>

        Reviewed by Sam Weinig.

        We need to keep transient storage areas around even if they have no active connections,
        so use a RefPtr instead of a raw pointer. This matches what we do for session storage namespaces.

        * UIProcess/Storage/StorageManager.cpp:

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Remove unneeded StorageNamespace functions
        https://bugs.webkit.org/show_bug.cgi?id=139997

        Reviewed by Sam Weinig.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::close): Deleted.
        (WebKit::StorageNamespaceImpl::clearOriginForDeletion): Deleted.
        (WebKit::StorageNamespaceImpl::clearAllOriginsForDeletion): Deleted.
        (WebKit::StorageNamespaceImpl::sync): Deleted.
        (WebKit::StorageNamespaceImpl::closeIdleLocalStorageDatabases): Deleted.
        * WebProcess/Storage/StorageNamespaceImpl.h:

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Move storage code from WebCore to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=139558

        Reviewed by Darin Adler.

        * WebProcess/WebProcess.cpp:

2014-12-29  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS build.

        * WebProcess/WebPage/ios/WebPageIOS.mm:

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Another iOS build fix.

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

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Turn on transient local storage support again
        https://bugs.webkit.org/show_bug.cgi?id=139995

        Reviewed by Sam Weinig.

        Using transient local storage caused weird crashes in the UI process so that change had to
        be backed out - let's turn it on and see if it still happens.

        * WebProcess/Storage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Remove more old coder code gunk.

        Rubber-stamped by Sam Weinig.

        * Scripts/webkit/messages.py:
        (argument_coder_headers_for_type):
        (handler_function): Deleted.

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Try to fix the iOS build.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAssistingNode):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::elementDidFocus):

2014-12-29  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r177805.

        * CMakeLists.txt:

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Remove the old user message coder code
        https://bugs.webkit.org/show_bug.cgi?id=139994

        Reviewed by Sam Weinig.

        * Platform/IPC/HandleMessage.h:
        (IPC::callMemberFunctionImpl): Deleted.
        (IPC::callMemberFunction): Deleted.
        (IPC::handleMessageVariadic): Deleted.
        * Scripts/webkit/messages.py:
        (decode_type):
        (async_message_statement):
        (sync_message_statement):
        * Shared/UserMessageCoders.h: Removed.
        * Shared/mac/ObjCObjectGraphCoders.h: Removed.
        * Shared/mac/ObjCObjectGraphCoders.mm: Removed.
        * UIProcess/WebConnectionToWebProcess.cpp:
        * UIProcess/WebContextUserMessageCoders.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebProcessPool.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h: Removed.
        * WebProcess/WebConnectionToUIProcess.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/WebContextMenu.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebProcess.cpp:

2014-12-29  Sam Weinig  <sam@webkit.org>

        Move WebPasteboardProxy from Shared to UIProcess, where it should have been all along
        Rubber-stamped by Anders Carlsson.

        * Shared/WebPasteboardProxy.cpp: Removed.
        * Shared/WebPasteboardProxy.h: Removed.
        * Shared/WebPasteboardProxy.messages.in: Removed.
        * UIProcess/WebPasteboardProxy.cpp: Copied from Shared/WebPasteboardProxy.cpp.
        * UIProcess/WebPasteboardProxy.h: Copied from Shared/WebPasteboardProxy.h.
        * UIProcess/WebPasteboardProxy.messages.in: Copied from Shared/WebPasteboardProxy.messages.in.
        * WebKit2.xcodeproj/project.pbxproj:

2014-12-29  Sam Weinig  <sam@webkit.org>

        Try to fix the iOS build.

        * Shared/WebPasteboardProxy.h:

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Convert injected bundle message posting to UserData
        https://bugs.webkit.org/show_bug.cgi?id=139993

        Reviewed by Sam Weinig.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        (WebKit::WebProcessPool::postMessageToInjectedBundle):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::handleInjectedBundleMessage):
        (WebKit::WebProcess::postInjectedBundleMessage): Deleted.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2014-12-29  Sam Weinig  <sam@webkit.org>

        Try to fix the iOS build.

        * Shared/WebPasteboardProxy.h:

2014-12-29  Csaba Osztrogonác  <ossy@webkit.org>

        One more speculative buildfix after r177794.

        * CMakeLists.txt:

2014-12-29  Sam Weinig  <sam@webkit.org>

        Try to fix the iOS build.

        * Shared/WebPasteboardProxy.h:

2014-12-29  Csaba Osztrogonác  <ossy@webkit.org>

        Speculative buildfix after r177793.

        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-12-29  Csaba Osztrogonác  <ossy@webkit.org>

        Speculative buildfix after r177794.

        * CMakeLists.txt:

2014-12-29  Sam Weinig  <sam@webkit.org>

        Removes some unnecessary use of LegacyReceiver
        https://bugs.webkit.org/show_bug.cgi?id=139992

        Reviewed by Anders Carlsson.

        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::didReceiveMessage): Deleted.
        * Shared/WebConnection.h:
        * Shared/WebConnection.messages.in:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::didReceiveMessage): Deleted.
        (WebKit::WebProcessPool::didReceiveSyncMessage): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
        Remove unnecessary use of LegacyReceiver.

        * UIProcess/WebPageProxy.h:
        Remove declarations for functions that don't exist.

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Convert all variadic web process messages to UserData
        https://bugs.webkit.org/show_bug.cgi?id=139991

        Reviewed by Sam Weinig.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        (WebKit::WebPageProxy::loadPlainTextString):
        (WebKit::WebPageProxy::loadWebArchiveData):
        (WebKit::WebPageProxy::postMessageToInjectedBundle):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::loadString):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadHTMLString):
        (WebKit::WebPage::loadAlternateHTMLString):
        (WebKit::WebPage::loadPlainTextString):
        (WebKit::WebPage::loadWebArchiveData):
        (WebKit::WebPage::postInjectedBundleMessage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Convert all variadic WebProcessProxy message over to UserData
        https://bugs.webkit.org/show_bug.cgi?id=139990

        Reviewed by Sam Weinig.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willGoToBackForwardListItem):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
        (WebKit::WebPageProxy::didFinishLoadForFrame):
        (WebKit::WebPageProxy::didFailLoadForFrame):
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
        (WebKit::WebPageProxy::didReceiveTitleForFrame):
        (WebKit::WebPageProxy::didFirstLayoutForFrame):
        (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
        (WebKit::WebPageProxy::didLayout):
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        (WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
        (WebKit::WebPageProxy::didRunInsecureContentForFrame):
        (WebKit::WebPageProxy::didDetectXSSForFrame):
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        (WebKit::WebPageProxy::decidePolicyForNewWindowAction):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseSync):
        (WebKit::WebPageProxy::unableToImplementPolicy):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        (WebKit::WebPageProxy::didBeginTrackingPotentialLongMousePress):
        (WebKit::WebPageProxy::didRecognizeLongMousePress):
        (WebKit::WebPageProxy::didCancelTrackingPotentialLongMousePress):
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::internalShowContextMenu):
        (WebKit::WebPageProxy::didPerformActionMenuHitTest):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showSelectionServiceMenu):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::mouseDidMoveOverElement):
        (WebKit::WebChromeClient::didBeginTrackingPotentialLongMousePress):
        (WebKit::WebChromeClient::didRecognizeLongMousePress):
        (WebKit::WebChromeClient::didCancelTrackingPotentialLongMousePress):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::detachedFromParent2):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidPushStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidReplaceStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidPopStateWithinPage):
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchUnableToImplementPolicy):
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        (WebKit::WebFrameLoaderClient::shouldGoToHistoryItem):
        (WebKit::WebFrameLoaderClient::didDisplayInsecureContent):
        (WebKit::WebFrameLoaderClient::didRunInsecureContent):
        (WebKit::WebFrameLoaderClient::didDetectXSS):
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):

2014-12-29  Sam Weinig  <sam@webkit.org>

        Move Pasteboard code out of WebProcessPool and into its own singleton class
        https://bugs.webkit.org/show_bug.cgi?id=139987

        Reviewed by Anders Carlsson.

        * DerivedSources.make:
        * Shared/WebPasteboardProxy.cpp: Added.
        (WebKit::WebPasteboardProxy::shared):
        (WebKit::WebPasteboardProxy::WebPasteboardProxy):
        (WebKit::WebPasteboardProxy::addWebProcessProxy):
        * Shared/WebPasteboardProxy.h: Added.
        * Shared/WebPasteboardProxy.messages.in: Added.
        * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm: Added.
        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::didReceiveSyncMessage):
        (WebKit::WebProcessPool::dummy): Deleted.
        * UIProcess/WebProcessPool.h:
        * UIProcess/WebProcessPool.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Use UserData for bundle initialization data
        https://bugs.webkit.org/show_bug.cgi?id=139989

        Reviewed by Sam Weinig.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::~WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::createNewWebProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-12-28  Anders Carlsson  <andersca@apple.com>

        Use UserData when sending messages to the process pool
        https://bugs.webkit.org/show_bug.cgi?id=139978

        Reviewed by Sam Weinig.

        * Scripts/webkit/messages.py:
        (generate_message_handler):
        Include the connection parameter for legacy receivers as well.

        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        Remove this, it's no longer needed.

        * UIProcess/WebProcessPool.cpp:
        (WebKit::WebProcessPool::didReceiveMessage):
        No need to special case the postMessage message.

        (WebKit::WebProcessPool::didReceiveSyncMessage):
        No need to special case the postSynchronousMessageMessage message.

        (WebKit::WebProcessPool::handleMessage):
        Convert handles to objects and call didReceiveMessageFromInjectedBundle.

        (WebKit::WebProcessPool::handleSynchronousMessage):
        Convert handles to objects, call didReceiveSynchronousMessageFromInjectedBundle, and then
        convert objects back to handles in the reply.

        (WebKit::WebProcessPool::didReceiveMessageFromInjectedBundle): Deleted.
        (WebKit::WebProcessPool::didReceiveSynchronousMessageFromInjectedBundle): Deleted.
        (WebKit::WebProcessPool::dummy): Deleted.
        * UIProcess/WebProcessPool.h:
        Add handleMessage and handleSynchronousMessage message handlers.

        * UIProcess/WebProcessPool.messages.in:
        Add new messages.

        * WebKit2.xcodeproj/project.pbxproj:
        Remove a now unused file.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        Convert objects to handles in the message body and then send the HandleMessage to the UI process.

        (WebKit::InjectedBundle::postSynchronousMessage):
        Convert objects to handles in the message body, send the HandleSynchronousMessage message to the UI process,
        and then convert handles back to objects in the reply.

2014-12-28  Anders Carlsson  <andersca@apple.com>

        Transform nested objects inside arrays
        https://bugs.webkit.org/show_bug.cgi?id=139976

        Reviewed by Oliver Hunt.

        Call transformGraph on each element so that we'll transform other nested objects correctly.

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

2014-12-27  Dan Bernstein  <mitz@apple.com>

        iOS build fix after r177765.

        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::ObjCObjectGraph::encode):

2014-12-27  Anders Carlsson  <andersca@apple.com>

        Switch WebConnection over to sending objects with UserData
        https://bugs.webkit.org/show_bug.cgi?id=139967

        Reviewed by Oliver Hunt.

        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::postMessage):
        No need to construct the message manually anymore.

        (WebKit::WebConnection::handleMessage):
        No need to decode the message manually, just get the object from the UserData message body,
        convert any handles to objects, and dispatch the message.

        * Shared/WebConnection.h:
        Remove now unused members.

        * Shared/WebConnection.messages.in:
        Give HandleMessage a proper signature.

        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::transformHandlesToObjects):
        (WebKit::WebConnectionToWebProcess::transformObjectsToHandles):
        Call the WebProcessProxy version.

        (WebKit::WebConnectionToWebProcess::encodeMessageBody): Deleted.
        (WebKit::WebConnectionToWebProcess::decodeMessageBody): Deleted.

        * UIProcess/WebConnectionToWebProcess.h:
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::encodeMessageBody): Deleted.
        (WebKit::WebConnectionToUIProcess::decodeMessageBody): Deleted.
        * WebProcess/WebConnectionToUIProcess.h:
        Delete more unused members.

2014-12-27  Anders Carlsson  <andersca@apple.com>

        Encode and decode WKTypeRefWrapper objects
        https://bugs.webkit.org/show_bug.cgi?id=139966

        Reviewed by Oliver Hunt.

        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        * Shared/UserData.h:
        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::typeFromObject):
        (WebKit::ObjCObjectGraph::encode):
        (WebKit::ObjCObjectGraph::decode):

2014-12-27  Anders Carlsson  <andersca@apple.com>

        Implement encoding and decoding of ObjCObjectGraph objects
        https://bugs.webkit.org/show_bug.cgi?id=139965

        Reviewed by Oliver Hunt.

        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        (WebKit::UserData::decode):
        * Shared/mac/ObjCObjectGraph.h:
        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::typeFromObject):
        (WebKit::ObjCObjectGraph::encode):
        (WebKit::ObjCObjectGraph::decode):

2014-12-27  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKWebProcessPlugInLoadDelegate uses the deprecated WKRenderingProgressEvents enum
        https://bugs.webkit.org/show_bug.cgi?id=139964

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKRenderingProgressEventsInternal.h: Removed.

        * Shared/API/Cocoa/_WKRenderingProgressEvents.h: Added. Moved the enum definition from
        WKWebViewPrivate.h to here.

        * Shared/API/Cocoa/_WKRenderingProgressEventsInternal.h: Added.
        (renderingProgressEvents): Moved from NavigationState.mm to here.

        * UIProcess/API/Cocoa/WKBrowsingContextController.h: Removed observedRenderingProgressEvents
        property declaration.
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (layoutMilestones): Deleted.
        (-[WKBrowsingContextController setObservedRenderingProgressEvents:]): Deleted. This is not
        needed for binary compatibility.
        (didLayout): Deleted.
        (setUpPageLoaderClient): Removed setting up didLayout callback.
        * UIProcess/API/Cocoa/WKBrowsingContextLoadDelegate.h: Removed unused delegate method.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Import definition of _WKRenderingProgressEvents
        from new header.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::renderingProgressEvents): Moved into its own header.

        * WebKit2.xcodeproj/project.pbxproj: Updated for file additions and removeals, and moved
        WKRenderingProgressEvents.h into a new Deprecated group.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h: Changed the type of
        a delegate method parameter to _WKRenderingProgressEvents.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didLayout): Pass the new type.

2014-12-26  Conrad Shultz  <conrad_shultz@apple.com>

        Safari build crashes when "zooming into"/choosing a tab from tab view
        https://bugs.webkit.org/show_bug.cgi?id=139934

        Reviewed by Dan Bernstein.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setIgnoresNonWheelEvents:]):
        Trying to add a nil gesture recognizer raises an exception. Stop assuming that a
        gesture recognizer is non-nil.

2014-12-26  Anders Carlsson  <andersca@apple.com>

        Handle more types in the UserData encode/decode functions
        https://bugs.webkit.org/show_bug.cgi?id=139959

        Reviewed by Dan Bernstein.

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

2014-12-26  Anders Carlsson  <andersca@apple.com>

        Move handle encoding functions to their respective implementation files
        https://bugs.webkit.org/show_bug.cgi?id=139957

        Reviewed by Dan Bernstein.

        * Shared/API/APIFrameHandle.cpp:
        (API::FrameHandle::encode):
        (API::FrameHandle::decode):
        * Shared/API/APIFrameHandle.h:
        * Shared/API/APIPageGroupHandle.cpp:
        (API::PageGroupHandle::PageGroupHandle):
        (API::PageGroupHandle::encode):
        (API::PageGroupHandle::decode):
        * Shared/API/APIPageGroupHandle.h:
        * Shared/API/APIPageHandle.cpp:
        (API::PageHandle::encode):
        (API::PageHandle::decode):
        * Shared/API/APIPageHandle.h:
        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        (WebKit::UserData::decode):

2014-12-26  Anders Carlsson  <andersca@apple.com>

        Add the notion of auto-converting page and frame handles
        https://bugs.webkit.org/show_bug.cgi?id=139954

        Reviewed by Dan Bernstein.

        This makes it possible to tell the difference between page and frame handles that
        should be converted to their respective UI or web process object representations
        and handles that should stay the same (for the modern API for example).
        
        * Shared/API/APIFrameHandle.cpp:
        (API::FrameHandle::create):
        (API::FrameHandle::createAutoconverting):
        (API::FrameHandle::FrameHandle):
        * Shared/API/APIFrameHandle.h:
        (API::FrameHandle::isAutoconverting):
        * Shared/API/APIPageHandle.cpp:
        (API::PageHandle::create):
        (API::PageHandle::createAutoconverting):
        (API::PageHandle::PageHandle):
        * Shared/API/APIPageHandle.h:
        (API::PageHandle::isAutoconverting):
        * Shared/API/Cocoa/_WKFrameHandle.mm:
        (-[_WKFrameHandle initWithCoder:]):
        * Shared/UserData.cpp:
        (WebKit::shouldTransform):
        * Shared/UserData.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::printFrame):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame handle]):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):

2014-12-26  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Some modern SPI changes have missing or incorrect availability annotations
        https://bugs.webkit.org/show_bug.cgi?id=139940

        Reviewed by Darin Adler.

        * Shared/API/c/WKDeclarationSpecifiers.h: Renamed WK_DEPRECATED to WK_C_DEPRECATED.

        * Shared/API/Cocoa/WKFoundation.h: Define WK_DEPRECATED when API availability is not enabled
        to mean that the declaration is currently deprecated.

        * Shared/API/c/WKConnectionRef.h: Updated for the renaming of the existing WK_DEPRECATED to
        WK_C_DEPRECATED.
        * UIProcess/API/C/WKContext.h: Ditto.
        * UIProcess/API/C/WKContextConnectionClient.h: Ditto.
        * UIProcess/API/C/WKContextDownloadClient.h: Ditto.
        * UIProcess/API/C/WKContextHistoryClient.h: Ditto.
        * UIProcess/API/C/WKContextInjectedBundleClient.h: Ditto.
        * UIProcess/API/C/WKCookieManager.h: Ditto.
        * UIProcess/API/C/WKDatabaseManager.h: Ditto.
        * UIProcess/API/C/WKGeolocationManager.h: Ditto.
        * UIProcess/API/C/WKIconDatabase.h: Ditto.
        * UIProcess/API/C/WKNotificationProvider.h: Ditto.
        * UIProcess/API/C/WKPageContextMenuClient.h: Ditto.
        * UIProcess/API/C/WKPageFindClient.h: Ditto.
        * UIProcess/API/C/WKPageFindMatchesClient.h: Ditto.
        * UIProcess/API/C/WKPageFormClient.h: Ditto.
        * UIProcess/API/C/WKPageUIClient.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundle.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageBanner.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageContextMenuClient.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageDiagnosticLoggingClient.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageEditorClient.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageFormClient.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageFullScreenClient.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePolicyClient.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageResourceLoadClient.h: Ditto.
        * WebProcess/InjectedBundle/API/c/WKBundlePageUIClient.h: Ditto.

        * Shared/API/Cocoa/WKRenderingProgressEvents.h: Added missing availability annotation.

        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Changed to use WK_MAC_TBA and WK_IOS_TBA for
        _WKDebugOverlayRegions enum. Added availability annotations to new properties.

        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Added availability annotation to new method.

        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Annotated new method, changed Mac
        availability of iOS-only method to NA.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Added availability annotation to new enum value,
        new property, and new method. Added deprecation annotation to one method.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h: Annotated new method.

        * mac/rewrite-availability-macros.sh: Rewrite WK_DEPRECATED to NS_DEPRECATED.

2014-12-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19348208> REGRESSION (r177027): iOS builds use the wrong toolchain
        https://bugs.webkit.org/show_bug.cgi?id=139950

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig: Only define TOOLCHAINS when building for OS X, doing so
        in a manner that works with Xcode 5.1.1.

2014-12-25  Hunseop Jeong  <hs85.jeong@samsung.com>

        Fix build warning after r177700
        https://bugs.webkit.org/show_bug.cgi?id=139948

        Reviewed by Alexey Proskuryakov.

        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::transformHandlesToObjects):
        (WebKit::WebConnectionToWebProcess::transformObjectsToHandles):

2014-12-25  Chris Dumez  <cdumez@apple.com>

        [iOS] Log better using FeatureCounter why PageCache is failing due to pruned resources
        https://bugs.webkit.org/show_bug.cgi?id=139921

        Reviewed by Gavin Barraclough and Alexey Proskuryakov.

        Call PageCache::pruneToCapacityNow() instead of multiple calls to
        setCapacity() as it does exactly what we want. Also pass the new
        PrunedReason argument so help us do better logging.

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

2014-12-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177712 and r177717.
        https://bugs.webkit.org/show_bug.cgi?id=139944

        Caused flaky assertion failures (Requested by ap on #webkit).

        Reverted changesets:

        "[iOS] Log better using FeatureCounter why PageCache is
        failing due to pruned resources"
        https://bugs.webkit.org/show_bug.cgi?id=139921
        http://trac.webkit.org/changeset/177712

        "Unreviewed, fix build warning after r177712"
        http://trac.webkit.org/changeset/177717

2014-12-24  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WebKit private headers shouldn’t contain “inappropriate” macros
        https://bugs.webkit.org/show_bug.cgi?id=139942

        Reviewed by Darin Adler.

        * WebKit2.xcodeproj/project.pbxproj: In the Check For Inappropriate Macros in External
        Headers script build phase, check the PrivateHeaders directory as well.

2014-12-24  Dan Bernstein  <mitz@apple.com>

        Addressed a linker warning about the definition of a method in a category overridng a method from the class.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView(Private) _targetWindowForMovePreparation]): Deleted. This was identical to the
        definition in the main WKView implementation above.

2014-12-23  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Build fix after r177692
        https://bugs.webkit.org/show_bug.cgi?id=139919

        Reviewed by Gyuyoung Kim.

        This change addresses build failures introduced after r177692.

        * PlatformEfl.cmake: Renamed WebContextSoup to WebProcessPoolSoup.cpp
        * PlatformGTK.cmake: ditto.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/WebKitDownloadClient.cpp:
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp:
        (webkitFormSubmissionRequestCreate):
        (webkit_form_submission_request_get_text_fields):
        * UIProcess/API/gtk/WebKitFormSubmissionRequestPrivate.h:
        * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp:
        (didReceiveWebViewMessageFromInjectedBundle):
        (didReceiveMessageFromInjectedBundle):
        * UIProcess/API/gtk/WebKitSecurityManager.cpp:
        (registerSecurityPolicyForURIScheme):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed):
        (webkit_web_context_prefetch_dns):
        (webkitWebContextGetContext):
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_snapshot):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreate):
        (webkitWebViewBaseCreateWebPage):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/WebKitWindowProperties.cpp:
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/gtk/WebProcessPoolGtk.cpp: Renamed from Source/WebKit2/UIProcess/gtk/WebContextGtk.cpp.
        (WebKit::initInspectorServer):
        (WebKit::WebProcessPool::platformDefaultApplicationCacheDirectory):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInvalidateContext):
        (WebKit::WebProcessPool::platformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebProcessPool::platformDefaultIndexedDBDatabaseDirectory):
        (WebKit::WebProcessPool::platformDefaultIconDatabasePath):
        (WebKit::WebProcessPool::platformDefaultLocalStorageDirectory):
        (WebKit::WebProcessPool::platformDefaultMediaKeysStorageDirectory):
        (WebKit::WebProcessPool::platformDefaultDiskCacheDirectory):
        (WebKit::WebProcessPool::platformDefaultCookieStorageDirectory):
        (WebKit::WebProcessPool::setIgnoreTLSErrors):
        * UIProcess/soup/WebProcessPoolSoup.cpp: Renamed from Source/WebKit2/UIProcess/soup/WebContextSoup.cpp.
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp:
        (webkitWebExtensionDidReceiveMessage):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (didInitiateLoadForResource):
        (willSendRequestForFrame):
        (didReceiveResponseForResource):
        (didReceiveContentLengthForResource):
        (didFinishLoadForResource):
        (didFailLoadForResource):
        (webkitWebPageDidReceiveMessage):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPagePrivate.h:

2014-12-23  Dan Bernstein  <mitz@apple.com>

        iOS build fix

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup _geolocationProvider]):

2014-12-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Fix a lot of build break since r177692 
        https://bugs.webkit.org/show_bug.cgi?id=139932

        Unreviewed EFL build fix.

        Rename WebContext with WebProcessPool in EFL port files.

        * CMakeLists.txt:
        * UIProcess/API/efl/EwkView.cpp:
        * UIProcess/API/efl/ewk_context.cpp:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::WebView):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/Network/CustomProtocols/soup/CustomProtocolManagerProxySoup.cpp:
        (WebKit::CustomProtocolManagerProxy::CustomProtocolManagerProxy):
        (WebKit::CustomProtocolManagerProxy::startLoading):
        (WebKit::CustomProtocolManagerProxy::stopLoading):
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp:
        (WebKit::WebSoupCustomProtocolRequestManager::create):
        (WebKit::WebSoupCustomProtocolRequestManager::WebSoupCustomProtocolRequestManager):
        (WebKit::WebSoupCustomProtocolRequestManager::registerSchemeForCustomProtocol):
        (WebKit::WebSoupCustomProtocolRequestManager::unregisterSchemeForCustomProtocol):
        (WebKit::WebSoupCustomProtocolRequestManager::didReceiveResponse):
        (WebKit::WebSoupCustomProtocolRequestManager::didLoadData):
        (WebKit::WebSoupCustomProtocolRequestManager::didFailWithError):
        (WebKit::WebSoupCustomProtocolRequestManager::didFinishLoading):
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.h:
        * UIProcess/WebBatteryManagerProxy.cpp:
        (WebKit::WebBatteryManagerProxy::create):
        (WebKit::WebBatteryManagerProxy::WebBatteryManagerProxy):
        (WebKit::WebBatteryManagerProxy::providerDidChangeBatteryStatus):
        (WebKit::WebBatteryManagerProxy::providerUpdateBatteryStatus):
        * UIProcess/WebBatteryManagerProxy.h:
        * UIProcess/WebTextChecker.cpp:
        (WebKit::updateStateForAllContexts):
        * UIProcess/WebVibrationProxy.cpp:
        (WebKit::WebVibrationProxy::WebVibrationProxy):
        (WebKit::WebVibrationProxy::~WebVibrationProxy):
        * UIProcess/efl/RequestManagerClientEfl.h:
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebProcessPool::platformDefaultApplicationCacheDirectory):
        (WebKit::WebProcessPool::platformInitializeWebProcess):
        (WebKit::WebProcessPool::platformInvalidateContext):
        (WebKit::WebProcessPool::platformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebProcessPool::platformDefaultIndexedDBDatabaseDirectory):
        (WebKit::WebProcessPool::platformDefaultIconDatabasePath):
        (WebKit::WebProcessPool::platformDefaultLocalStorageDirectory):
        (WebKit::WebProcessPool::platformDefaultMediaKeysStorageDirectory):
        (WebKit::WebProcessPool::platformDefaultDiskCacheDirectory):
        (WebKit::WebProcessPool::platformDefaultCookieStorageDirectory):
        (WebKit::WebProcessPool::setIgnoreTLSErrors):
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory): Deleted.
        (WebKit::WebContext::platformInitializeWebProcess): Deleted.
        (WebKit::WebContext::platformInvalidateContext): Deleted.
        (WebKit::WebContext::platformDefaultWebSQLDatabaseDirectory): Deleted.
        (WebKit::WebContext::platformDefaultIndexedDBDatabaseDirectory): Deleted.
        (WebKit::WebContext::platformDefaultIconDatabasePath): Deleted.
        (WebKit::WebContext::platformDefaultLocalStorageDirectory): Deleted.
        (WebKit::WebContext::platformDefaultMediaKeysStorageDirectory): Deleted.
        (WebKit::WebContext::platformDefaultDiskCacheDirectory): Deleted.
        (WebKit::WebContext::platformDefaultCookieStorageDirectory): Deleted.
        (WebKit::WebContext::setIgnoreTLSErrors): Deleted.
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebView::create):
        (WebKit::WebViewEfl::WebViewEfl):
        * UIProcess/efl/WebViewEfl.h:
        * UIProcess/soup/WebContextSoup.cpp:
        (WebKit::WebProcessPool::platformInitializeNetworkProcess):
        (WebKit::WebContext::platformInitializeNetworkProcess): Deleted.
        * UIProcess/soup/WebCookieManagerProxySoup.cpp:
        (WebKit::WebCookieManagerProxy::setCookiePersistentStorage):
        * UIProcess/soup/WebSoupRequestManagerProxy.h:

2014-12-23  Sam Weinig  <sam@webkit.org>

        Remove telephone number context support from ContextMenuContextData, it is unused
        https://bugs.webkit.org/show_bug.cgi?id=139931

        Reviewed by Alexey Proskuryakov.

        m_isTelephoneNumberContext was only ever set to true in the ContextMenuContextData
        constructor that took a TelephoneNumberContextTag, which never got called. Remove it
        all.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::isTelephoneNumberContext): Deleted.
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):

2014-12-23  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Mountain Lion build.

        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::isTelephoneNumberContext):

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Handle WKTypeRefWrapper when converting object graphs
        https://bugs.webkit.org/show_bug.cgi?id=139927

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):

2014-12-23  Chris Dumez  <cdumez@apple.com>

        [iOS] Log better using FeatureCounter why PageCache is failing due to pruned resources
        https://bugs.webkit.org/show_bug.cgi?id=139921
        <rdar://problem/19255690>

        Reviewed by Gavin Barraclough.

        Call PageCache::pruneToCapacityNow() instead of multiple calls to
        setCapacity() as it does exactly what we want. Also pass the new
        PrunedReason argument so help us do better logging.

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

2014-12-23  Sam Weinig  <sam@webkit.org>

        Attempt to fix the iOS build.

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup _geolocationProvider]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]):

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Handle coding object graphs in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=139925

        Reviewed by Sam Weinig.

        * UIProcess/Cocoa/WebProcessProxyCocoa.mm: Added.
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        * UIProcess/WebProcessProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::transformObjectsToHandles):
        * WebProcess/WebProcess.h:

2014-12-23  Sam Weinig  <sam@webkit.org>

        ContextMenuContextData should store a ShareableBitmap not a ShareableBitmap::Handle
        https://bugs.webkit.org/show_bug.cgi?id=139924

        Reviewed by Anders Carlsson.

        Replaces the ShareableBitmap::Handle in ContextMenuContextData with a RefPtr<ShareableBitmap>.
        Removes the now unnecessary override copy-constructor and assignment-operator.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        (WebKit::ContextMenuContextData::controlledDataIsEditable):
        (WebKit::ContextMenuContextData::operator=): Deleted.
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::controlledImage):
        (WebKit::ContextMenuContextData::needsServicesMenu):
        (WebKit::ContextMenuContextData::controlledImageHandle): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):

2014-12-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after 177692.

        Missing WebKit:: namespace.

        * UIProcess/ios/WKContentView.h:

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Fix 32-build.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):

2014-12-23  Timothy Horton  <timothy_horton@apple.com>

        Install a TextIndicator for link immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=139897
        <rdar://problem/19333076>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _defaultAnimationController]):
        Install the link's TextIndicator.

        (-[WKImmediateActionController menuItemDidClose:]):
        Dismiss the TextIndicator and clean up when the item closes.

2014-12-23  Timothy Horton  <timothy_horton@apple.com>

        Expose ElementBoundingBox on WKHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=139895
        <rdar://problem/19333075>

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKHitTestResult.cpp:
        (WKHitTestResultGetElementBoundingBox):
        * UIProcess/API/C/WKHitTestResult.h:
        Expose the rect.

2014-12-23  Timothy Horton  <timothy_horton@apple.com>

        Remove the custom web page preview code
        https://bugs.webkit.org/show_bug.cgi?id=139894
        <rdar://problem/19333074>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dismissContentRelativeChildWindows]):
        (-[WKView _viewForPreviewingURL:initialFrameSize:]): Deleted.
        (-[WKView _titleForPreviewOfURL:]): Deleted.
        (-[WKView _setPreviewTitle:]): Deleted.
        (-[WKView _setPreviewLoading:]): Deleted.
        (-[WKView _setPreviewOverrideImage:]): Deleted.
        (-[WKView _finishPreviewingURL:withPreviewView:]): Deleted.
        (-[WKView _handleClickInPreviewView:URL:]): Deleted.
        (-[WKView _shouldUseStandardQuickLookPreview]): Deleted.
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController willDestroyView:]):
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController hidePreview]): Deleted.
        (-[WKImmediateActionController setPreviewTitle:]): Deleted.
        (-[WKImmediateActionController setPreviewLoading:]): Deleted.
        (-[WKImmediateActionController setPreviewOverrideImage:]): Deleted.
        (-[WKImmediateActionController _animationControllerForCustomPreview]): Deleted.
        * UIProcess/mac/WKPagePreviewViewController.h: Removed.
        * UIProcess/mac/WKPagePreviewViewController.mm: Removed.
        * UIProcess/mac/WKPreviewPopoverAnimationController.h: Removed.
        * UIProcess/mac/WKPreviewPopoverAnimationController.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        Remove all of the custom web page preview code. Clients that want the custom
        preview can implement it by overriding the immediate action.

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Add WebProcessProxy::transformHandlesToObjects
        https://bugs.webkit.org/show_bug.cgi?id=139922

        Reviewed by Tim Horton.

        This will be used to convert between the handles and their respective UI side objects.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::transformHandlesToObjects):
        (WebKit::WebProcessProxy::transformObjectsToHandles):
        (WebKit::WebProcessProxy::apiObjectByConvertingToHandles): Deleted.
        * UIProcess/WebProcessProxy.h:

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Add handle transform functions to WebConnection
        https://bugs.webkit.org/show_bug.cgi?id=139920

        Reviewed by Sam Weinig.

        This will be used by the web connection code to convert between objects and their respective handles.

        * Shared/WebConnection.h:
        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::transformHandlesToObjects):
        (WebKit::WebConnectionToWebProcess::transformObjectsToHandles):
        * UIProcess/WebConnectionToWebProcess.h:
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::transformHandlesToObjects):
        (WebKit::WebConnectionToUIProcess::transformObjectsToHandles):
        * WebProcess/WebConnectionToUIProcess.h:

2014-12-23  Sam Weinig  <sam@webkit.org>

        Rename ImmutableDictionary to API::Dictionary and merge MutableDictionary into it
        https://bugs.webkit.org/show_bug.cgi?id=139917

        Reviewed by Anders Carlsson.

        - Renames ImmutableDictionary -> API::Dictionary
        - Merges MutableDictionary into the new API::Dictionary
            (as a result WKDictionaryIsMutable() now always returns true)

        * File list elided *

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Add WebProcess::transformObjectsToHandles
        https://bugs.webkit.org/show_bug.cgi?id=139918

        Reviewed by Tim Horton.

        This function will be used for transforming bundle objects to their respective handle types
        when sending messages to the UI process.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Move dynamic_objc_cast to RetainPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=139915

        Reviewed by Sam Weinig.

        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::dynamic_objc_cast): Deleted.

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Add WebProcess::transformHandlesToObjects
        https://bugs.webkit.org/show_bug.cgi?id=139913

        Reviewed by Tim Horton.

        Rename objectGraphByTransformingObjectsToHandles to transformObjectsToHandles and add
        transformHandlesToObjects that will try to convert handles to the actual bundle type objects.

        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::transformObjectsToHandles):
        (WebKit::WebProcess::objectGraphByTransformingObjectsToHandles): Deleted.

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Add WebProcess::objectGraphByTransformingObjectsToHandles
        https://bugs.webkit.org/show_bug.cgi?id=139912

        Reviewed by Tim Horton.

        This will be used to convert Objective-C object graphs containing bundle types to their handle counterparts.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::transformHandlesToObjects):
        (WebKit::WebProcess::apiObjectByConvertingFromHandles): Deleted.
        Rename apiObjectByConvertingFromHandles to transformHandlesToObjects.

        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::objectGraphByTransformingObjectsToHandles):

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Fix UserMessage::transform to only call shouldTransform once
        https://bugs.webkit.org/show_bug.cgi?id=139911

        Reviewed by Sam Weinig.

        Also, make it possible for transformers to return null objects and change the transformers
        to return the passed in object when there's no need to do a transform.

        * Shared/UserData.cpp:
        (WebKit::transformGraph):
        (WebKit::UserData::transform):
        (WebKit::UserData::encode): Deleted.
        (WebKit::UserData::decode): Deleted.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::apiObjectByConvertingToHandles):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::apiObjectByConvertingFromHandles):

2014-12-23  Sam Weinig  <sam@webkit.org>

        Rename WebContext to WebProcessPool
        https://bugs.webkit.org/show_bug.cgi?id=139909

        Rubber-stamped by Anders Carlsson.

        - Major renames:
            WebContext -> WebProcessPool
            WebContextConfiguration -> WebProcessPoolConfiguration
            API::ContextConfiguration -> API::ProcessPoolConfiguration

        * File list elided *

2014-12-23  Anders Carlsson  <andersca@apple.com>

        Only call shouldTransformGraph once per graph
        https://bugs.webkit.org/show_bug.cgi?id=139910

        Reviewed by Sam Weinig.

        Don't call shouldTransformGraph for each node in the object graph. Instead, call it once
        and then transform the entire graph if needed.

        * Shared/mac/ObjCObjectGraph.h:
        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::shouldTransformGraph):
        (WebKit::transformGraph):
        (WebKit::ObjCObjectGraph::transform):
        (WebKit::shouldTransform): Deleted.

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Use a Transformer for UserData as well, to avoid always copying arrays and dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=139896

        Reviewed by Darin Adler.

        * Shared/UserData.cpp:
        (WebKit::shouldTransform):
        (WebKit::UserData::transform):
        * Shared/UserData.h:
        (WebKit::UserData::Transformer::~Transformer):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::apiObjectByConvertingToHandles):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::apiObjectByConvertingFromHandles):

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Make it possible to transform Objective-C object graphs, replacing certain elements with others
        https://bugs.webkit.org/show_bug.cgi?id=139893

        Reviewed by Sam Weinig.

        * Shared/mac/ObjCObjectGraph.h:
        (WebKit::ObjCObjectGraph::Transformer::~Transformer):
        * Shared/mac/ObjCObjectGraph.mm:
        (WebKit::dynamic_objc_cast):
        (WebKit::shouldTransform):
        (WebKit::ObjCObjectGraph::transform):

2014-12-22  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix after r177661 and r177662

        * CMakeLists.txt: Add APIPageGroupHandle.cpp to the source list.

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Convert pages and page groups to their respective handle objects
        https://bugs.webkit.org/show_bug.cgi?id=139891

        Reviewed by Tim Horton.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::apiObjectByConvertingToHandles):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::apiObjectByConvertingFromHandles):

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Add a bunch of missing header includes in preparation for making toImpl require the complete type
        https://bugs.webkit.org/show_bug.cgi?id=139887

        Reviewed by Andreas Kling.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:

2014-12-22  Chris Dumez  <cdumez@apple.com>

        [iOS] Log using FeatureCounter user-triggered zooming
        https://bugs.webkit.org/show_bug.cgi?id=139879
        <rdar://problem/19329130>

        Reviewed by Benjamin Poulain.

        Log using FeatureCounter user-triggered zooming on iOS.

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

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Add an API::PageGroupHandle object
        https://bugs.webkit.org/show_bug.cgi?id=139881

        Reviewed by Sam Weinig.

        API::PageGroupHandle won't be exposed to any API, it will only be used to facilitate passing page groups
        between the UI and web process inside UserData objects.

        * Shared/API/APIObject.h:
        * Shared/API/APIPageGroupHandle.cpp: Added.
        (API::PageGroupHandle::create):
        (API::PageGroupHandle::~PageGroupHandle):
        (API::PageGroupHandle::PageGroupHandle):
        * Shared/API/APIPageGroupHandle.h: Added.
        (API::PageGroupHandle::webPageGroupData):
        * Shared/UserData.cpp:
        (WebKit::UserData::UserData):
        (WebKit::UserData::encode):
        (WebKit::UserData::decode):
        * Shared/UserData.h:
        * UIProcess/WebPageGroup.h:
        (WebKit::WebPageGroup::data):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::apiObjectByConvertingToHandles):
        * WebKit2.xcodeproj/project.pbxproj:

2014-12-22  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <https://trac.webkit.org/changeset/177639>
        (https://bugs.webkit.org/show_bug.cgi?id=139866)

        Substitute APISecurityOrigin.h for WebSecurityOrigin.h as the latter was renamed to the former.

        * UIProcess/ios/WKGeolocationProviderIOS.mm:

2014-12-22  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r177649.

        * CMakeLists.txt:

2014-12-22  Csaba Osztrogonác  <ossy@webkit.org>

        Last URTBF after r177639, GTK builds now.

        * UIProcess/API/gtk/WebKitJavascriptResult.cpp:
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        * UIProcess/API/gtk/WebKitUserContentManager.cpp:
        * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp:
        (webkitUserMediaPermissionRequestCreate):
        * UIProcess/API/gtk/WebKitUserMediaPermissionRequestPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRunJavaScriptCallback):
        (webkit_web_view_run_javascript):
        (resourcesStreamReadCallback):

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Move more API classes from Shared to Shared/API.

        Rubber-stamped by Sam Weinig.

        * Shared/API/APIArray.cpp: Renamed from Source/WebKit2/Shared/APIArray.cpp.
        * Shared/API/APIArray.h: Renamed from Source/WebKit2/Shared/APIArray.h.
        * Shared/API/APIClient.h: Renamed from Source/WebKit2/Shared/APIClient.h.
        * Shared/API/APIData.cpp: Renamed from Source/WebKit2/Shared/APIData.cpp.
        * Shared/API/APIData.h: Renamed from Source/WebKit2/Shared/APIData.h.
        * Shared/API/APIError.cpp: Renamed from Source/WebKit2/Shared/APIError.cpp.
        * Shared/API/APIError.h: Renamed from Source/WebKit2/Shared/APIError.h.
        * Shared/API/APIFrameHandle.cpp: Renamed from Source/WebKit2/Shared/APIFrameHandle.cpp.
        * Shared/API/APIFrameHandle.h: Renamed from Source/WebKit2/Shared/APIFrameHandle.h.
        * Shared/API/APIGeometry.cpp: Renamed from Source/WebKit2/Shared/APIGeometry.cpp.
        * Shared/API/APIGeometry.h: Renamed from Source/WebKit2/Shared/APIGeometry.h.
        * Shared/API/APINumber.h: Renamed from Source/WebKit2/Shared/APINumber.h.
        * Shared/API/APIObject.cpp: Renamed from Source/WebKit2/Shared/APIObject.cpp.
        * Shared/API/APIObject.h: Renamed from Source/WebKit2/Shared/APIObject.h.
        * Shared/API/APIPageHandle.cpp: Renamed from Source/WebKit2/Shared/APIPageHandle.cpp.
        * Shared/API/APIPageHandle.h: Renamed from Source/WebKit2/Shared/APIPageHandle.h.
        * Shared/API/APIString.h: Renamed from Source/WebKit2/Shared/APIString.h.
        * Shared/API/APIURL.h: Renamed from Source/WebKit2/Shared/APIURL.h.
        * Shared/API/APIURLRequest.cpp: Renamed from Source/WebKit2/Shared/APIURLRequest.cpp.
        * Shared/API/APIURLRequest.h: Renamed from Source/WebKit2/Shared/APIURLRequest.h.
        * Shared/API/APIURLResponse.cpp: Renamed from Source/WebKit2/Shared/APIURLResponse.cpp.
        * Shared/API/APIURLResponse.h: Renamed from Source/WebKit2/Shared/APIURLResponse.h.

2014-12-22  Csaba Osztrogonác  <ossy@webkit.org>

        One more URTBF after r177639 to try to make GTK happy.

        * UIProcess/API/gtk/WebKitUserContentManager.cpp:

2014-12-22  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r177639 to try to make GTK happy.

        * UIProcess/API/gtk/WebKitJavascriptResult.cpp:

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Rename a bunch of API classes and move them to Shared/API
        https://bugs.webkit.org/show_bug.cgi?id=139866

        Reviewed by Sam Weinig.

        * Shared/API/APISecurityOrigin.h: Renamed from Source/WebKit2/Shared/WebSecurityOrigin.h.
        (API::SecurityOrigin::createFromString):
        (API::SecurityOrigin::create):
        (API::SecurityOrigin::securityOrigin):
        (API::SecurityOrigin::SecurityOrigin):
        * Shared/API/APISerializedScriptValue.h: Renamed from Source/WebKit2/Shared/WebSerializedScriptValue.h.
        (API::SerializedScriptValue::create):
        (API::SerializedScriptValue::adopt):
        (API::SerializedScriptValue::deserialize):
        (API::SerializedScriptValue::dataReference):
        (API::SerializedScriptValue::internalRepresentation):
        (API::SerializedScriptValue::SerializedScriptValue):
        * Shared/API/APIUserContentURLPattern.h: Renamed from Source/WebKit2/Shared/WebUserContentURLPattern.h.
        (API::UserContentURLPattern::create):
        (API::UserContentURLPattern::host):
        (API::UserContentURLPattern::scheme):
        (API::UserContentURLPattern::isValid):
        (API::UserContentURLPattern::matchesURL):
        (API::UserContentURLPattern::matchesSubdomains):
        (API::UserContentURLPattern::patternString):
        (API::UserContentURLPattern::UserContentURLPattern):
        * Shared/API/c/WKSecurityOrigin.cpp:
        (WKSecurityOriginGetTypeID):
        (WKSecurityOriginCreateFromString):
        (WKSecurityOriginCreateFromDatabaseIdentifier):
        (WKSecurityOriginCreate):
        * Shared/API/c/WKSerializedScriptValue.cpp:
        (WKSerializedScriptValueGetTypeID):
        (WKSerializedScriptValueCreate):
        (WKSerializedScriptValueCreateWithInternalRepresentation):
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toCopiedAPI):
        * Shared/API/c/WKUserContentURLPattern.cpp:
        (WKUserContentURLPatternGetTypeID):
        (WKUserContentURLPatternCreate):
        * Shared/SecurityOriginData.cpp:
        (WebKit::performAPICallbackWithSecurityOriginDataVector):
        * Shared/UserData.cpp:
        (WebKit::UserData::encode):
        (WebKit::UserData::decode):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::exceededDatabaseQuota):
        (API::UIClient::decidePolicyForGeolocationPermissionRequest):
        (API::UIClient::decidePolicyForUserMediaPermissionRequest):
        (API::UIClient::decidePolicyForNotificationPermissionRequest):
        * UIProcess/API/C/WKNotification.cpp:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView evaluateJavaScript:completionHandler:]):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::exceededDatabaseQuota):
        * UIProcess/GenericCallback.h:
        * UIProcess/Notifications/WebNotification.cpp:
        (WebKit::WebNotification::WebNotification):
        * UIProcess/Notifications/WebNotification.h:
        (WebKit::WebNotification::origin):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::providerDidUpdateNotificationPolicy):
        (WebKit::WebNotificationManagerProxy::providerDidRemoveNotificationPolicies):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        * UIProcess/Notifications/WebNotificationProvider.cpp:
        * UIProcess/Notifications/WebNotificationProvider.h:
        * UIProcess/PageClient.h:
        (WebKit::PageClient::decidePolicyForGeolocationPermissionRequest):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::didGetDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::didGetDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        (WebKit::WebDatabaseManagerProxy::didModifyOrigin):
        (WebKit::WebDatabaseManagerProxy::didModifyDatabase):
        * UIProcess/WebDatabaseManagerProxy.h:
        * UIProcess/WebDatabaseManagerProxyClient.cpp:
        (WebKit::WebDatabaseManagerProxyClient::didModifyOrigin):
        (WebKit::WebDatabaseManagerProxyClient::didModifyDatabase):
        * UIProcess/WebDatabaseManagerProxyClient.h:
        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        * UIProcess/WebKeyValueStorageManager.h:
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::WebOriginDataManagerProxy::didGetOrigins):
        (WebKit::WebOriginDataManagerProxy::deleteEntriesForOrigin):
        * UIProcess/WebOriginDataManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::scriptValueCallback):
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame):
        (WebKit::WebPageProxy::requestNotificationPermission):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        * UIProcess/WebResourceCacheManagerProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
        * UIProcess/ios/WKContentView.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        (API::InjectedBundle::PageUIClient::didReachApplicationCacheOriginQuota):
        (API::InjectedBundle::PageUIClient::didExceedDatabaseQuota):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::didReachApplicationCacheOriginQuota):
        (WebKit::InjectedBundlePageUIClient::didExceedDatabaseQuota):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota):

2014-12-21  Sam Weinig  <sam@webkit.org>

        Allow the WebContext's history client to coexist with WKWebView's history delegate
        https://bugs.webkit.org/show_bug.cgi?id=139857

        Reviewed by Anders Carlsson.

        - Renames API::HistoryClient to API::LegacyContextHistoryClient to make it clear what it is for.
        - Re-routes the history client functions from the WebProcessProxy to the WebPageProxy.
        - Add history client functions to API::LoaderClient and implement them for NavigationState's 
          LoaderClient subclass. Removes the need for WKProcessPool to have to setup a history client and
          forward to the NavigationState.

        * UIProcess/API/APIHistoryClient.h: Removed.
        * UIProcess/API/APILegacyContextHistoryClient.h: Copied from Source/WebKit2/UIProcess/API/APIHistoryClient.h.
        (API::LegacyContextHistoryClient::~LegacyContextHistoryClient):
        (API::LegacyContextHistoryClient::didNavigateWithNavigationData):
        (API::LegacyContextHistoryClient::didPerformClientRedirect):
        (API::LegacyContextHistoryClient::didPerformServerRedirect):
        (API::LegacyContextHistoryClient::didUpdateHistoryTitle):
        (API::LegacyContextHistoryClient::populateVisitedLinks):
        (API::HistoryClient::~HistoryClient): Deleted.
        (API::HistoryClient::didNavigateWithNavigationData): Deleted.
        (API::HistoryClient::didPerformClientRedirect): Deleted.
        (API::HistoryClient::didPerformServerRedirect): Deleted.
        (API::HistoryClient::didUpdateHistoryTitle): Deleted.
        (API::HistoryClient::populateVisitedLinks): Deleted.
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didNavigateWithNavigationData):
        (API::LoaderClient::didPerformClientRedirect):
        (API::LoaderClient::didPerformServerRedirect):
        (API::LoaderClient::didUpdateHistoryTitle):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetHistoryClient):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _initWithConfiguration:]):
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/Cocoa/HistoryClient.h: Removed.
        * UIProcess/Cocoa/HistoryClient.mm: Removed.
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::didNavigateWithNavigationData):
        (WebKit::NavigationState::LoaderClient::didPerformClientRedirect):
        (WebKit::NavigationState::LoaderClient::didPerformServerRedirect):
        (WebKit::NavigationState::LoaderClient::didUpdateHistoryTitle):
        (WebKit::NavigationState::didNavigateWithNavigationData): Deleted.
        (WebKit::NavigationState::didPerformClientRedirect): Deleted.
        (WebKit::NavigationState::didPerformServerRedirect): Deleted.
        (WebKit::NavigationState::didUpdateHistoryTitle): Deleted.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::setHistoryClient):
        (WebKit::WebContext::populateVisitedLinks):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::historyClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didNavigateWithNavigationData):
        (WebKit::WebPageProxy::didPerformClientRedirect):
        (WebKit::WebPageProxy::didPerformServerRedirect):
        (WebKit::WebPageProxy::didUpdateHistoryTitle):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didNavigateWithNavigationData): Deleted.
        (WebKit::WebProcessProxy::didPerformClientRedirect): Deleted.
        (WebKit::WebProcessProxy::didPerformServerRedirect): Deleted.
        (WebKit::WebProcessProxy::didUpdateHistoryTitle): Deleted.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebKit::WebFrameLoaderClient::setTitle):

2014-12-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] another outdated comment
        https://bugs.webkit.org/show_bug.cgi?id=139863

        Reviewed by Darin Adler.

        Remove outdated comment. We nowadays block untrusted connections by
        default.

        * WebProcess/gtk/WebProcessMainGtk.cpp:

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

        [iOS] avoid WebVideoFullscreenManager crash
        https://bugs.webkit.org/show_bug.cgi?id=139852
        <rdar://problem/19319302>

        Reviewed by Darin Adler.

        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::didExitFullscreen): NULL-check m_layerHostingContext and m_page.
        (WebKit::WebVideoFullscreenManager::setVideoLayerFrameFenced): NULL-check m_layerHostingContext.

2014-12-21  David Kilzer  <ddkilzer@apple.com>

        Fix WebKit2 build with newer clang compiler

        Fixes the following build error:

            In file included from DerivedSources/WebKit2/WebVideoFullscreenManagerProxyMessageReceiver.cpp:32:
            Source/WebKit2/Platform/IPC/HandleMessage.h:16:25: error: non-const lvalue reference to type 'Vector<[3 * ...]>' cannot bind to a temporary of type 'Vector<[3 * ...]>'
                (object->*function)(std::get<ArgsIndex>(std::forward<ArgsTuple>(args))...);
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            Source/WebKit2/Platform/IPC/HandleMessage.h:22:5: note: in instantiation of function template specialization 'IPC::callMemberFunctionImpl<WebKit::WebVideoFullscreenManagerProxy, void (WebKit::WebVideoFullscreenManagerProxy::*)(WTF::Vector<std::__1::pair<double, double>, 0, WTF::CrashOnOverflow> &), std::__1::tuple<WTF::Vector<std::__1::pair<double, double>, 0, WTF::CrashOnOverflow> >, 0>' requested here
                callMemberFunctionImpl(object, function, std::forward<ArgsTuple>(args), ArgsIndicies());
                ^
            Source/WebKit2/Platform/IPC/HandleMessage.h:120:5: note: in instantiation of function template specialization 'IPC::callMemberFunction<WebKit::WebVideoFullscreenManagerProxy, void (WebKit::WebVideoFullscreenManagerProxy::*)(WTF::Vector<std::__1::pair<double, double>, 0, WTF::CrashOnOverflow> &), std::__1::tuple<WTF::Vector<std::__1::pair<double, double>, 0, WTF::CrashOnOverflow> >, std::make_index_sequence<1> >' requested here
                callMemberFunction(WTF::move(arguments), object, function);
                ^
            DerivedSources/WebKit2/WebVideoFullscreenManagerProxyMessageReceiver.cpp:55:14: note: in instantiation of function template specialization 'IPC::handleMessage<Messages::WebVideoFullscreenManagerProxy::SetSeekableRangesVector, WebKit::WebVideoFullscreenManagerProxy, void (WebKit::WebVideoFullscreenManagerProxy::*)(WTF::Vector<std::__1::pair<double, double>, 0, WTF::CrashOnOverflow> &)>' requested here
                    IPC::handleMessage<Messages::WebVideoFullscreenManagerProxy::SetSeekableRangesVector>(decoder, this, &WebVideoFullscreenManagerProxy::setSeekableRangesVector);
                         ^

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setSeekableRangesVector):
        Make Vector<std::pair<double, double>>& argument const because a
        temporary is not allowed to bind to a non-const reference.

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

        [iOS] add optimized fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=139833
        <rdar://problem/18844486>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_VIDEO_PRESENTATION_MODE.

2014-12-20  David Kilzer  <ddkilzer@apple.com>

        Switch from using PLATFORM_NAME to SDK selectors in WebCore, WebInspectorUI, WebKit, WebKit2
        <http://webkit.org/b/139463>

        Reviewed by Mark Rowe.

        * Configurations/All.xcconfig:
        - Only set EXCLUDED_SOURCE_FILE_NAMES on iOS.
        * Configurations/Base.xcconfig:
        - Only set FRAMEWORK_CONTENT_DIRECTORY, GCC_ENABLE_OBJC_GC and
          TOOLCHAINS on OS X.
        * Configurations/BaseLegacyProcess.xcconfig:
        - Only set SKIP_INSTALL on iOS.
        * Configurations/BaseTarget.xcconfig:
        - Set WEBKIT_FRAMEWORKS_DIR and UMBRELLA_FRAMEWORKS_DIR based on
          SDK, and simply them.
        * Configurations/BaseXPCService.xcconfig:
        - Set INSTALL_PATH_ACTUAL_Normal based on SDK.
        * Configurations/DebugRelease.xcconfig:
        - Only set MACOSX_DEPLOYMENT_TARGET and SDKROOT on OS X.
        - Set WEBKIT_SYSTEM_INTERFACE_LIBRARY based on SDK.
        * Configurations/NetworkProcess.xcconfig:
        - Only set EXCLUDED_SHIM_FILE_NAME and CODE_SIGN_ENTITLEMENTS on
          iOS.
        * Configurations/NetworkService.Development.xcconfig:
        - Set INFOPLIST_FILE based on SDK.
        - Simplify CODE_SIGN_ENTITLEMENTS for iOS.
        * Configurations/NetworkService.xcconfig:
        - Set INFOPLIST_FILE based on SDK.
        - Simplify CODE_SIGN_ENTITLEMENTS for iOS.
        * Configurations/PluginProcess.xcconfig:
        - Only set EXCLUDED_SHIM_FILE_NAME and SKIP_INSTALL on iOS.
        * Configurations/PluginProcessShim.xcconfig:
        - Set OTHER_LDFLAGS based on SDK.
        * Configurations/PluginService.32.xcconfig:
        - Only set VALID_ARCHS on OS X.
        - Set OTHER_LDFLAGS based on platform-specific values.
        - Only set SKIP_INSTALL on iOS.
        * Configurations/PluginService.64.xcconfig:
        - Set ARCHS based on SDK.
        - Set OTHER_LDFLAGS based on platform-specific values.
        - Only set SKIP_INSTALL on iOS.
        * Configurations/PluginService.Development.xcconfig:
        - Only set SKIP_INSTALL on iOS.
        - Set OTHER_LDFLAGS based on platform-specific values.
        * Configurations/SecItemShim.xcconfig:
        - Set OTHER_LDFLAGS based on platform-specific values.
        * Configurations/Version.xcconfig:
        - Set SYSTEM_VERSION_PREFIX separately for iOS and OS X.
        * Configurations/WebContentProcess.xcconfig:
        - Only set EXCLUDED_SHIM_FILE_NAME on iOS.
        - Only set CODE_SIGN_ENTITLEMENTS on iOS Simulator.
        * Configurations/WebContentService.Development.xcconfig:
        - Set INFOPLIST_FILE and BUNDLE_LOCALIZATION_KEY based on SDK.
        - Only set CODE_SIGN_ENTITLEMENTS on iOS hardware.
        - Set OTHER_LDFLAGS based on platform-specific values.
        * Configurations/WebContentService.xcconfig: Ditto.
        * Configurations/WebKit.xcconfig:
        - Set FRAMEWORK_AND_LIBRARY_LDFLAGS, SECTORDER_FLAGS, and
          WK_API_AVAILABILITY_ENABLED based on SDK.
        - Set OTHER_LDFLAGS based on platform-specific values.
        - Only set EXCLUDED_SOURCE_FILE_NAMES on iOS.
        * Configurations/WebKit2.xcconfig:
        - Set INSTALL_PATH, INSTALL_PATH_ACTUAL, DYLIB_INSTALL_NAME_BASE,
          NORMAL_WEBKIT2_FRAMEWORKS_DIR, WEBKIT2_FRAMEWORKS_DIR and
          NORMAL_PRODUCTION_FRAMEWORKS_DIR based on SDK.
        - Set SKIP_INSTALL on iOS.
        * Configurations/WebProcessShim.xcconfig:
        - Set OTHER_LDFLAGS based on platform-specific values.

2014-12-19  Jessie Berlin  <jberlin@webkit.org>

        Build fix.

        * UIProcess/mac/WebInspectorProxyMac.mm:

2014-12-19  Jessie Berlin  <jberlin@webkit.org>

        Simplify the build fixes from r177615 and r177617.

        Rubber-stamped by Dan Bernstein.

        * UIProcess/mac/WebInspectorProxyMac.mm:

2014-12-19  Jessie Berlin  <jberlin@webkit.org>

        Another attempt at a speculative build fix.

        * UIProcess/mac/WebInspectorProxyMac.mm:

2014-12-19  Jessie Berlin  <jberlin@webkit.org>

        Speculative build fix after r177610.

        * UIProcess/mac/WebInspectorProxyMac.mm:

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

        [iOS] Add didEnterFullscreen / didExitFullscreen callbacks to WKUIDelegatePrivate
        https://bugs.webkit.org/show_bug.cgi?id=139835
        <rdar://problem/19312042>

        Reviewed by Anders Carlsson.

        Add didEnterFullscreen / didExitFullscreen callbacks to WKUIDelegatePrivate
        so that they can be implemented in MobileSafari.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didEnterFullscreen):
        (API::UIClient::didExitFullscreen):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didEnterFullscreen):
        (WebKit::UIDelegate::UIClient::didExitFullscreen):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didEnterFullscreen):
        (WebKit::WebPageProxy::didExitFullscreen):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::didEnterFullscreen):

2014-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Inspector does not reopen correctly after Inspector Process crashes
        https://bugs.webkit.org/show_bug.cgi?id=139838

        Reviewed by Timothy Hatcher.

        When the WebContentProcess holding the Inspector Frontend crashes, we
        would properly tear down the inspector objects. However, the next time
        the inspector is opened, when creating the new page in the Inspector
        Page Group, a WebPageProxy is created with a Terminated WebProcessProxy.

        That Terminated WebProcessProxy is automatically replaced with the next
        load request is given. The newly created process was missing the
        message listeners and assumed URL access settings that the
        WebInspectorProxy had set on the old process.

        So, WebInspectorProxy now listens for and resets the process properties
        when the inspector process is recreated.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::didRelaunchInspectorPageProcess):
        Reset process properties when the process is relaunched.

        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::didClose):
        Save connection identifier if we need to establish connections later.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter didRelaunchProcess]):
        (-[WKWebInspectorWKView _didRelaunchProcess]):
        (WebKit::WebInspectorProxy::closeTimerFired):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Send WebInspectorProxy a message when the process underlying the
        WKView is relaunched.

2014-12-19  Anders Carlsson  <andersca@apple.com>

        Get rid of the hardcoded set of structs in the message generation script
        https://bugs.webkit.org/show_bug.cgi?id=139844

        Reviewed by Tim Horton.

        Instead, make it possible to use 'struct' in front of the type name to declare that the type is a struct.

        * DatabaseProcess/DatabaseProcess.messages.in:
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in:
        * NetworkProcess/NetworkProcess.messages.in:
        * PluginProcess/PluginProcess.messages.in:
        * PluginProcess/WebProcessConnection.messages.in:
        * Scripts/webkit/messages.py:
        (struct_or_class):
        (forward_declarations_for_namespace):
        (forward_declarations_and_headers):
        * Scripts/webkit/model.py:
        (Parameter.__init__):
        * Scripts/webkit/parser.py:
        (parse_parameters_string):
        * UIProcess/Storage/StorageManager.messages.in:
        * UIProcess/WebContext.messages.in:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.messages.in:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.messages.in:
        * WebProcess/OriginData/WebOriginDataManager.messages.in:
        * WebProcess/ResourceCache/WebResourceCacheManager.messages.in:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.messages.in:

2014-12-19  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setIgnoresNonWheelEvents:]):

2014-12-19  Beth Dakin  <bdakin@apple.com>

        Preview popovers don't show an arrow for large links
        https://bugs.webkit.org/show_bug.cgi?id=139842
        -and corresponding-
        <rdar://problem/19301470>

        Reviewed by Tim Horton.

        This patch addresses the case where the link is so large that there is no 
        available space on any side once you factor in screen padding. In that case, we 
        should give up early on not obscuring the link.
        * UIProcess/mac/WKPreviewPopoverAnimationController.mm:
        (-[WKPreviewPopoverAnimationController _targetSizeForPagePreview]):
        (-[WKPreviewPopoverAnimationController _effectivePaddingWithPreviewPadding:]):
        (-[WKPreviewPopoverAnimationController _maxSpaceAvailableOnYEdgeForOriginRect:withScreenRect:previewPadding:]):
        (-[WKPreviewPopoverAnimationController _maxSpaceAvailableOnXEdgeForOriginRect:withScreenRect:previewPadding:]):
        (-[WKPreviewPopoverAnimationController _preferredPopoverSizeWithPreviewPadding:forTargetSize:]):

2014-12-19  Timothy Horton  <timothy_horton@apple.com>

        WKView's ignoresNonWheelEvents should ignore immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=139839
        <rdar://problem/19312111>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):
        (-[WKView _setIgnoresNonWheelEvents:]):
        Install/uninstall the immediate action gesture recognizer when
        toggling ignoresNonWheelEvents.

2014-12-19  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r177593.

        * PluginProcess/PluginProcess.h:
        * PluginProcess/unix/PluginProcessUnix.cpp:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * Shared/WebProcessCreationParameters.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        * WebProcess/WebProcess.h:
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-12-19  Anders Carlsson  <andersca@apple.com>

        Use WebCore::MachSendRights for the compositing render server port
        https://bugs.webkit.org/show_bug.cgi?id=139834

        Reviewed by Tim Horton.

        * Platform/IPC/HandleMessage.h:
        (IPC::callMemberFunctionImpl):
        * Platform/mac/LayerHostingContext.h:
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForPort):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        (WebKit::PluginProcess::initializePluginProcess):
        * PluginProcess/PluginProcess.h:
        (WebKit::PluginProcess::compositingRenderServerPort):
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::compositingRenderServerPort):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebProcessCreationParameters.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<MachSendRight>::encode):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::compositingRenderServerPort):
        (WebKit::NetscapePlugin::setLayerHostingMode):
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::compositingRenderServerPort):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::compositingRenderServerPort):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-12-19  Andreas Kling  <akling@apple.com>

        Ref-ify TextIterator API.
        <https://webkit.org/b/139823>

        Reviewed by Antti Koivisto.

        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.mm:
        (-[WKDOMTextIterator currentRange]):

2014-12-19  Commit Queue  <commit-queue@webkit.org>

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

        "Broke Production builds by installing
        libWebCoreTestSupport.dylib in the wrong directory" (Requested
        by ddkilzer on #webkit).

        Reverted changeset:

        "Switch from using PLATFORM_NAME to SDK selectors in WebCore,
        WebInspectorUI, WebKit, WebKit2"
        https://bugs.webkit.org/show_bug.cgi?id=139463
        http://trac.webkit.org/changeset/177574

2014-12-19  David Kilzer  <ddkilzer@apple.com>

        Switch from using PLATFORM_NAME to SDK selectors in WebCore, WebInspectorUI, WebKit, WebKit2
        <http://webkit.org/b/139463>

        Reviewed by Mark Rowe.

        * Configurations/All.xcconfig:
        - Only set EXCLUDED_SOURCE_FILE_NAMES on iOS.
        * Configurations/Base.xcconfig:
        - Only set FRAMEWORK_CONTENT_DIRECTORY, GCC_ENABLE_OBJC_GC and
          TOOLCHAINS on OS X.
        * Configurations/BaseLegacyProcess.xcconfig:
        - Only set SKIP_INSTALL on iOS.
        * Configurations/BaseTarget.xcconfig:
        - Set WEBKIT_FRAMEWORKS_DIR and UMBRELLA_FRAMEWORKS_DIR based on
          SDK, and simply them.
        * Configurations/BaseXPCService.xcconfig:
        - Set INSTALL_PATH_ACTUAL_Normal based on SDK.
        * Configurations/DebugRelease.xcconfig:
        - Only set MACOSX_DEPLOYMENT_TARGET and SDKROOT on OS X.
        - Set WEBKIT_SYSTEM_INTERFACE_LIBRARY based on SDK.
        * Configurations/NetworkProcess.xcconfig:
        - Only set EXCLUDED_SHIM_FILE_NAME and CODE_SIGN_ENTITLEMENTS on
          iOS.
        * Configurations/NetworkService.Development.xcconfig:
        - Set INFOPLIST_FILE based on SDK.
        - Simplify CODE_SIGN_ENTITLEMENTS for iOS.
        * Configurations/NetworkService.xcconfig:
        - Set INFOPLIST_FILE based on SDK.
        - Simplify CODE_SIGN_ENTITLEMENTS for iOS.
        * Configurations/PluginProcess.xcconfig:
        - Only set EXCLUDED_SHIM_FILE_NAME and SKIP_INSTALL on iOS.
        * Configurations/PluginProcessShim.xcconfig:
        - Set OTHER_LDFLAGS based on SDK.
        * Configurations/PluginService.32.xcconfig:
        - Only set VALID_ARCHS on OS X.
        - Set OTHER_LDFLAGS based on platform-specific values.
        - Only set SKIP_INSTALL on iOS.
        * Configurations/PluginService.64.xcconfig:
        - Set ARCHS based on SDK.
        - Set OTHER_LDFLAGS based on platform-specific values.
        - Only set SKIP_INSTALL on iOS.
        * Configurations/PluginService.Development.xcconfig:
        - Only set SKIP_INSTALL on iOS.
        - Set OTHER_LDFLAGS based on platform-specific values.
        * Configurations/SecItemShim.xcconfig:
        - Set OTHER_LDFLAGS based on platform-specific values.
        * Configurations/Version.xcconfig:
        - Set SYSTEM_VERSION_PREFIX separately for iOS and OS X.
        * Configurations/WebContentProcess.xcconfig:
        - Only set EXCLUDED_SHIM_FILE_NAME on iOS.
        - Only set CODE_SIGN_ENTITLEMENTS on iOS Simulator.
        * Configurations/WebContentService.Development.xcconfig:
        - Set INFOPLIST_FILE and BUNDLE_LOCALIZATION_KEY based on SDK.
        - Only set CODE_SIGN_ENTITLEMENTS on iOS hardware.
        - Set OTHER_LDFLAGS based on platform-specific values.
        * Configurations/WebContentService.xcconfig: Ditto.
        * Configurations/WebKit.xcconfig:
        - Set FRAMEWORK_AND_LIBRARY_LDFLAGS, SECTORDER_FLAGS, and
          WK_API_AVAILABILITY_ENABLED based on SDK.
        - Set OTHER_LDFLAGS based on platform-specific values.
        - Only set EXCLUDED_SOURCE_FILE_NAMES on iOS.
        * Configurations/WebKit2.xcconfig:
        - Set INSTALL_PATH, INSTALL_PATH_ACTUAL, DYLIB_INSTALL_NAME_BASE,
          NORMAL_WEBKIT2_FRAMEWORKS_DIR, WEBKIT2_FRAMEWORKS_DIR and
          NORMAL_PRODUCTION_FRAMEWORKS_DIR based on SDK.
        - Set SKIP_INSTALL on iOS.
        * Configurations/WebProcessShim.xcconfig:
        - Set OTHER_LDFLAGS based on platform-specific values.

2014-12-18  Jon Honeycutt  <jhoneycutt@apple.com>

        iOS build fix.

        * UIProcess/mac/WKPreviewPopoverAnimationController.mm:

2014-12-18  Jessie Berlin  <jberlin@webkit.org>

        Speculative build-fix after r177522.

        * UIProcess/mac/WKPreviewPopoverAnimationController.mm:
        (-[WKPreviewPopoverAnimationController setPreviewOverrideImage:]):

2014-12-18  Andreas Kling  <akling@apple.com>

        Ref-ify various Document-related things.
        <https://webkit.org/b/139796>

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        (-[WKDOMDocument createTextNode:]):

2014-12-18  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * UIProcess/ProcessThrottler.h:

2014-12-18  Anders Carlsson  <andersca@apple.com>

        Use MachSendRight in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139800

        Reviewed by Tim Horton.

        * Platform/IPC/ArgumentEncoder.h:
        (IPC::ArgumentEncoder::encode):
        (IPC::ArgumentEncoder::operator<<):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::encode):
        (WebKit::RemoteLayerBackingStore::decode):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<MachSendRight>::encode):
        (IPC::ArgumentCoder<MachSendRight>::decode):

2014-12-18  Gavin Barraclough  <barraclough@apple.com>

        Remove custom token mechanism from ProcessThrottler
        https://bugs.webkit.org/show_bug.cgi?id=139744

        Reviewed by Geoff Garen.

        ProcessThrottler implements its own token-based counter mechanism, but should
        just use RefCounter.

        * UIProcess/Cocoa/NavigationState.h:
            - remove std::unique_ptr.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::didChangeIsLoading):
            - remove std::make_unique.
        * UIProcess/GenericCallback.h:
        (WebKit::CallbackBase::CallbackBase):
        (WebKit::GenericCallback::create):
        (WebKit::GenericCallback::GenericCallback):
        (WebKit::CallbackMap::put):
            - remove std::unique_ptr.
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::ProcessThrottler):
        (WebKit::m_backgroundCounter):
        (WebKit::ProcessThrottler::assertionState):
        (WebKit::ProcessThrottler::updateAssertion):
        (WebKit::ProcessThrottler::ForegroundActivityToken::ForegroundActivityToken): Deleted.
        (WebKit::ProcessThrottler::ForegroundActivityToken::~ForegroundActivityToken): Deleted.
        (WebKit::ProcessThrottler::BackgroundActivityToken::BackgroundActivityToken): Deleted.
        (WebKit::ProcessThrottler::BackgroundActivityToken::~BackgroundActivityToken): Deleted.
            - removed old implementation of ForegroundActivityToken/BackgroundActivityToken.
        * UIProcess/ProcessThrottler.h:
        (WebKit::ProcessThrottler::foregroundActivityToken):
        (WebKit::ProcessThrottler::backgroundActivityToken):
            - added accessors to create activity tokens.
        (WebKit::ProcessThrottler::weakPtr): Deleted.
            - removed members replaced by RefCounter types.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateActivityToken):
        (WebKit::WebPageProxy::validateCommand):
        (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::getMarkedRangeAsync):
        (WebKit::WebPageProxy::getSelectedRangeAsync):
        (WebKit::WebPageProxy::characterIndexForPointAsync):
        (WebKit::WebPageProxy::firstRectForCharacterRangeAsync):
        (WebKit::WebPageProxy::takeSnapshot):
        (WebKit::WebPageProxy::installViewStateChangeCompletionHandler):
            - remove std::make_unique.
        * UIProcess/WebPageProxy.h:
            - remove std::unique_ptr.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles):
            - remove std::make_unique.
        * UIProcess/WebProcessProxy.h:
            - remove std::unique_ptr.
        * 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::selectPositionAtPoint):
        (WebKit::WebPageProxy::beginSelectionInDirection):
        (WebKit::WebPageProxy::updateSelectionWithExtentPoint):
        (WebKit::WebPageProxy::requestDictationContext):
        (WebKit::WebPageProxy::requestAutocorrectionContext):
        (WebKit::WebPageProxy::selectWithTwoTouches):
        (WebKit::WebPageProxy::moveSelectionByOffset):
        (WebKit::WebPageProxy::focusNextAssistedNode):
            - remove std::make_unique.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
            - remove std::make_unique.

2014-12-18  Gavin Barraclough  <barraclough@apple.com>

        Add strong typing to RefCounter interface, return value as a bool.
        https://bugs.webkit.org/show_bug.cgi?id=139776

        Reviewed by Geoff Garen.

        Currently all token vended by a RefCounter have the same type - Ref<RefCounter::Count>.
        This means there is no compile time type checking to prevent mistakes. Update the count()
        method to token<>(), templated on type used to identify the token being returned.
        Calls to token<T>() will return a result of type RefCounter::Token<T>.

        There are a few problems with the fact the counter will return you an exact count of the
        number of outstanding tokens:
          - It is desirable to only fire the callback on zero-edge changes; it is more consistent
            to do so if the value is only readable as a boolean.
          - It is desirable to provide the value as an argument to the callback, however to make
            this useful for integer values it is also necessary to indicate the direction of change
            (0->1 is often interesting where 2->1 is not).
          - There is a mismatch between the precision of returning a count, and the inherent
            imprecision of a token based mechanism, where it may be difficult to guarantee
            absolutely no unnecessary refcount churn, and thus unintentional counter values.

        Removed PluginProcessManager::m_processSuppressionEnabled. Now the callback only fires on
        zero-edge transitions we no longer need this to filter changes.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::PluginProcessManager):
            - updateProcessSuppressionState -> updateProcessSuppressionDisabled.
        * UIProcess/Plugins/PluginProcessManager.h:
        (WebKit::PluginProcessManager::processSuppressionDisabledForPageCount): Deleted.
        (WebKit::PluginProcessManager::processSuppressionDisabledToken):
            - processSuppressionDisabledForPageCount -> processSuppressionDisabledToken.
        (WebKit::PluginProcessManager::processSuppressionEnabled): Deleted.
        (WebKit::PluginProcessManager::processSuppressionDisabled):
            - processSuppressionEnabled -> processSuppressionDisabled.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):
            - processSuppressionEnabled -> processSuppressionDisabled.
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        (WebKit::PluginProcessManager::updateProcessSuppressionState): Deleted.
        (WebKit::PluginProcessManager::updateProcessSuppressionDisabled):
            - updateProcessSuppressionState -> updateProcessSuppressionDisabled
        * UIProcess/ProcessThrottler.h:
            - added UserObservablePageToken, ProcessSuppressionDisabledToken types.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::m_processSuppressionDisabledForPageCounter):
            - lambda now has bool argument.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::userObservablePageCount):
        (WebKit::WebContext::processSuppressionDisabledForPageCount):
            - count() -> token<>(), changed return type.
        * UIProcess/WebPageProxy.h:
            - changed types of token members.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::updateProcessSuppressionState):
            renamed m_pluginProcessManagerProcessSuppressionDisabledCount -> m_pluginProcessManagerProcessSuppressionDisabledToken.

2014-12-18  Timothy Horton  <timothy_horton@apple.com>

        Try to fix some builds.

        * UIProcess/mac/WKPreviewPopoverAnimationController.mm:

2014-12-18  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/API/mac/WKViewInternal.h:

2014-12-18  Chris Dumez  <cdumez@apple.com>

        Add missing availability annotation on @property _featureCounterEnabled
        https://bugs.webkit.org/show_bug.cgi?id=139794
        <rdar://problem/19266254>

        Rubber-stamped by Dan Bernstein.

        Follow-up to r177526 adding availability annotation on @property
        _featureCounterEnabled.

        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2014-12-18  Beth Dakin  <bdakin@apple.com>

        Need to re-enable action menus
        https://bugs.webkit.org/show_bug.cgi?id=139795
        -and corresponding-
        rdar://problem/19299367

        Reviewed by Tim Horton.

        Re-enable the menus by un-commenting the code to create the menu and controller.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):

        performActionMenuHitTest already takes a parameter indicating whether the hit test 
        is for an immediate action or not. The callback didPerformActionMenuHitTest needs 
        that information too so that it knows whether to call into the 
        ActionMenuController or the ImmediateActionController.
        (-[WKView _didPerformActionMenuHitTest:forImmediateAction:userData:]):
        (-[WKView _didPerformActionMenuHitTest:userData:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPerformActionMenuHitTest):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformActionMenuHitTest):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):

2014-12-18  Chris Dumez  <cdumez@apple.com>

        [WK2] Stop using WKPreferencesPrivate API to toggle FeatureCounter support
        https://bugs.webkit.org/show_bug.cgi?id=139794
        <rdar://problem/19266254>

        Reviewed by Anders Carlsson.

        Stop using WKPreferencesPrivate API to toggle FeatureCounter support
        and use WKWebViewConfigurationPrivate API instead. FeatureCounter is
        not meant to change state after the view has been created.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetFeatureCounterEnabled): Deleted.
        (WKPreferencesGetFeatureCounterEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _featureCounterEnabled]): Deleted.
        (-[WKPreferences _setFeatureCounterEnabled:]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _featureCounterEnabled]):
        (-[WKWebViewConfiguration _setFeatureCounterEnabled:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:

2014-12-18  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPreviewOverrideImage:]):

2014-12-18  Timothy Horton  <timothy_horton@apple.com>

        Change page preview loading order, and add a TextIndicator
        https://bugs.webkit.org/show_bug.cgi?id=139793
        <rdar://problem/19288547>

        Reviewed by Beth Dakin.

        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Build a TextIndicator for links.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dismissContentRelativeChildWindows]):
        (-[WKView _setPreviewTitle:]):
        (-[WKView _setPreviewLoading:]):
        Remove unneeded WK_API_ENABLED #ifs.

        (-[WKView _setPreviewOverrideImage:]):
        Add; forward to WKImmediateActionController.

        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController willDestroyView:]):
        Shut down the WKPreviewPopoverAnimationController.

        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        Don't build an immediate action item here; we'll always build it in
        willBeginAnimation, and the one we build here is likely to be wrong.

        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController hidePreview]):
        (-[WKImmediateActionController setPreviewTitle:]):
        (-[WKImmediateActionController setPreviewLoading:]):
        (-[WKImmediateActionController setPreviewOverrideImage:]):
        (-[WKImmediateActionController _animationControllerForCustomPreview]):
        (-[WKImmediateActionController _createPreviewPopoverIfNeededForURL:]): Deleted.
        (-[WKImmediateActionController popoverWillClose:]): Deleted.
        (targetSizeFitsInAvailableSpace): Deleted.
        (-[WKImmediateActionController largestPopoverSize]): Deleted.
        (-[WKImmediateActionController _preferredPopoverSizeWithPreviewPadding:]): Deleted.
        (-[WKImmediateActionController pagePreviewViewController:viewForPreviewingURL:initialFrameSize:]): Deleted.
        (-[WKImmediateActionController pagePreviewViewController:titleForPreviewOfURL:]): Deleted.
        (-[WKImmediateActionController pagePreviewViewControllerWasClicked:]): Deleted.
        Move preview popover code to WKPreviewPopoverAnimationController.
        Install and uninstall the link text indicator when necessary.

        * UIProcess/mac/WKPagePreviewViewController.h:
        * UIProcess/mac/WKPagePreviewViewController.mm:
        (-[WKPagePreviewViewController setLoading:]):
        (-[WKPagePreviewViewController loadView]):
        (-[WKPagePreviewViewController replacePreviewWithImage:atSize:]):
        Allow overriding the preview with a full-view NSImage.
        Hide the preview view until the loading spinner goes away.

        * UIProcess/mac/WKPreviewPopoverAnimationController.h: Copied from Source/WebKit2/UIProcess/mac/WKImmediateActionController.h.
        * UIProcess/mac/WKPreviewPopoverAnimationController.mm: Added.
        (+[WKPreviewPopoverAnimationController _shouldImmediatelyShowPreview]):
        (-[WKPreviewPopoverAnimationController initWithURL:view:page:originRect:eventLocationInView:]):
        (-[WKPreviewPopoverAnimationController close]):
        (-[WKPreviewPopoverAnimationController setPreviewLoading:]):
        (-[WKPreviewPopoverAnimationController setPreviewOverrideImage:]):
        If we have shown the popover, choose a size strictly smaller than
        its current size.

        (-[WKPreviewPopoverAnimationController _hidePreview]):
        (-[WKPreviewPopoverAnimationController setPreviewTitle:]):
        (-[WKPreviewPopoverAnimationController _createPreviewPopover]):
        (-[WKPreviewPopoverAnimationController _showPreview]):
        (targetSizeFitsInAvailableSpace):
        (-[WKPreviewPopoverAnimationController largestPopoverSize]):
        (-[WKPreviewPopoverAnimationController _targetSizeForPagePreview]):
        (-[WKPreviewPopoverAnimationController _preferredPopoverSizeWithPreviewPadding:forTargetSize:]):
        (-[WKPreviewPopoverAnimationController _previewWatchdogTimerFired:]):
        (-[WKPreviewPopoverAnimationController recognizerWillBeginAnimation:]):
        (-[WKPreviewPopoverAnimationController recognizerDidUpdateAnimation:]):
        (-[WKPreviewPopoverAnimationController recognizerDidCancelAnimation:]):
        (-[WKPreviewPopoverAnimationController recognizerDidCompleteAnimation:]):
        (-[WKPreviewPopoverAnimationController recognizerDidDismissAnimation:]):
        (-[WKPreviewPopoverAnimationController pagePreviewViewController:viewForPreviewingURL:initialFrameSize:]):
        (-[WKPreviewPopoverAnimationController pagePreviewViewController:titleForPreviewOfURL:]):
        (-[WKPreviewPopoverAnimationController pagePreviewViewControllerWasClicked:]):
        (-[WKPreviewPopoverAnimationController popoverWillClose:]):
        Move code in from WKImmediateActionController.
        Forward NSImmediateActionAnimationControllerDelegate methods
        to the popover's animation controller if we've popped it.
        Pop the popover if we've loaded or 1 second has passed, whichever
        comes first.

        * WebKit2.xcodeproj/project.pbxproj:

2014-12-18  Anders Carlsson  <andersca@apple.com>

        Add a MachSendRight class to WebCore and use it in IOSurface
        https://bugs.webkit.org/show_bug.cgi?id=139787

        Reviewed by Tim Horton.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::encode):

2014-12-18  Daniel Bates  <dabates@apple.com>

        Attempt to fix the iOS build after <http://trac.webkit.org/changeset/177486>
        (https://bugs.webkit.org/show_bug.cgi?id=139755)

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture): Wrap return value of Range::create() in RefPtr<Range>()
        to make the the compiler happy since it wants clauses of the ternary operator to have the same data type
        and Ref<Range> object does not support nullptr.
        (WebKit::WebPage::selectWordBackward): Substitute Ref::ptr() for PassRefPtr::get().
        (WebKit::WebPage::moveSelectionByOffset): Ditto.
        (WebKit::WebPage::selectPositionAtPoint): Ditto.
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection): Ditto.
        (WebKit::WebPage::requestDictationContext): Ditto.
        (WebKit::computeAutocorrectionContext): Ditto.

2014-12-18  Antti Koivisto  <antti@apple.com>

        Remove alwaysUseBaselineOfPrimaryFont setting
        https://bugs.webkit.org/show_bug.cgi?id=139770

        Reviewed by Anders Carlsson.

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

2014-12-18  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Implement webkit_web_view_is_playing_audio()
        https://bugs.webkit.org/show_bug.cgi?id=138918

        Reviewed by Carlos Garcia Campos.

        Implements webkit_web_view_is_playing_audio(), and overrides
        UIClient::isPlayingAudioDidChange() to be able to emit change
        notification signals for the new WebKitWebView::is-playing-audio
        property.

        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (isPlayingAudioDidChange): Added.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewIsPlayingAudioChanged): Helper function to emit the
        emit the notify::is-playing-audio signal when needed.
        (webkitWebViewGetProperty): Handle the WebKitWebView::is-playing-audio
        property.
        (webkit_web_view_class_init): Install the
        WebKitWebView::is-playing-audio property.
        (webkit_web_view_is_playing_audio): Added.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add
        webkit_web_view_is_playing_audio() to the list of public API
        functions.

2014-12-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow to build with ENABLE_NETWORK_CACHE
        https://bugs.webkit.org/show_bug.cgi?id=139728

        Reviewed by Antti Koivisto.

        Just make it build for now.

        * CMakeLists.txt: Add new files to compilation.
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didRetrieveCacheEntry): Use
        ENABLE(SHAREABLE_RESOURCE) when ShareableResource is used.
        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::decodeStorageEntry): Ditto.
        (WebKit::makeCacheKey): Use ENABLE(CACHE_PARTITIONING) for ResourceRequest::cachePartition().
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.h:
        (WebKit::NetworkCacheStorage::Data::isNull): Move implementation
        to platform specific files.
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::Data::isNull): Moved from the header.
        * NetworkProcess/cache/NetworkCacheStorageSoup.cpp: Added.
        (WebKit::NetworkCacheStorage::Data::Data):
        (WebKit::NetworkCacheStorage::Data::data):
        (WebKit::NetworkCacheStorage::Data::isNull):
        (WebKit::NetworkCacheStorage::open):
        (WebKit::NetworkCacheStorage::NetworkCacheStorage):
        (WebKit::NetworkCacheStorage::initializeKeyFilter):
        (WebKit::NetworkCacheStorage::removeEntry):
        (WebKit::NetworkCacheStorage::dispatchRetrieveOperation):
        (WebKit::NetworkCacheStorage::dispatchPendingRetrieveOperations):
        (WebKit::NetworkCacheStorage::retrieve):
        (WebKit::NetworkCacheStorage::store):
        (WebKit::NetworkCacheStorage::setMaximumSize):
        (WebKit::NetworkCacheStorage::clear):
        * PlatformGTK.cmake: Add NetworkCacheStorageSoup.cpp.
        * config.h:

2014-12-17  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19282508> WebKitLegacy is unusable due to bad dylib identifier
        https://bugs.webkit.org/show_bug.cgi?id=139760

        Reviewed by Anders Carlsson.

        * Configurations/WebKit2.xcconfig:

2014-12-17  Beth Dakin  <bdakin@apple.com>

        Page previews are sometimes sized much smaller than it seems they should be
        https://bugs.webkit.org/show_bug.cgi?id=139754
        -and corresponding-
        rdar://problem/19286550        

        Reviewed by Tim Horton.

        Increase the minimum size and add in a missing else!!
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _preferredPopoverSizeWithPreviewPadding:]):

2014-12-17  Anders Carlsson  <andersca@apple.com>

        Ref-ify WebPageProxy and WebProcessProxy creation functions
        https://bugs.webkit.org/show_bug.cgi?id=139751

        Reviewed by Andreas Kling.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::create):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::create):
        (WebKit::WebProcessProxy::createWebPage):
        * UIProcess/WebProcessProxy.h:

2014-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed iOS Build Fix after r177459.

        * UIProcess/ios/WebInspectorProxyIOS.mm:
        (WebKit::WebInspectorProxy::platformInvalidate):
        (WebKit::WebInspectorProxy::platformHide):
        Add missing WebInspectorProxy platform methods.

2014-12-17  Enrica Casucci  <enrica@apple.com>

        [iOS] Define button and action should respect profile settings.
        https://bugs.webkit.org/show_bug.cgi?id=139739
        rdar://problem/15461887

        Reviewed by Joseph Pecoraro.

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

2014-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: [Mac] Occosional Crashes Closing Inspector
        https://bugs.webkit.org/show_bug.cgi?id=139740

        Reviewed by Timothy Hatcher.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent):
        The WebPageProxy could have gotten destroyed in handling (e.g. keyboard shortcut
        to close the Inspector Window), so protect the object to avoid destruction
        during handling.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebPageProxy.cpp:
        Add platformInvalidate opportunity for the platform to do invalidation work.

        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformInvalidate):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformInvalidate):
        Empty implementations, these ports do not need to do anything.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::closeTimerFired):
        (WebKit::WebInspectorProxy::platformDidClose):
        (WebKit::WebInspectorProxy::platformInvalidate):
        When closing / invalidating make sure we close the WKView to clear client
        for any delayed callbacks.

2014-12-17  Chris Dumez  <cdumez@apple.com>

        [iOS] Make it possible to toggle FeatureCounter support at runtime
        https://bugs.webkit.org/show_bug.cgi?id=139688
        <rdar://problem/19266254>

        Reviewed by Andreas Kling.

        Add private settings API to toggle FeatureCounter support on Safari and
        MobileSafari.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetFeatureCounterEnabled):
        (WKPreferencesGetFeatureCounterEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _featureCounterEnabled]):
        (-[WKPreferences _setFeatureCounterEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2014-12-17  Anders Carlsson  <andersca@apple.com>

        Clean up SQL statement building in SQLiteIDBCursor
        https://bugs.webkit.org/show_bug.cgi?id=139741

        Reviewed by Andreas Kling.

        This vastly simplifies the code and gets rid of the last
        uses of DEPRECATED_DEFINE_STATIC_LOCAL in WebKit2.

        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp:
        (WebKit::buildIndexStatement):
        (WebKit::buildObjectStoreStatement):
        (WebKit::SQLiteIDBCursor::establishStatement):
        (WebKit::getIndexStatement): Deleted.
        (WebKit::getObjectStoreStatement): Deleted.

2014-12-17  Andreas Kling  <akling@apple.com>

        Purge PassRefPtr from Frame.
        <https://webkit.org/b/139731>

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSubframe):

2014-12-17  Dan Bernstein  <mitz@apple.com>

        iOS build fix

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::PageClient::setTextIndicatorAnimationProgress):

2014-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r177427.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setTextIndicatorAnimationProgress):
        * UIProcess/API/gtk/PageClientImpl.h:

2014-12-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r177427.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::setTextIndicatorAnimationProgress): Added.
        * UIProcess/CoordinatedGraphics/WebView.h:

2014-12-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move WebCore/platform/graphics/surfaces to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=139641

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2014-12-16  Timothy Horton  <timothy_horton@apple.com>

        Implement and adopt two new TextIndicator presentation animations
        https://bugs.webkit.org/show_bug.cgi?id=139715
        <rdar://problem/19237945>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setTextIndicator:fadeOut:]):
        (-[WKView _setTextIndicatorAnimationProgress:]):
        (-[WKView _setTextIndicator:fadeOut:animationCompletionHandler:]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setTextIndicatorAnimationProgress):
        (WebKit::WebPageProxy::performActionMenuHitTestAtLocation):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setTextIndicatorAnimationProgress):
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Remove the completion handler block argument from TextIndicator
        installation.
        Plumb animation progress through PageClient to TextIndicatorWindow.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WKImmediateActionController immediateActionRecognizerDidUpdateAnimation:]):
        (-[WKImmediateActionController immediateActionRecognizerDidCancelAnimation:]):
        (-[WKImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):
        (-[WKImmediateActionController _menuItemForDataDetectedText]):
        (-[WKImmediateActionController _animationControllerForText]):
        Forward immediate action gesture recognizer animation progress
        to TextIndicator. Force us to keep the selection when immediate
        action popovers steal first responder status from the WebView.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::textIndicatorTransitionForActionMenu):
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Factor out the presentation animation decision code.
        For immediate actions, of the Lookup range is equal to the
        selection range, use a Crossfade animation; otherwise, use a FadeIn
        animation.
        Push whether the actionMenuHitTest is for an immediate action
        or a menu to the Web process, to make the presentation animation
        decision code live entirely in the Web process.
        Avoid extracting encoded image data if we know we're doing
        an immediate action and will never need it.

2014-12-16  Anders Carlsson  <andersca@apple.com>

        Fix lambda and std::function formatting
        https://bugs.webkit.org/show_bug.cgi?id=139719

        Reviewed by Sam Weinig.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::getOrigins):
        (WebKit::DatabaseProcess::deleteEntriesForOrigin):
        (WebKit::DatabaseProcess::deleteEntriesModifiedBetweenDates):
        (WebKit::DatabaseProcess::deleteAllEntries):
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::deleteDatabase):
        (WebKit::UniqueIDBDatabase::getOrEstablishIDBDatabaseMetadata):
        (WebKit::UniqueIDBDatabase::openTransaction):
        (WebKit::UniqueIDBDatabase::beginTransaction):
        (WebKit::UniqueIDBDatabase::commitTransaction):
        (WebKit::UniqueIDBDatabase::resetTransaction):
        (WebKit::UniqueIDBDatabase::rollbackTransaction):
        (WebKit::UniqueIDBDatabase::postTransactionOperation):
        (WebKit::UniqueIDBDatabase::changeDatabaseVersion):
        (WebKit::UniqueIDBDatabase::createObjectStore):
        (WebKit::UniqueIDBDatabase::deleteObjectStore):
        (WebKit::UniqueIDBDatabase::clearObjectStore):
        (WebKit::UniqueIDBDatabase::createIndex):
        (WebKit::UniqueIDBDatabase::deleteIndex):
        (WebKit::UniqueIDBDatabase::putRecord):
        (WebKit::UniqueIDBDatabase::getRecord):
        (WebKit::UniqueIDBDatabase::openCursor):
        (WebKit::UniqueIDBDatabase::cursorAdvance):
        (WebKit::UniqueIDBDatabase::cursorIterate):
        (WebKit::UniqueIDBDatabase::count):
        (WebKit::UniqueIDBDatabase::deleteRange):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * NetworkProcess/cache/NetworkCacheStorageCocoa.mm:
        (WebKit::NetworkCacheStorage::store):
        * Shared/AsyncTask.h:
        (WebKit::AsyncTask::AsyncTask):
        * Shared/ChildProcess.cpp:
        (WebKit::didCloseOnConnectionWorkQueue):
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::WebContextMenuItemData):
        * Shared/WebContextMenuItemData.h:
        (WebKit::WebContextMenuItemData::selectionHandler):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::responseMap):
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::PluginProcessManager):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::m_processSuppressionDisabledForPageCounter):
        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::CallbackSynchronizer::create):
        (WebKit::CallbackSynchronizer::CallbackSynchronizer):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKSelectionHandlerWrapper initWithSelectionHandler:]):
        (WebKit::nsMenuItemVector):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        (WebKit::WebIDBServerConnection::deleteDatabase):
        (WebKit::WebIDBServerConnection::getOrEstablishIDBDatabaseMetadata):
        (WebKit::WebIDBServerConnection::openTransaction):
        (WebKit::WebIDBServerConnection::beginTransaction):
        (WebKit::WebIDBServerConnection::commitTransaction):
        (WebKit::WebIDBServerConnection::resetTransaction):
        (WebKit::WebIDBServerConnection::rollbackTransaction):
        (WebKit::WebIDBServerConnection::setIndexKeys):
        (WebKit::WebIDBServerConnection::createObjectStore):
        (WebKit::WebIDBServerConnection::createIndex):
        (WebKit::WebIDBServerConnection::deleteIndex):
        (WebKit::WebIDBServerConnection::get):
        (WebKit::WebIDBServerConnection::put):
        (WebKit::WebIDBServerConnection::count):
        (WebKit::WebIDBServerConnection::deleteRange):
        (WebKit::WebIDBServerConnection::clearObjectStore):
        (WebKit::WebIDBServerConnection::deleteObjectStore):
        (WebKit::WebIDBServerConnection::changeDatabaseVersion):
        (WebKit::WebIDBServerConnection::openCursor):
        (WebKit::WebIDBServerConnection::cursorAdvance):
        (WebKit::WebIDBServerConnection::cursorIterate):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:
        * WebProcess/OriginData/WebOriginDataManagerSupplement.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getOrigins):
        (WebKit::WebProcess::deleteEntriesForOrigin):
        (WebKit::WebProcess::deleteEntriesModifiedBetweenDates):
        (WebKit::WebProcess::deleteAllEntries):
        * WebProcess/WebProcess.h:

2014-12-16  Anders Carlsson  <andersca@apple.com>

        Get rid of a couple of binds in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139717

        Reviewed by Sam Weinig.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::postDatabaseTask):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::didShutdownBackingStore):
        (WebKit::UniqueIDBDatabase::postMainThreadTask):
        (WebKit::UniqueIDBDatabase::performNextMainThreadTask):
        (WebKit::UniqueIDBDatabase::postDatabaseTask):
        (WebKit::UniqueIDBDatabase::performNextMainThreadTaskWithoutAdoptRef): Deleted.
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::initializeDeadNameSource):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::processLauncherWorkQueue):
        (WebKit::ProcessLauncher::ProcessLauncher):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::unprotectPluginFromDestruction):
        (WebKit::derefPluginView): Deleted.

2014-12-16  Andreas Kling  <akling@apple.com>

        Use Ref for SecurityOrigin.
        <https://webkit.org/b/139710>

        Reviewed by Anders Carlsson.

        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::databaseFilenameIdentifier):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        (WebKit::WebIDBServerConnection::WebIDBServerConnection):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addOriginAccessWhitelistEntry):
        (WebKit::InjectedBundle::removeOriginAccessWhitelistEntry):

2014-12-16  Anders Carlsson  <andersca@apple.com>

        Remove deprecated StorageNamespaceImpl overloads
        https://bugs.webkit.org/show_bug.cgi?id=139713

        Reviewed by Andreas Kling.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::storageArea):
        (WebKit::StorageNamespaceImpl::copy):
        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace): Deleted.
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace): Deleted.
        * WebProcess/Storage/StorageNamespaceImpl.h:

2014-12-16  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

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

2014-12-16  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Preview popovers obscure the link, look wrong
        https://bugs.webkit.org/show_bug.cgi?id=139711
        -and corresponding-
        rdar://problem/19271854

        Reviewed by Tim Horton.

        Switch to using NSPopoverAnimationController.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController _animationControllerForCustomPreview]):

2014-12-16  Timothy Horton  <timothy_horton@apple.com>

        Immediate action popovers can get stuck open
        https://bugs.webkit.org/show_bug.cgi?id=139709
        <rdar://problem/19270279>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _clearImmediateActionState]):
        Don't clear the animation controller; it breaks things and was unnecessary.

2014-12-16  Conrad Shultz  <conrad_shultz@apple.com>

        Add a progress indicator to the preview popover
        https://bugs.webkit.org/show_bug.cgi?id=139699

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPreviewLoading:]):
        Wrap -[WKImmediateActionController setPreviewLoading:].

        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _createPreviewPopoverIfNeededForURL:]):
        Flag the preview view controller as loading before beginning the load.
        (-[WKImmediateActionController setPreviewLoading:]):
        Wrap -[WKPagePreviewViewController setLoading:].

        * UIProcess/mac/WKPagePreviewViewController.h:
        * UIProcess/mac/WKPagePreviewViewController.mm:
        (-[WKPagePreviewViewController setLoading:]):
        Toggle the progress indicator animation state.
        (-[WKPagePreviewViewController isLoading]):
        Accessor.
        (-[WKPagePreviewViewController loadView]):
        Create and center an indeterminate progress indicator that won't scale with the preview content.

2014-12-16  Enrica Casucci  <enrica@apple.com>

        Fix iOS builders for 8.0
        https://bugs.webkit.org/show_bug.cgi?id=139495

        Reviewed by Jer Noble

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mayAutomaticallyShowVideoOptimized]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:

2014-12-16  Gavin Barraclough  <barraclough@apple.com>

        Move Mac process suppression from WebCore to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139705

        Reviewed by Geoff Garen.

        Currently PageThrottler constructs the PageActivityState, holds a copy of the ViewState,
        and an optional UserActivity.

        Instead, still construct the PageActivityState but just pass this out via the Page to WebPage.
        Logic From PageThrottler::updateUserActivity merged into WebPage::updateUserActivity.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setPageActivityState):
            - added to propagate PageActivityState to WebPage.
        * WebProcess/WebCoreSupport/WebChromeClient.h:
            - added setPageActivityState to propagate PageActivityState to WebPage.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
            - calls to updateUserActivity.
        (WebKit::WebPage::setPageActivityState):
            - calls to updateUserActivity.
        (WebKit::WebPage::updateUserActivity):
            - incorporate logic from PageThrottler::updateUserActivity.
        (WebKit::WebPage::setViewState):
            - calls to updateUserActivity.
        (WebKit::WebPage::updatePreferences):
            - calls to updateUserActivity.
        * WebProcess/WebPage/WebPage.h:
            - added setPageActivityState, m_activityState.

2014-12-16  Anders Carlsson  <andersca@apple.com>

        More StorageManager modernization
        https://bugs.webkit.org/show_bug.cgi?id=139704

        Reviewed by Andreas Kling.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        (WebKit::StorageManager::findStorageArea):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):

2014-12-16  Anders Carlsson  <andersca@apple.com>

        Use Ref in another StorageManager function
        https://bugs.webkit.org/show_bug.cgi?id=139700

        Reviewed by Andreas Kling.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea):

2014-12-16  Anders Carlsson  <andersca@apple.com>

        Use Ref in StorageManager
        https://bugs.webkit.org/show_bug.cgi?id=139698

        Reviewed by Andreas Kling.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::TransientLocalStorageNamespace::create):
        (WebKit::StorageManager::TransientLocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::StorageArea::create):
        (WebKit::StorageManager::StorageArea::clone):
        (WebKit::StorageManager::LocalStorageNamespace::create):
        (WebKit::StorageManager::SessionStorageNamespace::create):
        (WebKit::StorageManager::create):
        * UIProcess/Storage/StorageManager.h:

2014-12-16  Gavin Barraclough  <barraclough@apple.com>

        Split UserActivity from disabled flag in WebPage
        https://bugs.webkit.org/show_bug.cgi?id=139696

        Reviewed by Geoffrey Garen.

        In preparation for other things driving the UserActivity.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
            - initialize new members.
        (WebKit::WebPage::updateUserActivity):
            - start/stop the m_userActivity, based on m_processSupressionEnabled
        (WebKit::WebPage::updatePreferences):
            - call updateUserActivity to account for m_processSupressionEnabled changes.
        * WebProcess/WebPage/WebPage.h:
            - split m_processSuppressionDisabledByWebPreference -> m_processSupressionEnabled, m_userActivity.

2014-12-16  Anders Carlsson  <andersca@apple.com>

        Get rid of PassRefPtr inside StorageManager
        https://bugs.webkit.org/show_bug.cgi?id=139693

        Reviewed by Andreas Kling.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::TransientLocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::StorageArea::create):
        (WebKit::StorageManager::StorageArea::StorageArea):
        (WebKit::StorageManager::StorageArea::clone):
        (WebKit::StorageManager::LocalStorageNamespace::create):
        (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::SessionStorageNamespace::create):
        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::create):
        * UIProcess/Storage/StorageManager.h:

2014-12-16  Tim Horton  <timothy_horton@apple.com>

        Disable TextIndication for Lookup immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=139684

        Reviewed by Anders Carlsson.

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

2014-12-16  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKWebProcessPlugInLoadDelegate can’t tell what type of same-document navigation has happened
        https://bugs.webkit.org/show_bug.cgi?id=139669

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/_WKSameDocumentNavigationType.h: Added. Moved the
        _WKSameDocumentNavigationType type definition here from WKNavigationDelegatePrivate.h.
        * Shared/API/Cocoa/_WKSameDocumentNavigationTypeInternal.h: Added.
        (WebKit::toWKSameDocumentNavigationType): Moved from NavigationState.mm.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toSameDocumentNavigationType): Added this conversion helper.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Added #import.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::toWKSameDocumentNavigationType): Deleted.

        * WebKit2.xcodeproj/project.pbxproj: Updated for added headers.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h: Declared new
        delegate method that take a navigation type parameter.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didSameDocumentNavigationForFrame): Changed to call the new delegate method, passing the
        navigation type.

2014-12-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.7.3 release.

        * gtk/NEWS: Add release notes for 2.7.3.

2014-12-16  Antti Koivisto  <antti@apple.com>

        WebKit level persistent caching
        https://bugs.webkit.org/show_bug.cgi?id=30322

        Minor cleanups based on comments by Joseph Pecoraro.

        * NetworkProcess/cache/NetworkCache.cpp:
        (WebKit::decodeStorageEntry):
        * NetworkProcess/cache/NetworkCache.h:
        * NetworkProcess/cache/NetworkCacheStorage.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):

2014-12-15  Bartlomiej Gajda  <b.gajda@samsung.com>

        Build fix after r177301.
        https://bugs.webkit.org/show_bug.cgi?id=139666

        Reviewed by Gyuyoung Kim.

        * WebProcess/WebPage/CoordinatedGraphics/WebPageCoordinatedGraphics.cpp:
        (WebKit::WebPage::findZoomableAreaForPoint):

2014-12-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Possible crash when setting the WKWebViews's scroll view delegate, if the scroll view outlives the web view
        https://bugs.webkit.org/show_bug.cgi?id=139662
        rdar://problem/18083882

        Reviewed by Benjamin Poulain.
        
        Null out the internal delegate on the WKScrollView when the WKWebView goes away, since
        it's possible for a client to set its own scroll view delegate, forcing the creation of
        a WKScrollViewDelegateForwarder, and then retain the UIScrollView past the lifetime of
        the WKWebView. In this situation, the WKScrollViewDelegateForwarder's internalDelegate
        would point to a deleted WKWebView.

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

2014-12-15  Beth Dakin  <bdakin@apple.com>

        Make lookup an immediate action instead of an action menu item
        https://bugs.webkit.org/show_bug.cgi?id=139661
        -and corresponding-
        rdar://problem/19198414

        Reviewed by Tim Horton.

        New type.
        * Shared/API/c/WKImmediateActionTypes.h:

        ActionMenuHitTestResult now includes a DictionaryPopupInfo.
        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):

        Remove all lookup menu items.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForText]):
        (-[WKActionMenuController _defaultMenuItemsForEditableText]):
        (-[WKActionMenuController _defaultMenuItemsForEditableTextWithSuggestions]):
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        (-[WKActionMenuController _lookupText:]): Deleted.

        Set the defaultAnimationController to the lookup-provided animation controller 
        when appropriate.
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController _animationControllerForText]):

        Re-factor performDictionaryLookupForRange() so that most of the work is done in a 
        new function called dictionaryPopupInfoForRange(). This was that code can be used 
        for both performing a dictionary lookup and just getting the DictionaryPopupInfo 
        for the ActionMenuHitTest.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::dictionaryPopupInfoForRange):
        (WebKit::WebPage::performDictionaryLookupForRange):
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        (WebKit::WebPage::lookupTextAtLocation):

2014-12-15  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Docked inspector repositioned incorrectly when dragging frame borders
        https://bugs.webkit.org/show_bug.cgi?id=139415

        Reviewed by Joseph Pecoraro.

        The _ignoreNextInspectedViewFrameDidChange flag wasn't set back to NO after
        being tested by inspectedViewFrameDidChange.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter inspectedViewFrameDidChange:]):

2014-12-15  Gavin Barraclough  <barraclough@apple.com>

        Simplify tracking of process suppression disabled for PluginProcessManager
        https://bugs.webkit.org/show_bug.cgi?id=139611

        Unreviewed gtk/efl build fix.

        * UIProcess/Plugins/PluginProcessManager.h:
            - missing #ifdef

2014-12-15  Timothy Horton  <timothy_horton@apple.com>

        Implement Data Detectors immediate actions for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139617
        <rdar://problem/19198539>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _menuItemForDataDetectedText]):
        Note that this action context is only for immediate actions.

2014-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments in r177035
        https://bugs.webkit.org/show_bug.cgi?id=139557

        Reviewed by Darin Adler.

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::elementBoundingBoxInWindowCoordinates): Migrate off rendererBoundingBox().
        * WebProcess/WebPage/CoordinatedGraphics/WebPageCoordinatedGraphics.cpp:
        (WebKit::WebPage::findZoomableAreaForPoint): Ditto.

2014-12-15  Timothy Horton  <timothy_horton@apple.com>

        Implement Data Detectors immediate actions for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139617
        <rdar://problem/19198539>

        Reviewed by Beth Dakin.

        * Shared/API/c/WKImmediateActionTypes.h:
        Add a new type.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseDown:]):
        Send mouseDown along to the WKImmediateActionController too.

        (-[WKView initWithFrame:context:configuration:webView:]):
        Temporarily disable action menus.

        (-[WKView _dismissContentRelativeChildWindows]):
        Hide the immediate action preview when detaching child windows.

        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController willDestroyView:]):
        Clear the DDActionContext when tearing down the view.

        (-[WKImmediateActionController wkView:willHandleMouseDown:]):
        (-[WKImmediateActionController _cancelImmediateAction]):
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        (-[WKImmediateActionController _defaultAnimationController]):
        (-[WKImmediateActionController _updateImmediateActionItem]):
        (-[WKImmediateActionController hidePreview]):
        (-[WKImmediateActionController popoverWillClose:]):
        (-[WKImmediateActionController _menuItemForDataDetectedText]):
        Copy most of the DataDetectors implementation into WKImmediateActionController.

2014-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete Notation because we don't use it
        https://bugs.webkit.org/show_bug.cgi?id=139171

        Reviewed by Kent Tamura.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::WKDOMNodeClass):
        * mac/MigrateHeadersFromWebKitLegacy.make:

2014-12-15  David Kilzer  <ddkilzer@apple.com>

        Remove last references to OfflineStorage process
        <http://webkit.org/b/139648>

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Remove last references to
        the OfflineStorage process.  See r154251 and r154256.

2014-12-15  Gavin Barraclough  <barraclough@apple.com>

        Change HysteresisActivity to use a lambda
        https://bugs.webkit.org/show_bug.cgi?id=139636

        Reviewed by Darin Adler.

        The current implementation provides notifications via callbacks to a delegate. Using a delegate
        with callbacks is limiting a number of ways. The callback names are very ambiguous, the callbacks
        must either be on a separate object (more boilerplate), or the callback must be public for
        HysteresisActivity to call them, or friends get involved. Without the boilerplate of extra
        delegate objects it's hard to scale use of these objects - a single object can't serve as a
        delegate for multiple HysteresisActivity members.

        Instead, make HysteresisActivity take a lambda to callback on state change. To simplify, changed
        HysteresisState to only track Started/Stopped states (removed WillStopPendingTimeout).

        * WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.cpp:
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker):
            - HysteresisActivity now takes a lambda, not a delegate.
        (WebKit::WebSQLiteDatabaseTracker::hysteresisUpdated):
        (WebKit::WebSQLiteDatabaseTracker::started): Deleted.
        (WebKit::WebSQLiteDatabaseTracker::stopped): Deleted.
            - started/stopped merged into hysteresisUpdated
        * WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h:
            - HysteresisActivity is no longer templated on delegate type, changed function declarations.

2014-12-15  Antti Koivisto  <antti@apple.com>

        WebKit level persistent caching
        https://bugs.webkit.org/show_bug.cgi?id=30322

        Reviewed by Sam Weinig.

        We can improve performance and open new optimization possibilities by bringing network caching into WebKit.

        This patch implements an experimental HTTP cache living in the network process.

        The main classes are:

        NetworkCache
            - Implements HTTP cache validation logic including Vary header
            - Initially non-range GET only
            - Fast serialization using WebKit types (ResourcesResponse etc) instead of native network layer types

        NetworkCacheKey
            - Unique identifier for cache entries
            - Keyed on method/partition/URL

        NetworkCacheStorage
            - Storage backend
            - dispatch-IO based implementation (generic posix implementation wouldn't be difficult)
            - File system only (no SQLite or similar)
            - One file per resource containing both header and body data
            - Zero persistent global metadata
            - Bloom filter for fast fail

        NetworkCacheEncoder/Decoder
            - Serializisation support with integrity verification.

        The code is behind the NETWORK_CACHE feature flag and requires network process to be enabled to use.

        This patch does not enable the feature yet by default.

        Test: http/tests/cache/disk-cache-validation.html

        * NetworkProcess/cache/NetworkCache.cpp: Added.
        * NetworkProcess/cache/NetworkCache.h: Added.
        * NetworkProcess/cache/NetworkCacheKey.cpp: Added.
        * NetworkProcess/cache/NetworkCacheKey.h: Added.
        * NetworkProcess/cache/NetworkCacheStorage.h: Added.
        * NetworkProcess/cache/NetworkCacheStorage.mm: Added.
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        (WebKit::NetworkProcess::platformSetCacheModel):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::clearCacheForAllOrigins):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::clearCacheForAllOrigins):
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::tryGetShareableHandleFromCFData):
        * Platform/Logging.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * config.h:

2014-12-15  Gavin Barraclough  <barraclough@apple.com>

        Simplify tracking of process suppression disabled for PluginProcessManager
        https://bugs.webkit.org/show_bug.cgi?id=139611

        Reviewed by Darin Adler.

        Previously if process suppression state changed for any context we would
        iterate over all contexts to recompute.

        There was also an inconsistency in the code. When plugin processes are
        created they called processSuppressionIsEnabledForAllContexts(), which
        checked WebContext::processSuppressionEnabled(), which in turn checks
        two things - whether any page is currently visible, and whether the
        suppression is currently disabled for any page. However when updating
        process supression state we would call
        processSuppressionPreferenceIsEnabledForAllContexts(), which would just
        check the value of the key from the context's default PageGroup.

        We shouldn't be taking visibility into account (this is handled from the
        content, where we know which pages have instances of which plugins), but
        we should be checking the current pref value of each page.

        We already track in each context whether any page has teh pref set to
        disable throttling; add a counter to the shared PluginProcessManager to
        coallesce across all contexts.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::PluginProcessManager):
            - added m_processSuppressionDisabledForPageCounter, m_processSuppressionEnabled.
        * UIProcess/Plugins/PluginProcessManager.h:
        (WebKit::PluginProcessManager::processSuppressionDisabledForPageCount):
            - accessor for WebContext to increment count.
        (WebKit::PluginProcessManager::processSuppressionEnabled):
            - accessor for PluginProcessProxy.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):
            - get initial supression state from the PluginProcessManager, not WebContext.
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        (WebKit::PluginProcessManager::updateProcessSuppressionState):
        (WebKit::PluginProcessManager::setProcessSuppressionEnabled): Deleted.
            - setProcessSuppressionEnabled -> updateProcessSuppressionState
              rather than WebContext setting suppression state, PluginProcessManager detects
              when this may need to change & determines a new value for itself.
        * UIProcess/WebContext.h:
            - removed processSuppressionIsEnabledForAllContexts, processSuppressionPreferenceIsEnabledForAllContexts
              updateProcessSuppressionState is no longer const (updates m_pluginProcessManagerProcessSuppressionDisabledCount).
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::updateProcessSuppressionState):
            - instead of explicitly recomputing plugin throttling state from Within the WebContext, just update
              m_pluginProcessManagerProcessSuppressionDisabledCount to count a RefCounter on the shared PluginProcessManager.
        (WebKit::WebContext::processSuppressionIsEnabledForAllContexts): Deleted.
        (WebKit::WebContext::processSuppressionPreferenceIsEnabledForAllContexts): Deleted.
            - removed.

2014-12-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use API::LoaderClient instead of WKPageLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=139583

        Reviewed by Gustavo Noronha Silva.

        It simplifies the code and it will make easier to implement new
        loader client methods.

        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        (webkitBackForwardListChanged):
        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (LoaderClient::LoaderClient):
        (attachLoaderClientToView):
        (didStartProvisionalLoadForFrame): Deleted.
        (didReceiveServerRedirectForProvisionalLoadForFrame): Deleted.
        (didFailProvisionalLoadWithErrorForFrame): Deleted.
        (didCommitLoadForFrame): Deleted.
        (didFinishLoadForFrame): Deleted.
        (didFailLoadWithErrorForFrame): Deleted.
        (didDisplayInsecureContentForFrame): Deleted.
        (didRunInsecureContentForFrame): Deleted.
        (didChangeBackForwardList): Deleted.
        (didReceiveAuthenticationChallengeInFrame): Deleted.
        (processDidCrash): Deleted.

2014-12-15  Gwang Yoon Hwang  <yoon@igalia.com>

        Add initial implementation of ThreadSafeCoordinatedSurface, ThreadedCompositor, and SimpleViewportController
        https://bugs.webkit.org/show_bug.cgi?id=118383

        Reviewed by Martin Robinson.

        Implements an initial version of the Threaded Compositor.

        Threaded Compositor is a variant of Coordinated Graphics implementation.
        Basic structure of the implementaion is simliar, thus, Threaded
        Compositor reuses lots of classes from Coordinated Graphics. However,
        instead of compositing on UI Process, Threaded Compositor performs
        compositing on a dedicate thread of Web Process.

        No new test, because it is in experimental stage.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebKit::CoordinatedGraphicsScene::CoordinatedGraphicsScene):
        Removed a assertion not to force its creation in the main thread. In
        the Threaded Compositor, it can be created in the dedicated thread.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.cpp: Added.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadSafeCoordinatedSurface.h: Added.
        Implements a surface using ImageBuffer as a backend to use in the Web
        Process.

        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h: Added.
        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp: Added.
        Implements a compositor which runs on the created thread. It owns
        SimpleViewportController and CoordinatedGraphicsScene to render scene on the
        actual surface.

        * Shared/CoordinatedGraphics/SimpleViewportController.cpp: Added.
        * Shared/CoordinatedGraphics/SimpleViewportController.h: Added.
        This class is responsible to handle scale factor and scrolling position
        with a simplifed logic in the compositing thread.

2014-12-14  Andreas Kling  <akling@apple.com>

        Replace PassRef with Ref/Ref&& across the board.
        <https://webkit.org/b/139587>

        Reviewed by Darin Adler.

        * UIProcess/WebBackForwardList.h:
        (WebKit::WebBackForwardList::create):
        * UIProcess/WebBatteryManagerProxy.cpp:
        (WebKit::WebBatteryManagerProxy::create):
        * UIProcess/WebBatteryManagerProxy.h:
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::createNonNull):
        * UIProcess/WebPageGroup.h:
        * UIProcess/efl/BatteryProvider.cpp:
        (BatteryProvider::create):
        * UIProcess/efl/BatteryProvider.h:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldApplyStyle):
        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
        (WebKit::WebUserMediaClient::requestPermission):
        * WebProcess/WebCoreSupport/WebUserMediaClient.h:
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::create):
        * WebProcess/WebPage/ViewUpdateDispatcher.h:

2014-12-12  Gavin Barraclough  <barraclough@apple.com>

        Split WebPageProxy::m_preventProcessSuppression to track pref/visibility separately
        https://bugs.webkit.org/show_bug.cgi?id=139600

        Reviewed by Geoff Garen.

        Previously WebPageProxy::m_preventProcessSuppression would be set if either the page was visible
        or its suppression was disabled by the pref. Instead track these separately. This will make the
        user observability state applicable on iOS, too.

        Add a new counter to WebContext, and split the counting in WebPageProxy.
        ::updateProccessSuppressionState continues to track the pref change (which matches its name),
        tracking of user observability changes moved to updateActivityToken (which we should further
        merge with; it already tracks observability to control process state for iOS).

        * UIProcess/WebContext.cpp:
        (WebKit::m_processSuppressionDisabledForPageCounter):
            - added new RefCounter.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::processSuppressionDisabledForPageCount):
            - added new RefCounter.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
            - no longer needs to call updateProccessSuppressionState (pref has not changed; handled by the call to updateActivityToken).
        (WebKit::WebPageProxy::dispatchViewStateChange):
            - no longer needs to call updateProccessSuppressionState (pref has not changed; handled by the call to updateActivityToken).
        (WebKit::WebPageProxy::updateActivityToken):
            - this now also updated the user observability counter.
        (WebKit::WebPageProxy::updateProccessSuppressionState):
            - now only tracks whether this is disabled via the preference.
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
            - clear the user observability counter; thsi will be reset on reattach.
        * UIProcess/WebPageProxy.h:
            - added new RefCounter::Count.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::processSuppressionEnabled):
            - processSuppressionEnabled is disabled if *neither*:
                - there are user observable pages
                - disabled by pref for any page.

2014-12-12  Beth Dakin  <bdakin@apple.com>

        Need a fake mouse move after hiding data detectors UI
        https://bugs.webkit.org/show_bug.cgi?id=139608
        -and corresponding-
        rdar://problem/19221935

        Reviewed by Tim Horton.

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

2014-12-12  Anders Carlsson  <andersca@apple.com>

        Handle caches in WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=139607
        <rdar://problem/19107614>

        Reviewed by Sam Weinig.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessType):

2014-12-12  Enrica Casucci  <enrica@apple.com>

        [iOS] Predictions are not updated when using navigation buttons.
        https://bugs.webkit.org/show_bug.cgi?id=139567
        rdar://problem/19132585

        Reviewed by Dan Bernstein.

        When moving focus programmatically, we need to notify the keyboard so that it
        can update the prediction bar.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession setAccessoryViewCustomButtonTitle:]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView inputAssistantButtonItems]):
        (-[WKContentView accessoryTab:]):
        (-[WKContentView _startAssistingKeyboard]):
        (-[WKContentView _stopAssistingNode]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::focusNextAssistedNode):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::focusNextAssistedNode):

2014-12-12  Timothy Horton  <timothy_horton@apple.com>

        TextIndicator (and other view-relative subwindows) is not dismissed on zoom gesture
        https://bugs.webkit.org/show_bug.cgi?id=139580
        <rdar://problem/19226350>

        Reviewed by Anders Carlsson.

        * UIProcess/PageClient.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::dismissContentRelativeChildWindows):
        (WebKit::PageClientImpl::dismissDictionaryLookupPanel): Deleted.
        (WebKit::PageClientImpl::dismissActionMenuPopovers): Deleted.
        Merge dismissDictionaryLookupPanel and dismissActionMenuPopovers into
        _dismissContentRelativeChildWindows, which also dismisses TextIndicator and the
        text correction panel. Dismissal of any child windows which are anchored to
        the page content now bottlenecks through this function.

        (WebKit::PageClientImpl::navigationGestureDidBegin):
        Dismiss all anchored subwindows when starting a navigation gesture, not
        just TextIndicator and action menu popovers.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView scrollWheel:]):
        No need to dismiss TextIndicator here; we've got this covered in the more-inclusive
        WebPageProxy::pageDidScroll, and will now dismiss more things.

        (-[WKView mouseDown:]):
        Dismiss more things.

        (-[WKView viewDidMoveToWindow]):
        Dismiss more things.

        (-[WKView _dismissContentRelativeChildWindows]):
        The aforementioned combined dismissal function.

        (-[WKView magnifyWithEvent:]):
        (-[WKView smartMagnifyWithEvent:]):
        (-[WKView setMagnification:centeredAtPoint:]):
        (-[WKView setMagnification:]):
        Any time the page magnification changes, dismiss all the things.

        * UIProcess/API/mac/WKViewPrivate.h:
        Expose _dismissContentRelativeChildWindows instead of _dismissActionMenuPopovers;
        for all existing clients, it makes more sense to dismiss all view-relative subwindows
        than just a subset of them.
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::pageDidScroll):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Make use of dismissAnchoredSubwindows.

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        Dismiss more things.

        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        (-[WKActionMenuController dismissActionMenuPopovers]): Deleted.
        dismissActionMenuPopovers is folded into WKView's _dismissContentRelativeChildWindows.

        (-[WKActionMenuController _showTextIndicator]): Deleted.
        (-[WKActionMenuController _hideTextIndicator]): Deleted.
        Fold _showTextIndicator and _hideTextIndicator into their only callers.
        _isShowingTextIndicator was never necessary, because it's OK to change
        the current TextIndicator at any time, and a newer one is always more relevant.

2014-12-12  Gavin Barraclough  <barraclough@apple.com>

        Keep single RefCounter to track whether any pages in a context are process suppressible
        https://bugs.webkit.org/show_bug.cgi?id=139576

        Reviewed by Sam Weinig.

        Currently we keep separate counters in each process, and coallesce these in the
        context. Instead we should have a counter in the WebContext.

        Also, changed the name to better describe the state we're tracking, rather than
        describing what it's currently used for. This counter will also be useful for
        iOS, to better manage background state of the networking process.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
            - initialize m_userObservablePageCounter.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::updateProcessSuppressionState):
            - Added no-op implementation for non-cocoa platforms.
        (WebKit::WebContext::userObservablePageCount):
            - Count the number of user visible (audible / visible) pages in Context.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::updateProccessSuppressionState):
            - WebProcessProxy::processSuppressionCounter -> WebContext::userObservablePageCount
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::didFinishLaunching):
            - moved all processs supression state tracking to the WebContext.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::processSuppressionCounter): Deleted.
            - moved all processs supression state tracking to the WebContext.
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::allPagesAreProcessSuppressible): Deleted.
        (WebKit::WebProcessProxy::updateProcessSuppressionState): Deleted.
            - moved all processs supression state tracking to the WebContext.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::processSuppressionEnabled):
            - no need to interate all processes; just have a single counter.
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::allPagesAreProcessSuppressible): Deleted.
        (WebKit::WebProcessProxy::updateProcessSuppressionState): Deleted.
            - moved all processs supression state tracking to the WebContext.

2014-12-12  Alexey Proskuryakov  <ap@apple.com>

        Layout Test http/tests/loading/307-after-303-after-post.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=73030

        Reviewed by Anders Carlsson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess): Added a FIXME comment.
        (WebKit::WebContext::setIconDatabasePath): Don't enable m_iconDatabase if the path
        is empty, meaning that the database is disabled (which is not a great way to say
        that, but WebKit2 icon database doesn't support enabling/disabling cleanly).
        (WebKit::WebContext::iconDatabasePath): Keep it empty if it was empty.

2014-12-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPreviewTitle:]):

2014-12-12  Timothy Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * UIProcess/mac/WKImmediateActionController.h:

2014-12-12  Rohit Kumar  <kumar.rohit@samsung.com>

        Fix Build Warning in WebKit2/UIProcess module for GTK build and WebKit2/NetworkProcess module in GTK and EFL build
        https://bugs.webkit.org/show_bug.cgi?id=139535

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp: Use UNUSED_PARAM for conditional #if case
        (webkitWebViewShowNotification):
        (webkitWebViewCloseNotification):

2014-12-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Disable all EWK2Accessibility unit tests
        https://bugs.webkit.org/show_bug.cgi?id=139577

        Reviewed by Csaba Osztrogonác.

        WebAccessibility functionality isn't supported by EFL WebKit2 though,
        EWK2Accessibility unit tests have been tested. That's why those tests have been failed
        so far.

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

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

        Layer borders on contentsLayers don't correctly toggle with the rest of the borders
        https://bugs.webkit.org/show_bug.cgi?id=139570
        rdar://problem/18007746

        Reviewed by Tim Horton.
        
        Return nil if the color is invalid, to remove the color from the layer's
        border or background.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::cgColorFromColor):

2014-12-11  Gavin Barraclough  <barraclough@apple.com>

        Track pages preventing suppression in WebProcessProxy using RefCounter
        https://bugs.webkit.org/show_bug.cgi?id=139108

        Reviewed by Benjamin Poulain.

        The networking process is allowed to app nap if all web pages are also currently in app nap.
        In order to detect whether any page in any process currently requires the networking process
        to be active we:
         - maintain hash sets in every WebProcessProxy of pages that are okay with suppression.
         - if anything changes, the WebContext iterates every WebProcessProxy to recompute state.

        This is all crazy - all we actually need is a simple count of the number of pages that need
        to prevent the networking process from entering app nap. This patch gets us half way there -
        replace the HashSet with a RefCounter. Next step will be to hoist the RefCounters from the
        process proxies up to the context to do away with the iteration.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
            - make sure we prevent process suppression, per current viewstate & preferences.
        (WebKit::WebPageProxy::dispatchViewStateChange):
            - make sure we prevent process suppression, per viewstate change.
        (WebKit::WebPageProxy::updateProccessSuppressionState):
            - recompute whether we need to prevent process suppression.
        (WebKit::WebPageProxy::preferencesDidChange):
            - when preferences change process supression may be disabled.
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
            - we need to drop the old ref, to allow a new one to be taken when we reattach.
        (WebKit::WebPageProxy::isProcessSuppressible): Deleted.
            - moreged into updateProccessSuppressionState.
        * UIProcess/WebPageProxy.h:
            - added m_preventProcessSuppression.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
            - initialize m_pagesPreventingSuppression
        (WebKit::WebProcessProxy::createWebPage):
            - moved to WebPageProxy::WebPageProxy
        (WebKit::WebProcessProxy::addExistingWebPage):
            - moved to WebPageProxy::reattachToWebProcess
        (WebKit::WebProcessProxy::removeWebPage):
            - now implicit; when the page is destroyed the RefPtr will release.
        (WebKit::WebProcessProxy::pageSuppressibilityChanged): Deleted.
            - moved to WebPageProxy::dispatchViewStateChange.
        (WebKit::WebProcessProxy::pagePreferencesChanged): Deleted.
            - moved to WebPageProxy::preferencesDidChange.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::preventProcessSuppressionForPage):
            - reference count m_pagesPreventingSuppression
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::allPagesAreProcessSuppressible):
            - converted to use m_pagesPreventingSuppression.
            - removed guard that meant processes with no pages would keep the networking
              process from entering app nap, which made no sense.

2014-12-11  Anders Carlsson  <andersca@apple.com>

        Temporarily use WebCore session storage for transient local storage
        https://bugs.webkit.org/show_bug.cgi?id=139574

        Reviewed by Dan Bernstein.

        * WebProcess/Storage/StorageNamespaceImpl.h:
        Change the header guard so it won't conflict with StorageNamespaceImpl.h in WebCore.

        * WebProcess/Storage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
        Use the WebCore session storage for now, to avoid crashes.

2014-12-11  Commit Queue  <commit-queue@webkit.org>

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

        broke iOS video playback (Requested by eric_carlson on
        #webkit).

        Reverted changeset:

        "Fix iOS builders for 8.0"
        https://bugs.webkit.org/show_bug.cgi?id=139495
        http://trac.webkit.org/changeset/177081

2014-12-11  Beth Dakin  <bdakin@apple.com>

        WK2: Need new SPI for Webkit clients to override default immediate action
        https://bugs.webkit.org/show_bug.cgi?id=139564
        -and corresponding-
        rdar://problem/19225448

        Reviewed by Tim Horton.

        New SPI _immediateActionAnimationControllerForHitTestResult:withType:userData:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _immediateActionAnimationControllerForHitTestResult:withType:userData:]):

        Keep at ivar for the userData so that it can be passed to the new SPI.
        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController didPerformActionMenuHitTest:userData:]):

        Always give the SPI a chance to override the animationController.
        (-[WKImmediateActionController _updateImmediateActionItem]):

        Need to mark WKImmediateActionTypes.h as Private.
        * WebKit2.xcodeproj/project.pbxproj:

2014-12-11  Timothy Horton  <timothy_horton@apple.com>

        Move the preview popover to WebImmediateActionController
        https://bugs.webkit.org/show_bug.cgi?id=139563
        <rdar://problem/19208291>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKImmediateActionController.h:
        Remove an unnecessary forward declaration.

        * UIProcess/mac/WKImmediateActionController.mm:
        (-[WKImmediateActionController willDestroyView:]):
        Clear the immediate action recognizer when the view goes away.

2014-12-11  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:

2014-12-11  Timothy Horton  <timothy_horton@apple.com>

        Move the preview popover to WKImmediateActionController
        https://bugs.webkit.org/show_bug.cgi?id=139560
        <rdar://problem/19208291>

        Reviewed by Beth Dakin.

        * Shared/API/c/WKImmediateActionTypes.h:
        Add a link preview type.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):
        Pass the gesture recognizer to the WKImmediateActionController.

        (-[WKView _setPreviewTitle:]):
        Forward preview title changes to the WKImmediateActionController,
        because that's where the preview popover lives now.

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        Move WKPagePreviewViewController into its own file.
        Move page preview popover related code to WKImmediateActionController.

        * UIProcess/mac/WKImmediateActionController.h:
        * UIProcess/mac/WKImmediateActionController.mm:
        Compare the gesture recognizers directly instead of their views, for accuracy.
        Move page preview popover related code in from WKActionMenuController.
        Some of this should eventually move to WKPagePreviewViewController, but
        for now for ease of transition we will move it here.

        * UIProcess/mac/WKPagePreviewViewController.h: Added.
        * UIProcess/mac/WKPagePreviewViewController.mm: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        Move WKPagePreviewViewController into its own file.

2014-12-11  Tomas Popela  <tpopela@redhat.com>

        [GTK] Minor fixes for documentation and translations
        https://bugs.webkit.org/show_bug.cgi?id=139450

        Reviewed by Sergio Villar Senin.

        * UIProcess/API/gtk/WebKitNavigationAction.cpp:
        Fix typo in documentation.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        Mark zoom-level and is-loading properties names for translation and
        when touching them also fix the indentation style.

2014-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Inspector Process crash when navigating to non-inspectable page
        https://bugs.webkit.org/show_bug.cgi?id=139508

        Reviewed by Zalan Bujtas.

        The Inspector Process can still receive InspectorFrontendHost messages
        even though the backend connection has been invalidated and cleared.
        Only send messages if the connection exists.

        * WebProcess/WebPage/WebInspectorUI.cpp:
        (WebKit::WebInspectorUI::openInNewTab):
        (WebKit::WebInspectorUI::sendMessageToBackend):

2014-12-11  Yongjun Zhang  <yongjun_zhang@apple.com>

        WebKit2 should expose FirstVisuallyNonEmptyLayout rendering milestone.
        https://bugs.webkit.org/show_bug.cgi?id=139514

        Expose DidFirstVisuallyNonEmptyLayout so that WebKit2 client can listen to visually non-empty layout rendering event.

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WKRenderingProgressEvents.h: Add WKRenderingProgressEventFirstVisuallyNonEmptyLayout to WKRenderingProgressEvents.
        * Shared/API/Cocoa/WKRenderingProgressEventsInternal.h: Also map kWKDidFirstVisuallyNonEmptyLayout to WKRenderingProgressEventFirstVisuallyNonEmptyLayout.
        (renderingProgressEvents):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (layoutMilestones): Map _WKRenderingProgressEventFirstVisuallyNonEmptyLayout to WebCore::DidFirstVisuallyNonEmptyLayout.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/NavigationState.mm: Add _WKRenderingProgressEventFirstVisuallyNonEmptyLayout to _WKRenderingProgressEventFirstLayout.
        (WebKit::renderingProgressEvents): Map WebCore::DidFirstVisuallyNonEmptyLayout to _WKRenderingProgressEventFirstVisuallyNonEmptyLayout.

2014-12-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Disable backspace key navigation
        https://bugs.webkit.org/show_bug.cgi?id=136231

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): remove handling
        for backspace and <shift>backspace key combinations.

2014-12-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] String changes for the HTTP authentication dialog
        https://bugs.webkit.org/show_bug.cgi?id=136782

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (webkitAuthenticationDialogInitialize): Add a title to the dialog, add
        some missing mnemonics, and tweak a few strings.

2014-12-09  Jeremy Jones  <jeremyj@apple.com>

        Restore interface state when stopping optimized fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=139465

        Reviewed by Simon Fraser.

        Implement fullscreenMayReturnToInline() to request the client application show the corresponding tab.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::fullscreenMayReturnToInline): added
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: add declaration
        * UIProcess/Cocoa/UIDelegate.h: add declaration
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate): check for responds to selector
        (WebKit::UIDelegate::UIClient::fullscreenMayReturnToInline): added
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::fullscreenMayReturnToInline): added.
        * UIProcess/WebPageProxy.h: add declaration
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h: add declaration
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::fullscreenMayReturnToInline): show the tab.

2014-12-11  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (Async Text Input): Text input method state is not reset when reloading a page
        https://bugs.webkit.org/show_bug.cgi?id=139504
        rdar://problem/19034674

        Reviewed by Enrica Casucci.

        WebKit2 used to look at EditorState changes and guess when to cancel a composition.
        This was quite unreliable, and needlessly complicated - WebCore knows when it decides
        to destroy a composition, so it now explicitly notifies the clients.

        * UIProcess/API/mac/WKView.mm: (-[WKView _processDidExit]): Address crashing case too.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::discardedComposition):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection):
        (WebKit::WebPage::discardedComposition):
        * WebProcess/WebPage/WebPage.h:

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Get rid of the storage strategy
        https://bugs.webkit.org/show_bug.cgi?id=139519

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createStorageStrategy): Deleted.
        * NetworkProcess/NetworkProcessPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createStorageStrategy): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2014-12-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitNotification is defined twice
        https://bugs.webkit.org/show_bug.cgi?id=139538

        Reviewed by Martin Robinson.

        Remove the typedef from WebKitForwardDeclarations.h since it's
        already in WebKitNotification.h and include WebKitNotification.h
        in WebKitWebView.h.

        * UIProcess/API/gtk/WebKitForwardDeclarations.h:
        * UIProcess/API/gtk/WebKitWebView.h:

2014-12-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move click counter logic back to WebKitWebViewBase
        https://bugs.webkit.org/show_bug.cgi?id=137685

        Reviewed by Martin Robinson.

        It was moved to a shared class in platform to be used by both
        WebKit1 and WebKit2, but it's currently only used by WebKitWebViewBase.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (ClickCounter::reset):
        (ClickCounter::currentClickCountForGdkButtonEvent):
        (webkitWebViewBaseButtonPressEvent):

2014-12-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [SOUP] [GTK] warning: unused parameter at NetworkProcessSoup.cpp after r177056.
        https://bugs.webkit.org/show_bug.cgi?id=139534

        Reviewed by Martin Robinson.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::clearDiskCache): Comment the parameter names.

2014-12-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Timers might never be fired during animations
        https://bugs.webkit.org/show_bug.cgi?id=139062

        Reviewed by Martin Robinson.

        This can happen in old/slow machines where the time to render
        layers might take more than 0.016. Since the layer flush timer is
        using a higher priority than WebCore timers, when scheduling all
        (or several) layer flushes immediately, no other sources with
        lower priority are dispatched in the main loop. We could detect if
        we are scheduling layer flushes immediately for too long (100ms)
        and schedule the next flush after a delay to ensure other sources
        with lower priority have a chance to be dispatched. Also use a
        lower priority, GDK_PRIORITY_EVENTS is too high, so we use
        GDK_PRIORITY_REDRAW - 1 to ensure it's higher than WebCore timers.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk): Rename
        m_lastFlushTime as m_lastImmediateFlushTime.
        (WebKit::LayerTreeHostGtk::layerFlushTimerFired): Save the
        fireTime before calling flushAndRenderLayers() and compute the
        next flush delay based on the elapsed time using monotonically
        increasing time instead of current time. Use the target delay
        as next flush delay if we have scheduled flushes immediately for
        more than 100ms.
        (WebKit::LayerTreeHostGtk::flushAndRenderLayers): Do not save the
        layer flush time here, it's done in layerFlushTimerFired() so that
        we don't need to keep it as a member.
        (WebKit::LayerTreeHostGtk::scheduleLayerFlush): Use global
        layerFlushTimerPriority.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2014-12-10  Jaehun Lim  <ljaehun.lim@samsung.com>

        [CMake] Fix build after WebStorageNamespaceProvider

        Unreviewed, fix build.

        * CMakeLists.txt: Add WebStorageNamespaceProvider.cpp to the source list.

2014-12-10  Sanghyup Lee  <sh53.lee@samsung.com>

        Build fix for EFL and GTK ports since r177104
        https://bugs.webkit.org/show_bug.cgi?id=139513

        Reviewed by Tim Horton.

        Moved WebPageProxy::installViewStateChangeCompletionHandler in PLATFORM(MAC) macro.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Switch WebKit2 over to using the storage namespace provider
        https://bugs.webkit.org/show_bug.cgi?id=139509

        Reviewed by Tim Horton.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::~StorageNamespaceImpl):
        (WebKit::localStorageNamespaceMap): Deleted.
        Get rid of the storage namespace map - we have a map inside WebStorageNamespaceProvider now.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createStorageStrategy):
        (WebKit::WebPlatformStrategies::populatePluginCache): Deleted.
        (WebKit::WebPlatformStrategies::localStorageNamespace): Deleted.
        (WebKit::WebPlatformStrategies::transientLocalStorageNamespace): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        Get rid of the storage strategy.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Set a storage namespace provider.

2014-12-10  Beth Dakin  <bdakin@apple.com>

         Follow-up build fix.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):

2014-12-09  Jon Honeycutt  <jhoneycutt@apple.com>

        Null dereference performing a "TapAndAHalf" gesture in Google search field

        <https://bugs.webkit.org/show_bug.cgi?id=139506>
        <rdar://problem/19028828>

        Reviewed by Darin Adler.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):
        Add a null check in the case that there is no word range for the
        current position.

2014-12-10  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):

2014-12-10  Beth Dakin  <bdakin@apple.com>

        WK2: Add initial support for immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=139511

        Reviewed by Tim Horton.

        New enum to track immediate action types as we add them.
        * Shared/API/c/WKImmediateActionTypes.h: Added.

        Create an NSImmediateActionGestureRecognizer if possible and a controller.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView initWithFrame:context:configuration:webView:]):
        (-[WKView _didPerformActionMenuHitTest:userData:]):

        This basic implementation of the controller will use the delegate methods to 
        perform an ActionMenuHitTest when relevant. Future patches will patch 
        _updateImmediateActionItem to use the hit test result to determine if there is any 
        immediate action that should be taken.
        * UIProcess/mac/WKImmediateActionController.h: Added.
        * UIProcess/mac/WKImmediateActionController.mm: Added.
        (-[WKImmediateActionController willDestroyView:]):
        (-[WKImmediateActionController _clearImmediateActionState]):
        (-[WKImmediateActionController didPerformActionMenuHitTest:userData:]):

        Does much of the work done in Action Menu’s prepareForMenu.
        (-[WKImmediateActionController immediateActionRecognizerWillPrepare:]):

        Does much of the work done in Action Menu’s menuNeedsUpdate.
        (-[WKImmediateActionController immediateActionRecognizerWillBeginAnimation:]):

        Does much of the work done in Action Menu’s didCloseMenu.
        (-[WKImmediateActionController immediateActionRecognizerDidCancelAnimation:]):

        Does much of the work done in Action Menu’s willOpenMenu.
        (-[WKImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):

        To be filled in.
        (-[WKImmediateActionController _updateImmediateActionItem]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-12-10  Timothy Horton  <timothy_horton@apple.com>

        Should have copy and paste items in all text menus
        https://bugs.webkit.org/show_bug.cgi?id=139510
        <rdar://problem/19198388>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForText]):
        Add a disabled paste menu item into the read-only text menu.

        (-[WKActionMenuController _defaultMenuItemsForWhitespaceInEditableArea]):
        Add a disabled copy menu item into the editable whitespace text menu.

2014-12-10  Martin Hock  <mhock@apple.com>

        [iOS] Add setting to ignore viewport scaling constraints
        https://bugs.webkit.org/show_bug.cgi?id=139466
        <rdar://problem/19200328>

        Reviewed by Benjamin Poulain.

        * Shared/WebPreferencesDefinitions.h: Add ignoreViewportScalingConstraints preference.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetIgnoreViewportScalingConstraints):
        (WKPreferencesGetIgnoreViewportScalingConstraints):
        * UIProcess/API/C/WKPreferencesRef.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2014-12-10  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _targetWindowForMovePreparation]):

2014-12-10  Timothy Horton  <timothy_horton@apple.com>

        Provide SPI to asynchronously move a WKView into a window and know when it has painted
        https://bugs.webkit.org/show_bug.cgi?id=139460
        <rdar://problem/19135389>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Add _prepareForMoveToWindow:withCompletionHandler:, which internally
        goes through the motions of being parented in that window and calls
        the completion handler once painting is done and the view is ready
        to be displayed (upon which we expect the view to actually move into the window).

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewWillMoveToWindow:]):
        If we currently have a _targetWindowForMovePreparation (and are
        pretending to be in that window), avoid performing viewWillMoveToWindow:
        for a different window.

        (-[WKView viewDidMoveToWindow]):
        (-[WKView doWindowDidChangeScreen]):
        (-[WKView _intrinsicDeviceScaleFactor]):
        (-[WKView _colorSpace]):
        (-[WKView _targetWindowForMovePreparation]):
        If we have a _targetWindowForMovePreparation, use its properties instead
        of self.window's.

        (-[WKView _prepareForMoveToWindow:withCompletionHandler:]):
        Simulate a move into the target window, but defer sending the view state update.
        Then, send the view state update after registering the completion handler.

        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Rename m_viewStateChangeWantsReply to m_viewStateChangeWantsSynchronousReply.

        (WebKit::WebPageProxy::installViewStateChangeCompletionHandler):
        Added. Allow installing a block that will be called the next time
        we get a didUpdateViewState back from the WebProcess after pushing the
        current view state changes.

        (WebKit::WebPageProxy::viewStateDidChange):
        Adapt to the aforementioned rename.

        (WebKit::WebPageProxy::dispatchViewStateChange):
        Adapt to the aforementioned rename.
        Send the view state change callback IDs along with SetViewState.

        (WebKit::WebPageProxy::updateViewState):
        Adapt to the aforementioned rename.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::activeWindow):
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewVisibleOrOccluded):
        (WebKit::PageClientImpl::isViewInWindow):
        (WebKit::PageClientImpl::viewLayerHostingMode):
        If we have a _targetWindowForMovePreparation, use its properties instead
        of the WKView's window's.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::viewStateDidChange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::reinitializeWebPage):
        (WebKit::WebPage::setViewState):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::viewStateDidChange):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::viewStateDidChange):
        Push the callback IDs to the WebProcess, and accumulate them in TiledCoreAnimationDrawingArea.

        (WebKit::TiledCoreAnimationDrawingArea::didUpdateViewStateTimerFired):
        Call all of the callbacks after one runloop cycle, just like DidUpdateViewState.

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Add session storage handling to StorageNamespaceProvider
        https://bugs.webkit.org/show_bug.cgi?id=139507

        Reviewed by Tim Horton.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
        * WebProcess/Storage/StorageNamespaceImpl.h:
        * WebProcess/Storage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace):
        * WebProcess/Storage/WebStorageNamespaceProvider.h:

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Implement the rest of the transient local storage namespace code
        https://bugs.webkit.org/show_bug.cgi?id=139505

        Reviewed by Tim Horton.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::TransientLocalStorageNamespace::create):
        (WebKit::StorageManager::TransientLocalStorageNamespace::~TransientLocalStorageNamespace):
        (WebKit::StorageManager::TransientLocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::TransientLocalStorageNamespace::clearStorageAreasMatchingOrigin):
        (WebKit::StorageManager::TransientLocalStorageNamespace::clearAllStorageAreas):
        (WebKit::StorageManager::TransientLocalStorageNamespace::TransientLocalStorageNamespace):
        Introduce a new TransientLocalStorageNamespace that's just a glorified SecurityOrigin -> StorageArea HashMap.

        (WebKit::StorageManager::StorageArea::create):
        Change the return type to RefPtr.

        (WebKit::StorageManager::deleteEntriesForOrigin):
        (WebKit::StorageManager::deleteAllEntries):
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        Use lambdas instead of bind. Delete the transient local storage as well.

        (WebKit::StorageManager::createTransientLocalStorageMap):
        Get a transient local storage namespace and ask it for a storage area.

        (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
        Look up the namespace from the map and create one if it doesn't exist.

        (WebKit::StorageManager::deleteEntriesForOriginInternal): Deleted.
        (WebKit::StorageManager::deleteAllEntriesInternal): Deleted.

        * UIProcess/Storage/StorageManager.h:

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Begin fixing transient local storage handling
        https://bugs.webkit.org/show_bug.cgi?id=139503

        Reviewed by Sam Weinig.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createTransientLocalStorageMap):
        * UIProcess/Storage/StorageManager.h:
        Add empty stub implementation of createTransientLocalStorageMap.

        * UIProcess/Storage/StorageManager.messages.in:
        Add CreateTransientLocalStorageMap message.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        If we have a local storage namespace with a non-null top-level origin, create a 
        transient local storage map.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        Pass a null top-level origin to the StorageNamespaceImpl constructor.

        (WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace):
        Create a new StorageNamespaceImpl, passing the top-level origin to the constructor.

        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
        Pass a null top-level origin to the StorageNamespaceImpl constructor.

        (WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
        Add a top-level origin parameter.

        * WebProcess/Storage/StorageNamespaceImpl.h:
        (WebKit::StorageNamespaceImpl::topLevelOrigin):
        Add top-level origin member and getter.

        * WebProcess/Storage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
        Call StorageNamespaceImpl::createTransientLocalStorageNamespace.

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Implement WebStorageNamespaceProvider::createLocalStorageNamespace
        https://bugs.webkit.org/show_bug.cgi?id=139498

        Reviewed by Beth Dakin.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        Add a new overload that takes an identifier + quota. Have the old overload call the new one.

        * WebProcess/Storage/StorageNamespaceImpl.h:
        Add new member.

        * WebProcess/Storage/WebStorageNamespaceProvider.cpp:
        (WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):
        Call StorageNamespaceImpl::createLocalStorageNamespace.

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Add a stubbed out WebStorageNamespaceProvider class to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139497

        Reviewed by Beth Dakin.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebStorageNamespaceProvider.cpp: Added.
        (WebKit::storageNamespaceProviders):
        (WebKit::WebStorageNamespaceProvider::getOrCreate):
        (WebKit::WebStorageNamespaceProvider::WebStorageNamespaceProvider):
        (WebKit::WebStorageNamespaceProvider::~WebStorageNamespaceProvider):
        (WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):
        (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace):
        * WebProcess/Storage/WebStorageNamespaceProvider.h: Added.

2014-12-10  Enrica Casucci  <enrica@apple.com>

        Fix iOS builders for 8.0
        https://bugs.webkit.org/show_bug.cgi?id=139495

        Reviewed by Eric Carlson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _mayAutomaticallyShowVideoOptimized]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:

2014-12-10  Julien Isorce  <j.isorce@samsung.com>

        [GTK] Enable depth 32 for the RedirectedXCompositeWindow
        https://bugs.webkit.org/show_bug.cgi?id=139028

        On gtk/X11, the layout compositing is done in the web process.
        If one needs to handle alpha with the rest of the application
        then it is not enough to make to browser's window as RGBA.
        The shared redirected window needs to be RGBA as well.
        (The shared X composite window between UIProcess and WebProcess).

        This allows an end-to-end RGBA solution when the application
        wants to interact with the alpha channel at compositing time.
        For example for transparent Web UI.

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseConstructed):
        (webkitWebViewRenderAcceleratedCompositingResults):
        (webkitWebViewBaseUpdatePreferences):
        (webkitWebViewBaseCreateWebPage):
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp:
        (WebKit::RedirectedXCompositeWindow::create):
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        * UIProcess/gtk/RedirectedXCompositeWindow.h:

2014-12-09  Claudio Saavedra  <csaavedra@igalia.com> and Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK][WK2] Add HTML5 Notifications support
        https://bugs.webkit.org/show_bug.cgi?id=61140

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: add new files to the build.
        * UIProcess/API/gtk/WebKitForwardDeclarations.h:
        * UIProcess/API/gtk/WebKitNotification.cpp: Added. New GObject used to expose information about
        the notification to the API.
        (webkitNotificationGetProperty):
        (webkit_notification_class_init):
        (webkitNotificationCreate):
        (webkit_notification_get_id):
        (webkit_notification_get_title):
        (webkit_notification_get_body):
        * UIProcess/API/gtk/WebKitNotification.h: Added.
        * UIProcess/API/gtk/WebKitNotificationPermissionRequest.cpp: Added. Permission request object
        for notifications.
        (webkitNotificationPermissionRequestAllow):
        (webkitNotificationPermissionRequestDeny):
        (webkit_permission_request_interface_init):
        (webkitNotificationPermissionRequestDispose):
        (webkit_notification_permission_request_class_init):
        (webkitNotificationPermissionRequestCreate):
        * UIProcess/API/gtk/WebKitNotificationPermissionRequest.h: Added.
        * UIProcess/API/gtk/WebKitNotificationPermissionRequestPrivate.h: Added.
        * UIProcess/API/gtk/WebKitNotificationPrivate.h: Added.
        * UIProcess/API/gtk/WebKitNotificationProvider.cpp: Added. Notification provider that emits signals.
        The C API allows overriding the notification providers and managers for customizing the handling of
        notifications. We decided to go for a single manager and a single provider which provide more idiomatic
        GObject API - signals.
        (toNotificationProvider):
        (showCallback):
        (cancelCallback):
        (WebKitNotificationProvider::~WebKitNotificationProvider):
        (WebKitNotificationProvider::create):
        (WebKitNotificationProvider::WebKitNotificationProvider):
        (WebKitNotificationProvider::show):
        (WebKitNotificationProvider::cancel):
        * UIProcess/API/gtk/WebKitNotificationProvider.h: Added.
        * UIProcess/API/gtk/WebKitUIClient.cpp: implemented decidePolicyForNotificationPermissionRequest.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed): initialize the notification provider.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewShowNotification): default implementation for showing the notification, currently
        using GNotification, about to be ported to libnotify.
        (webkit_web_view_class_init): set the default implementation for the show-notification signal.
        (webkitWebViewEmitCloseNotification): emit the close-notification signal.
        (webkitWebViewEmitShowNotification): emit the show-notification signal.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: list new objects and methods.
        * UIProcess/API/gtk/webkit2.h: include new headers.

2014-12-10  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][[WK2] test_ewk2_text_checker is failed
        https://bugs.webkit.org/show_bug.cgi?id=132982

        Reviewed by Gyuyoung Kim.

        Insert misspelled word to the input field using execCommand instead of
        input.value attribute change which stops spell check, tracked by
        https://bugs.webkit.org/show_bug.cgi?id=139473.

        Since text checker API tests do not verify spellchecker itself (it's being
        tested by LayoutTests/editing/spelling) but rather opportunity for overriding
        its functionality this patch unskips those tests in order to API coverage.

        * PlatformEfl.cmake:
        Unskip test_ewk2_text_checker

        * UIProcess/API/efl/tests/resources/spelling_test.html:
        Use document.execCommand("InsertText", false, "aa ") instead of
        input.value = "aa " to trigger spellchecker.

2014-12-10  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r177038): [SOUP] [GTK] Debug build broken
        https://bugs.webkit.org/show_bug.cgi?id=139475

        Reviewed by Martin Robinson.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::clearCacheForAllOrigins): Call clearDiskCache().
        (WebKit::NetworkProcess::clearDiskCache): Implement this for SOUP.
        SoupCache don't seems to have API for clearing a part of the cache,
        so add a FIXME note regarding that.

2014-12-09  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r177032.

        * CMakeLists.txt:

2014-12-09  Alexey Proskuryakov  <ap@apple.com>

        Kotoeri sometimes doesn't correctly process the first chanaracter in a text field in Safari 7.1 or 6.2
        https://bugs.webkit.org/show_bug.cgi?id=139459
        rdar://problem/19017432
        rdar://problem/19036869

        Reviewed by Enrica Casucci.

        When inputContext changes, notify the application. We already did this when the context
        changed due to plug-ins, and this used to sort of make it work on on yahoo.co.jp,
        which has plug-ins. But that was quite unreliable, as evidenced by the reproducible
        cases where we didn't use an input method for the first keypress.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::notifyApplicationAboutInputContextChange):

2014-12-09  Jeremy Jones  <jeremyj@apple.com>

        Enable automatic optimized fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=139437

        Reviewed by Simon Fraser.

        Anticipate the automatic transition to optimized video fullscreen mode when deciding if the page is visible.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isShowingVideoOptimized]): Renamed. Test precondition.
        (-[WKWebView _mayAutomaticallyShowVideoOptimized]): Added.
        (-[WKWebView _isPlayingFullscreenOptimizedVideo]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewVisible): Test for optimized modes even when not in a window.

2014-12-09  Anders Carlsson  <andersca@apple.com>

        Add support for clearing the disk cache
        https://bugs.webkit.org/show_bug.cgi?id=139458

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        If we're asked to clear the disk cache, do so. Clearing the cache is asynchronous,
        so we make sure not to call the completion handler right away in that case.

        * NetworkProcess/NetworkProcess.h:
        Add clearDiskCache member function.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::clearDiskCache):
        Clear the disk cache, then call the completion handler.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::clearCacheForAllOrigins):
        Call the new clearDiskCache function.

        * Shared/WebsiteData/WebsiteDataTypes.h:
        Add WebsiteDataTypeDiskCache.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (toWebsiteDataTypes):
        Handle WKWebsiteDataTypeDiskCache.

2014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete Node::boundingBox()
        https://bugs.webkit.org/show_bug.cgi?id=139333

        Reviewed by Zalan Bujtas.

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::elementBoundingBoxInWindowCoordinates):
        Use RenderObject::absoluteBoundingBoxRect().
        * WebProcess/WebPage/CoordinatedGraphics/WebPageCoordinatedGraphics.cpp:
        (WebKit::WebPage::findZoomableAreaForPoint): Use
        RenderObject::absoluteBoundingBoxRect().

2014-12-09  Chris Dumez  <cdumez@apple.com>

        [WK2] Crash when answering notification permission request after navigating
        https://bugs.webkit.org/show_bug.cgi?id=139429
        <rdar://problem/18921122>

        Reviewed by Andreas Kling.

        When requesting a notification permission, navigating away and then
        answering the permission, WebKit2 would crash. This is because upon
        navigating, the request is cancelled and removed from the HashMaps
        in NotificationPermissionRequestManager. When
        didReceiveNotificationPermissionDecision() is later called, it would
        look for the request identifier in m_idToOriginMap HashMap. As the
        request was cancelled, HashMap::take() call would return null for
        the SecurityOrigin*. This security origin pointer is then removed
        from m_originToIDMap, but the code was failing to do a null check
        first. Calling HashMap::remove(nullptr) would then crash.

        This patch adds the missing null check and a layout test to cover
        this case.

        Test: http/tests/notifications/legacy/notification-request-permission-then-navigate.html
        

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::didReceiveNotificationPermissionDecision):

2014-12-09  Anders Carlsson  <andersca@apple.com>

        Implement clearing of cookies
        https://bugs.webkit.org/show_bug.cgi?id=139455

        Reviewed by Andreas Kling.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::deleteWebsiteData):
        Handle deleting cookies by finding the right network storage session and deleting the cookies from it.
        Then, send a DidDeleteWebsiteData message back.

        * NetworkProcess/NetworkProcess.h:
        Add new members.

        * NetworkProcess/NetworkProcess.messages.in:
        Add new DeleteWebsiteData message.

        * Shared/WebsiteData/WebsiteDataTypes.h:
        Move the website data types enum to its own file so it can be shared.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (toWebsiteDataTypes):
        Update now that WebsiteDataTypes is its own enum.

        (-[_WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        removeDataModifiedSince was renamed to removeData.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::generateCallbackID):
        Helper function to create a callback ID.

        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        Assert that we have no pending callbacks.

        (WebKit::NetworkProcessProxy::deleteWebsiteData):
        Put the completion handler in our map and message the network process.

        (WebKit::NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch):
        Call all completion handlers.

        (WebKit::NetworkProcessProxy::didDeleteWebsiteData):
        Grab the completion handler and call it.

        * UIProcess/Network/NetworkProcessProxy.h:
        Add new members.

        * UIProcess/Network/NetworkProcessProxy.messages.in:
        Add DidDeleteWebsiteData callback.

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::computeNetworkProcessAccessType):
        Helper function that computes the type of process access we'd need for the given mask of
        website data types.

        (WebKit::WebsiteDataStore::removeData):
        Gather all the network processes and message them. Use a callback aggregator object to track callbacks
        so we'll call the completion handler once all callbacks have been invoked.

        * UIProcess/WebsiteData/WebsiteDataStore.h:
        Move WebsiteDataTypes to its own file.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

2014-12-09  Anders Carlsson  <andersca@apple.com>

        Give WebsiteDataStore a unique ID
        https://bugs.webkit.org/show_bug.cgi?id=139448

        Reviewed by Andreas Kling.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::generateIdentifier):
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h:
        (WebKit::WebsiteDataStore::identifier):

2014-12-09  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:

2014-12-09  Ting-Wei Lan  <lantw44@gmail.com>

        [GTK] LDFLAGS is ignored when running g-ir-scanner
        https://bugs.webkit.org/show_bug.cgi?id=138832

        Reviewed by Carlos Garcia Campos.

        GTK+ requires libintl on FreeBSD because there is no gettext
        implementation in FreeBSD libc. In order to link to libintl, which is
        not located in the default search path of the linker, we need to add
        the required path via the linker command line. However, LDFLAGS is
        ignored when running g-ir-scanner starting from r167873, so we have
        to manually pick required flags from CMAKE_SHARED_LINKER_FLAGS and
        put them in correct order to prevent g-ir-scanner from linking to
        the installed version of libraries.

        * PlatformGTK.cmake:

2014-12-09  Jeremy Jones  <jeremyj@apple.com>

        Enable activating optimized fullscreen mode from standard fulscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=139137

        Reviewed by Simon Fraser.

        Going from standard fullscreen mode to optimized fullscreen mode requires the ability to
        update the fullscreen mode and a new standard-and-optimized-fullscreen mode.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isPlayingFullscreenOptimizedVideo]): 
        Treat new standard-and-optimized as a kind of optimized.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h: IPC fullscreen mode changes
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm: ditto
        (WebKit::WebVideoFullscreenManagerProxy::fullscreenModeChanged): dito
        * WebProcess/ios/WebVideoFullscreenManager.h: ditto
        * WebProcess/ios/WebVideoFullscreenManager.messages.in: ditto
        * WebProcess/ios/WebVideoFullscreenManager.mm: dito
        (WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager): ditto
        (WebKit::WebVideoFullscreenManager::setFullscreenModeChanged): ditto

2014-12-08  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL] Use DependenciesEFL instead of Dependencies

        Unreviewed, fix simple typo.

        * PlatformEfl.cmake:

2014-12-08  Beth Dakin  <bdakin@apple.com>

        Copy and Lookup menu items should be disabled when something is not copyable
        https://bugs.webkit.org/show_bug.cgi?id=139423

        Reviewed by Tim Horton.

        Add allowsCopy to the WebHitTestResult.
        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::Data):
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h:
        (WebKit::WebHitTestResult::allowsCopy):

        Set autoenablesItems to NO. It’s messing with our ability to control the enable/
        disable state otherwise.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):

        Disable both lookup and copy when a WebHitTestResult does not allow copy.
        * UIProcess/mac/WKActionMenuController.mm:

2014-12-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/18905383> [iOS] Crash due to null m_webPageProxyForBackForwardListForCurrentSwipe in ViewGestureController::endSwipeGesture
        https://bugs.webkit.org/show_bug.cgi?id=138750

        Reviewed by Tim Horton.

        The snapshot for the current gesture was being removed mid-gesture by the callback from
        dispatchAfterEnsuringDrawing scheduled by the previous gesture. The fix is to ignore the
        callback for a gesture if it is made after the snapshot for that gesture has already been
        removed (which can happen as a result of the watchdog timer firing).

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::ViewGestureController): Initialize new member variable.
        (WebKit::addLogEntry): Fixed the log message format.
        (WebKit::ViewGestureController::endSwipeGesture): When dispatchAfterEnsuringDrawing() calls
        us back, bail out if the gesture snapshot has already been removed.
        (WebKit::ViewGestureController::removeSwipeSnapshot): Increment
        m_gesturePendingSnapshotRemoval.
        * UIProcess/mac/ViewGestureController.h: Added m_gesturePendingSnapshotRemoval member
        variable.

2014-12-08  Anders Carlsson  <andersca@apple.com>

        The website data store should know all its associated pages
        https://bugs.webkit.org/show_bug.cgi?id=139411

        Reviewed by Tim Horton.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        (WebKit::WebsiteDataStore::addWebPage):
        (WebKit::WebsiteDataStore::removeWebPage):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2014-12-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/18046692> [iOS] Safari crashes at -[_NSUndoStack popAndInvoke] when trying to undo typing on closed tab
        https://bugs.webkit.org/show_bug.cgi?id=139408

        Reviewed by Anders Carlsson.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView undoManager]): Override to initialize if necessary and return a unique undo
        manager for this instance. This ensures that undoable operations for this webview don’t get
        put in other undo managers, and matches UIWebView behavior.

2014-12-08  Chris Dumez  <cdumez@apple.com>

        Revert r176293 & r176275

        Unreviewed, revert r176293 & r176275 changing the Vector API to use unsigned type
        instead of size_t. There is some disagreement regarding the long-term direction
        of the API and we shouldn’t leave the API partly transitioned to unsigned type
        while making a decision.

        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/DataReference.h:

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Make deleting all cookies after a given date a little more sane
        https://bugs.webkit.org/show_bug.cgi?id=139409

        Reviewed by Antti Koivisto.

        Change all the doubles to std::chrono::system_clock::time_points instead.

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<std::chrono::system_clock::time_point>::encode):
        (IPC::ArgumentCoder<std::chrono::system_clock::time_point>::decode):
        * Platform/IPC/ArgumentCoders.h:
        * Scripts/webkit/messages.py:
        (headers_for_type):
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerDeleteAllCookiesModifiedAfterDate):
        * UIProcess/API/C/WKCookieManager.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedAfterDate): Deleted.
        * UIProcess/WebCookieManagerProxy.h:
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
        (WebKit::WebCookieManager::deleteAllCookiesModifiedAfterDate): Deleted.
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.messages.in:

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Move the callback invocation outside of the loop.

        Rubber-stamped by Tim Horton.

        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Add a stub implementation of WebsiteDataStore::removeDataModifiedSince
        https://bugs.webkit.org/show_bug.cgi?id=139406

        Reviewed by Antti Koivisto.

        Change _WKWebsiteDataStore to call the newly added function.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (toWebsiteDataTypes):
        (toSystemClockTime):
        (-[_WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::removeDataModifiedSince):
        * UIProcess/WebsiteData/WebsiteDataStore.h:

2014-12-08  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Let DrawingArea manages setAcceleratedCompositingWindowId
        https://bugs.webkit.org/show_bug.cgi?id=117230

        Reviewed by Anders Carlsson.

        This is a preparation patch for Threaded Coordinated Graphics.

        LayerTreeHostGtk uses a native window handle to make glContext for
        accelerated compositing. Therefore it is natural for DrawingArea to take
        responsibility for the native window handle. And, in Coordinated
        Graphics case, WebPage creates LayerTreeHost before receiving a native
        window handle from UIProcess. It means we need a method to pass the
        native window handle to already created LayerTreeHost.

        This patch uses DrawingAreaProxy::setNativeSurfaceHandleForCompositing
        instead of WebCoreProxy::setAcceleratedCompositingWindowId to set window
        ID for accelerated compositing.

        Also, this patch renames the setAcceleratedCompositingWindowId with a
        more generic name, setNativeSurfaceHandleForCompositing.

        No new tests. No change in functionality.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreateWebPage):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::setNativeSurfaceHandleForCompositing):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::setAcceleratedCompositingWindowId): Deleted.
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::nativeSurfaceHandleForCompositing):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNativeSurfaceHandleForCompositing):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::glContext):
        (WebKit::LayerTreeHostGtk::initialize):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::setAcceleratedCompositingWindowId): Deleted.

2014-12-08  Philippe Normand  <pnormand@igalia.com>

        [GTK] UserMedia Permission Request API
        https://bugs.webkit.org/show_bug.cgi?id=136449

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: GTK-specific new files.
        * UIProcess/API/gtk/WebKitUIClient.cpp:  DecidePolicy handler
        implementation for UserMediaPermissionRequest.
        * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp: Added,
        WebKitGTK API for UserMediaPermissionRequest, very similar to the
        one used for Geolocation.
        (webkitUserMediaPermissionRequestAllow):
        (webkitUserMediaPermissionRequestDeny):
        (webkit_permission_request_interface_init):
        (webkitUserMediaPermissionRequestDispose):
        (webkit_user_media_permission_get_media_types):
        (webkitUserMediaPermissionRequestGetProperty):
        (webkit_user_media_permission_request_class_init):
        (webkitUserMediaPermissionRequestCreate):
        * UIProcess/API/gtk/WebKitUserMediaPermissionRequest.h: Added.
        * UIProcess/API/gtk/WebKitUserMediaPermissionRequestPrivate.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Expose new API
        in documentation.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Ditto.
        * UIProcess/API/gtk/webkit2.h: Expose UserMediaPermissionRequest API.

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Add a stubbed out method for clearing out the website data store
        https://bugs.webkit.org/show_bug.cgi?id=139404

        Reviewed by Antti Koivisto.

        Add stubbed out method that just calls the completion handler.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (-[_WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:]):

2014-12-06  Antti Koivisto  <antti@apple.com>

        REGRESSION (173394): Support for webcam is broken
        https://bugs.webkit.org/show_bug.cgi?id=139313

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):

            Don't buffer when handling multipart/x-mixed-replace. Multiple calls to didReceiveResponseAsync break assumptions.

2014-12-08  Gwang Yoon Hwang  <yoon@igalia.com>

        [CoordinatedGraphics] Move CoordinatedBackingStore and CoordinatedGraphicsScene to Shared
        https://bugs.webkit.org/show_bug.cgi?id=139385

        Reviewed by Martin Robinson.

        For the Threaded Compositor, CoordinatedBackingStore and
        CoordinatedGraphicsScene should be placed at the Shared instead of
        UIProcess because it can be used in the WebProcess also.

        No new tests because there is no behavior change.

        * PlatformEfl.cmake:
        * Shared/CoordinatedGraphics/CoordinatedBackingStore.cpp: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp.
        * Shared/CoordinatedGraphics/CoordinatedBackingStore.h: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.cpp: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedGraphicsScene.cpp.
        * Shared/CoordinatedGraphics/CoordinatedGraphicsScene.h: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedGraphicsScene.h.

2014-12-08  Shivakumar JM  <shiva.jm@samsung.com>

        Fix build warning in WebKit2/UIProcess module.
        https://bugs.webkit.org/show_bug.cgi?id=139386

        Reviewed by Alexey Proskuryakov.

        Fix build warning by removing unused parameter name from function

        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::WebsiteDataStore):

2014-12-07  Gwang Yoon Hwang  <yoon@igalia.com>

        [CoordinatedGraphics] Change the namespace of CoordinatedBackingStore and CoordinatedGraphicsScene
        https://bugs.webkit.org/show_bug.cgi?id=139372

        Reviewed by Gyuyoung Kim.

        CoordinatedBackingStore and CoordinatedGraphicsScene should be declared in the WebKit namespace
        instead of WebCore namespace.

        * UIProcess/API/CoordinatedGraphics/WKCoordinatedScene.cpp:
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (WebKit::CoordinatedBackingStoreTile::CoordinatedBackingStoreTile):
        (WebKit::CoordinatedBackingStore::rect):
        (WebCore::CoordinatedBackingStoreTile::CoordinatedBackingStoreTile): Deleted.
        (WebCore::CoordinatedBackingStore::rect): Deleted.
        * UIProcess/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        * UIProcess/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        (WebKit::CoordinatedGraphicsScene::setViewBackgroundColor):
        (WebKit::CoordinatedGraphicsScene::viewBackgroundColor):
        (WebKit::CoordinatedGraphicsScene::layerByID):
        (WebKit::CoordinatedGraphicsScene::rootLayer):
        (WebCore::CoordinatedGraphicsScene::setViewBackgroundColor): Deleted.
        (WebCore::CoordinatedGraphicsScene::viewBackgroundColor): Deleted.
        (WebCore::CoordinatedGraphicsScene::layerByID): Deleted.
        (WebCore::CoordinatedGraphicsScene::rootLayer): Deleted.
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (WebKit::CoordinatedLayerTreeHostProxy::coordinatedGraphicsScene):
        * UIProcess/CoordinatedGraphics/WKCoordinatedSceneAPICast.h:
        (WebKit::toImpl):
        (WebKit::toAPI):
        (toImpl): Deleted.
        (toAPI): Deleted.
        * UIProcess/CoordinatedGraphics/WebView.h:

2014-12-07  Dan Bernstein  <mitz@apple.com>

        Introduce and deploy a function that allocates and returns an instance of a soft-linked class
        https://bugs.webkit.org/show_bug.cgi?id=139348

        Reviewed by Anders Carlsson.

        In [[getFooClass() alloc] init*], the type of the result of +alloc is id, so the compiler
        picks an arbitrary declaration of init*, not necessarily the Foo one. This can then lead
        to warnings or errors if the types or attributes don’t match, or to runtime errors if Foo
        doesn’t even have the expected initializer. The new allocFooInstance() returns a Foo *, thus
        avoiding the ambiguity.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker showAirPlayPickerIPad:fromRect:]):
        (-[WKAirPlayRoutePicker showAirPlayPickerIPhone:]):
        (-[WKAirPlayRoutePicker show:fromRect:]):
        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[_WKVideoFileUploadItem displayImage]):
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectableLink]):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::clone):

2014-12-06  Anders Carlsson  <andersca@apple.com>

        Fix build with newer versions of clang.
        rdar://problem/18978733

        Add missing overrides and casts.

        * NetworkProcess/NetworkProcess.h:
        * Shared/Downloads/DownloadAuthenticationClient.h:
        (WebKit::DownloadAuthenticationClient::refAuthenticationClient): Deleted.
        (WebKit::DownloadAuthenticationClient::derefAuthenticationClient): Deleted.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration copyWithZone:]):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterViewportChange): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        (WebKit::WebContentProcessMainDelegate::doPreInitializationWork): Deleted.
        (WebKit::WebContentProcessMainDelegate::getConnectionIdentifier): Deleted.
        (WebKit::WebContentProcessMainDelegate::getClientIdentifier): Deleted.
        (WebKit::WebContentProcessMainDelegate::getClientProcessName): Deleted.
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        * WebProcess/WebPage/WebInspector.h:
        (WebKit::WebInspector::didClose): Deleted.
        (WebKit::WebInspector::didReceiveInvalidMessage): Deleted.
        * WebProcess/WebPage/WebInspectorUI.h:
        (WebKit::WebInspectorUI::didClose): Deleted.
        (WebKit::WebInspectorUI::didReceiveInvalidMessage): Deleted.
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h:
        * WebProcess/WebProcess.h:
        * WebProcess/ios/WebVideoFullscreenManager.h:

2014-12-06  Anders Carlsson  <andersca@apple.com>

        Only include TUCallSPI on Mac.

        * Platform/mac/MenuUtilities.mm:

2014-12-06  Commit Queue  <commit-queue@webkit.org>

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

        the test case is failing in bots (Requested by anttik on
        #webkit).

        Reverted changeset:

        "REGRESSION (173394): Support for webcam is broken"
        https://bugs.webkit.org/show_bug.cgi?id=139313
        http://trac.webkit.org/changeset/176905

2014-12-05  Antti Koivisto  <antti@apple.com>

        REGRESSION (173394): Support for webcam is broken
        https://bugs.webkit.org/show_bug.cgi?id=139313

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):

            Don't buffer when handling multipart/x-mixed-replace. Multiple calls to didReceiveResponseAsync break assumptions.

2014-12-05  Yongjun Zhang  <yongjun_zhang@apple.com>

        Add a delegate method for didReceiveServerRedirectForProvisionalLoadForFrame.
        https://bugs.webkit.org/show_bug.cgi?id=139325

        Add delegate method webProcessPlugInBrowserContextController:didReceiveServerRedirectForProvisionalLoadForFrame: into
        WKWebProcessPlugInLoadDelegate to listen to server side redirect in injected bundle.

        Reviewed by Dan Bernstein.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didReceiveServerRedirectForProvisionalLoadForFrame):
        (setUpPageLoaderClient):

2014-12-05  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF, EFL is happy now.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
        (WebKit::WebsiteDataStore::createNonPersistent):

2014-12-05  Mark Lam  <mark.lam@apple.com>

        Gardening: one more build fix for GTK builds.

        * CMakeLists.txt:

2014-12-05  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF, remove duplicated entry due to parallel buildfixing.

        * CMakeLists.txt:

2014-12-05  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r176849.

        * CMakeLists.txt: Added WebProcess/InjectedBundle/DOM/InjectedBundleCSSStyleDeclarationHandle.cpp.

2014-12-05  Mark Lam  <mark.lam@apple.com>

        Gardening: another build fix for GTK builds.

        * CMakeLists.txt:

2014-12-05  Mark Lam  <mark.lam@apple.com>

        Gardening: more speculative build fix for GTK builds.

        * CMakeLists.txt:

2014-12-05  Tim Horton  <timothy_horton@apple.com>

        Use the system string for telephone number menu
        https://bugs.webkit.org/show_bug.cgi?id=139324
        <rdar://problem/18726471>

        Reviewed by Anders Carlsson.

        * Platform/mac/MenuUtilities.mm:
        (WebKit::menuItemTitleForTelephoneNumberGroup):
        Make use of the SPI to retrieve the string if it exists.

2014-12-05  Tim Horton  <timothy_horton@apple.com>

        If the action menu hit test times out, a menu with a single separator appears
        https://bugs.webkit.org/show_bug.cgi?id=139320
        <rdar://problem/19158331>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController menuNeedsUpdate:]):
        (-[WKActionMenuController _defaultMenuItems]):
        Add a new "TimedOut" state, which we get into if the sync wait for
        didPerformActionMenuHitTest times out. In this case, we'll drop the
        separator item and give up on the menu. This way, the menu will never
        have just a single separator item at the end of menuNeedsUpdate:.

2014-12-05  Mark Lam  <mark.lam@apple.com>

        Gardening: speculative build fix for GTK builds.

        * CMakeLists.txt:

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm:
        (API::WebsiteDataStore::defaultDataStoreConfiguration):

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Give all web pages a website data store
        https://bugs.webkit.org/show_bug.cgi?id=139317

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Set the website data store on the window.

        * UIProcess/WebContext.cpp:
        (WebKit::websiteDataStoreConfiguration):
        Helper function that will create the default website data store configuration for a context.

        (WebKit::WebContext::WebContext):
        Create a new, per-context data store.

        (WebKit::WebContext::createWebPage):
        If we don't have a data store filled in, use the default per-context one.

        * UIProcess/WebContext.h:
        * UIProcess/WebPageProxy.h:

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Move the website data store code to a new file
        https://bugs.webkit.org/show_bug.cgi?id=139312

        Reviewed by Tim Horton.

        It's weird to have all the website data code in the API class, so move it to a new file.

        * UIProcess/API/APIWebsiteDataStore.cpp:
        (API::WebsiteDataStore::WebsiteDataStore):
        (API::WebsiteDataStore::isNonPersistent):
        (API::generateNonPersistentSessionID): Deleted.
        * UIProcess/API/APIWebsiteDataStore.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/WebsiteData/WebsiteDataStore.cpp: Copied from Source/WebKit2/UIProcess/API/APIWebsiteDataStore.cpp.
        (WebKit::generateNonPersistentSessionID):
        (WebKit::WebsiteDataStore::createNonPersistent):
        (WebKit::WebsiteDataStore::create):
        (WebKit::WebsiteDataStore::WebsiteDataStore):
        (WebKit::WebsiteDataStore::~WebsiteDataStore):
        * UIProcess/WebsiteData/WebsiteDataStore.h: Copied from Source/WebKit2/UIProcess/API/APIWebsiteDataStore.h.
        (WebKit::WebsiteDataStore::isNonPersistent):
        (WebKit::WebsiteDataStore::sessionID):
        * WebKit2.xcodeproj/project.pbxproj:

2014-12-05  Tim Horton  <timothy_horton@apple.com>

        Keyboard input should be disabled in the preview popover
        https://bugs.webkit.org/show_bug.cgi?id=139219
        <rdar://problem/19052381>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView performKeyEquivalent:]):
        (-[WKView keyUp:]):
        (-[WKView keyDown:]):
        (-[WKView flagsChanged:]):
        There are two implementations of each of these methods in this file.
        Adjust the ones that the original patch missed.

2014-12-05  Antti Koivisto  <antti@apple.com>

        In NetworkResourceLoader always bail out after abort()
        https://bugs.webkit.org/show_bug.cgi?id=139299

        Reviewed by Alexey Proskuryakov.

        Invoking abort() may kill the current object. Take care to bail out after it.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):

            Either make sure sendAbortingOnFailure() is called last in callbacks or the results is explicitly tested.

        (WebKit::NetworkResourceLoader::bufferingTimerFired):
        (WebKit::NetworkResourceLoader::sendBufferMaybeAborting):

            Rename and return a boolean to indicate if load should continue.

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

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Don't use PLATFORM(IOS) in non-project headers.

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

2014-12-05  Sam Weinig  <sam@webkit.org>

        WKBundleCSSStyleDeclarationRef needs to be a real API::Object
        https://bugs.webkit.org/show_bug.cgi?id=139291

        Reviewed by Dan Bernstein.

        Change WKBundleCSSStyleDeclarationRef from being a WebCore::CSSStyleDeclaration, to
        being a real API::Object.  WKRetain and WKRelease require this.

        * Shared/APIObject.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/DOM/InjectedBundleCSSStyleDeclarationHandle.cpp: Added.
        (WebKit::domHandleCache):
        (WebKit::InjectedBundleCSSStyleDeclarationHandle::getOrCreate):
        (WebKit::InjectedBundleCSSStyleDeclarationHandle::InjectedBundleCSSStyleDeclarationHandle):
        (WebKit::InjectedBundleCSSStyleDeclarationHandle::~InjectedBundleCSSStyleDeclarationHandle):
        * WebProcess/InjectedBundle/DOM/InjectedBundleCSSStyleDeclarationHandle.h: Added.
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::shouldApplyStyle):

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Oops, didn't mean to commit this.

        * Shared/API/Cocoa/WKFoundation.h:

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Add an API::WebsiteDataStore object and use it for _WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=139304

        Reviewed by Tim Horton.

        * Shared/APIObject.h:
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        Make _WKWebsiteDataStore a wrapper for API::WebsiteDataStore instead of API::Session.

        * UIProcess/API/APIWebsiteDataStore.cpp: Added.
        (API::generateNonPersistentSessionID):
        (API::WebsiteDataStore::defaultDataStore):
        (API::WebsiteDataStore::createNonPersistentDataStore):
        (API::WebsiteDataStore::WebsiteDataStore):
        (API::WebsiteDataStore::~WebsiteDataStore):
        (API::WebsiteDataStore::isNonPersistent):
        Add new WebsiteDataStore implementation. Currently it only contains the WebCore Session ID, but more will be
        added to it in upcoming commits.

        * UIProcess/API/APIWebsiteDataStore.h:
        Add header.

        * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm: Added.
        (API::WebsiteDataStore::defaultDataStoreConfiguration):
        Platform specific file that returns the default data store configuration.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Set the session ID from the website data store.

        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (+[_WKWebsiteDataStore defaultDataStore]):
        (+[_WKWebsiteDataStore nonPersistentDataStore]):
        (-[_WKWebsiteDataStore dealloc]):
        (-[_WKWebsiteDataStore isNonPersistent]):
        (-[_WKWebsiteDataStore _apiObject]):
        Update now that we wrap an API::WebsiteDataStore instead.

        * UIProcess/API/Cocoa/_WKWebsiteDataStoreInternal.h:
        (WebKit::wrapper):
        Update for API::Session -> API::WebsiteDataStore change.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new files.

2014-12-05  David Kilzer  <ddkilzer@apple.com>

        FeatureDefines.xcconfig: Workaround bug in Xcode 5.1.1 when defining ENABLE_WEB_REPLAY
        <http://webkit.org/b/139286>

        Reviewed by Daniel Bates.

        * Configurations/FeatureDefines.xcconfig: Switch back to using
        PLATFORM_NAME to workaround a bug in Xcode 5.1.1 on 10.8.

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Make WebPageProxy hold on to a SessionID instead of an API:Session
        https://bugs.webkit.org/show_bug.cgi?id=139302

        Reviewed by Sam Weinig.

        This is in preparation for adding API::WebsiteDataStore. Currently we have to keep the
        Session ID and the WebsiteDataStore separate because we still need to support toggling private browsing.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetSession):
        * UIProcess/API/C/WKSessionRef.cpp:
        (WKSessionCreate):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
        (+[_WKWebsiteDataStore nonPersistentDataStore]):
        * UIProcess/APISession.cpp:
        (API::generateID):
        (API::Session::Session):
        (API::Session::createEphemeral):
        (API::Session::legacyPrivateSession): Deleted.
        (API::Session::create): Deleted.
        * UIProcess/APISession.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createWebPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setSessionID):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setSession): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::sessionID):

2014-12-05  Eric Carlson  <eric.carlson@apple.com>

        [iOS] allow host application to opt-out of alternate fullscreen pt. 2
        https://bugs.webkit.org/show_bug.cgi?id=139227

        Reviewed by Jer Noble and Anders Carlsson.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h: Add bool param to setupFullscreenWithID.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: Ditto.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): Ditto.

        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement): Pass new parameter
            to SetupFullscreenWithID.

2014-12-04  Anders Carlsson  <andersca@apple.com>

        Add missing includes in preparation for making toAPI require that it's passed an API::Object
        https://bugs.webkit.org/show_bug.cgi?id=139278

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKAuthenticationChallenge.cpp:
        * UIProcess/API/C/WKAuthenticationDecisionListener.cpp:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKDownload.cpp:
        * UIProcess/API/C/WKFrame.cpp:
        * UIProcess/API/C/WKGeolocationManager.cpp:
        * UIProcess/API/C/WKInspector.cpp:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/GenericCallback.h:
        * UIProcess/Notifications/WebNotificationProvider.cpp:
        * UIProcess/WebContextConnectionClient.cpp:
        * UIProcess/WebContextInjectedBundleClient.cpp:
        * UIProcess/WebCookieManagerProxyClient.cpp:
        * UIProcess/WebDatabaseManagerProxyClient.cpp:
        * UIProcess/WebFindClient.cpp:
        * UIProcess/WebFormClient.cpp:
        * UIProcess/WebIconDatabaseClient.cpp:
        * UIProcess/WebPageContextMenuClient.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleDOMWindowExtension.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/InjectedBundleClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePagePolicyClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:

2014-12-04  Anders Carlsson  <andersca@apple.com>

        Make API::String copy the underlying strings if needed, for thread safety
        https://bugs.webkit.org/show_bug.cgi?id=139261

        Reviewed by Sam Weinig.

        * Shared/API/c/WKString.cpp:
        (WKStringCreateWithUTF8CString):
        (WKStringCreateWithJSString):
        (WKStringCopyJSString):
        Move the implementations from API::String and directly into the API functions.

        * Shared/APIString.h:
        Add a create overload that takes an rvalue reference. Call it from the create overload
        that takes an lvalue reference, but explicitly copy the string.
        We call isolatedCopy() again on the string in the rvalue reference overload, but that is a no-op
        if the string can be sent to another thread. Add assertions in the String constructor that we can
        send the string to another thread.

2014-12-04  Beth Dakin  <bdakin@apple.com>

        Clients disabling action menus sometimes still invoke action menu behaviors
        https://bugs.webkit.org/show_bug.cgi?id=139270
        -and corresponding-
        rdar://problem/19147218

        Reviewed by Tim Horton.

        By default, we will keep a single item in the action menu up until the point where 
        _state == ActionMenuState::Ready. So by checking _state here, we are preventing 
        clients from opting out of our choice to wait. Ideally we would always still wait 
        for the Ready state, but this will get the best behavior in the mean time.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _updateActionMenuItems]):

2014-12-04  Antti Koivisto  <antti@apple.com>

        REGRESSION (r173468): Cannot step in WebInspector
        https://bugs.webkit.org/show_bug.cgi?id=139260

        Reviewed by Alexey Proskuryakov.

        Inspector defers all loads and starts a nested runloop when it hits a breakpoint. When continuing it undefers the loads.
        If the script execution was triggered from the didFinishLoading callback of the main resource then the main resource would
        already be in the finished state in the network process side and setDefersLoading(false) message would end up restarting its load.
        Since loads are not meant to restart the generated callbacks would assert or crash the web process when handled in the next
        nested inspector runloop.

        Fix by taking care that cleaned up NetworkResourceLoaders are always removed from the loader map of
        the NetworkConnectionToWebProcess and so can't end up handling late messages.

        No test, this requires JS debugger to trigger.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didCleanupResourceLoader):

            This is now the only way to remove resource loaders.
            It is called from NetworkResourceLoader::cleanup only.

        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):

            Calling abort  removes the resource loader (since it calls cleanup) so no need to do it explicitly anymore.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):

            We are guaranteed to be reffed by NetworkConnectionToWebProcess until cleanup so the explicit ref/deref can be removed.

        (WebKit::NetworkResourceLoader::cleanup):

            Call to NetworkConnectionToWebProcess::didCleanupResourceLoader to make the loader unreachable.

        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::identifier):

2014-12-04  Timothy Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setTextIndicator:fadeOut:animationCompletionHandler:]):

2014-12-04  Tim Horton  <timothy_horton@apple.com>

        TextIndicator::createWithSelectionInFrame does synchronous IPC in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139252
        <rdar://problem/19140827>

        Reviewed by Anders Carlsson.

        It turns out contentsToScreen requires sync IPC in Mac WebKit2, which we
        really don't want to be doing here (especially since the UI process will often
        be sitting in waitForAndDispatchImmediately waiting for didPerformActionMenuHitTest).

        Go back to keeping TextIndicator rects in "window" coordinates and do the conversion
        in each of the WebKits instead of trying to share that code.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setTextIndicator:fadeOut:animationCompletionHandler:]):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        (WebKit::FindController::drawRect):
        Adjust to the WebCore changes.

2014-12-04  Anders Carlsson  <andersca@apple.com>

        Simplify StorageManager callback functions
        https://bugs.webkit.org/show_bug.cgi?id=139257

        Reviewed by Antti Koivisto.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getOrigins):
        (WebKit::StorageManager::getStorageDetailsByOrigin):
        (WebKit::callCallbackFunction): Deleted.
        (WebKit::StorageManager::getOriginsInternal): Deleted.
        (WebKit::StorageManager::getStorageDetailsByOriginInternal): Deleted.
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
        (WebKit::didGetKeyValueStorageOrigins): Deleted.
        (WebKit::didGetStorageDetailsByOrigin): Deleted.

2014-12-04  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r176794.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::fileCreationTime):
        (WebKit::fileModificationTime):

2014-12-03  Anders Carlsson  <andersca@apple.com>

        Add a way to delete local storage origins modified after a given date
        https://bugs.webkit.org/show_bug.cgi?id=139249

        Reviewed by Tim Horton.

        Also change LocalStorageDatabaseTracker to hold on to WTF::Optional time_t values
        instead of treating missing values as zero.

        * UIProcess/LocalStorageDetails.h:
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::fileCreationTime):
        (WebKit::fileModificationTime):
        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
        (WebKit::LocalStorageDatabaseTracker::details):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::didGetStorageDetailsByOrigin):

2014-12-04  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        [EFL][WK2] Add ewk API to allow accepting a specific TLS certificate for a specific host
        https://bugs.webkit.org/show_bug.cgi?id=131160

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::allowSpecificHTTPSCertificateForHost):
        (ewk_context_tls_certificate_for_host_allow):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/tests/test_ewk2_ssl.cpp:

2014-12-03  Commit Queue  <commit-queue@webkit.org>

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

        More iOS breakage (Requested by andersca on #webkit).

        Reverted changeset:

        "Fix iOS build."
        http://trac.webkit.org/changeset/176457

2014-12-03  Beth Dakin  <bdakin@apple.com>

        <input> elements get whitespace action menu instead of editable text menu
        https://bugs.webkit.org/show_bug.cgi?id=139241
        -and corresponding-
        rdar://problem/19072083

        Reviewed by Sam Weinig.

        Add isOverTextInsideFormControlElement to WebHitTestResult.
        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::Data):
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h:
        (WebKit::WebHitTestResult::isOverTextInsideFormControlElement):

        Offer the text menus for text inside form controls.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItems]):

        We should disallow shadow content in the hit test. This is the default and it is 
        how context menus behave. We originally wanted to text inside shadow content so 
        that we could find the text, but the new function I added to HitTestResult will 
        allow that.
        * WebProcess/WebPage/mac/WebPageMac.mm:

        Adjust to the fact that we don’t hit test shadow content any more.
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        (WebKit::WebPage::lookupTextAtLocation):
        (WebKit::WebPage::focusAndSelectLastActionMenuHitTestResult):

2014-12-03  Commit Queue  <commit-queue@webkit.org>

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

        More iOS breakage (Requested by andersca on #webkit).

        Reverted changeset:

        "Unreviewed, iOS build fix after r176452."
        http://trac.webkit.org/changeset/176489

2014-12-03  Tim Horton  <timothy_horton@apple.com>

        Implement action menus for tel: URLs
        https://bugs.webkit.org/show_bug.cgi?id=139240
        <rdar://problem/19115662>

        Reviewed by Anders Carlsson.

        * Shared/API/c/WKActionMenuTypes.h:
        Add a new type.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectableLink]):
        Rename this function as it will work for both mailto and tel URLs.
        Adjust it to use contextForView:.

        (-[WKActionMenuController _clearActionMenuState]):
        (-[WKActionMenuController menuNeedsUpdate:]):
        (-[WKActionMenuController _defaultMenuItems]):
        Don't check the menu type when going to interact with _currentActionContext.
        We'll only have a _currentActionContext if we have a data detected item,
        and there are multiple menu types that end up using DDActionContext.

2014-12-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r176452 and r176559.
        https://bugs.webkit.org/show_bug.cgi?id=139239

        Broke iOS (Requested by andersca on #webkit).

        Reverted changesets:

        "Remove alignment code from IPC coders"
        https://bugs.webkit.org/show_bug.cgi?id=138963
        http://trac.webkit.org/changeset/176452

        "[WK2] SecComp buildfix after r176452"
        https://bugs.webkit.org/show_bug.cgi?id=139081
        http://trac.webkit.org/changeset/176559

2014-12-03  Tim Horton  <timothy_horton@apple.com>

        Keyboard input should be disabled in the preview popover
        https://bugs.webkit.org/show_bug.cgi?id=139219
        <rdar://problem/19052381>

        Reviewed by Anders Carlsson.

        Make sure that keyboard input, Quick Look, etc. are blocked in preview popovers
        and WKThumbnailViews. Also block the fake mouseMove events that originate in
        the Web process upon scrolling, because we were missing those despite blocking
        ordinary mouseMove events.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        Rename _ignoresNonWheelMouseEvents to _ignoresNonWheelEvents, because it will
        apply not only to mouse events but also key events, Quick Look events, menu
        preparation events, swipe events, etc.

        Add _ignoresAllEvents, which means the same thing as _ignoresNonWheelEvents
        with the addition of ignoring scrollWheel events.

        (-[WKView scrollWheel:]):
        (-[WKView swipeWithEvent:]):
        (-[WKView mouseMoved:]):
        (-[WKView mouseDown:]):
        (-[WKView mouseUp:]):
        (-[WKView mouseDragged:]):
        Adjust to the new name.

        (-[WKView performKeyEquivalent:]):
        (-[WKView keyUp:]):
        (-[WKView keyDown:]):
        (-[WKView flagsChanged:]):
        (-[WKView quickLookWithEvent:]):
        (-[WKView prepareForMenu:withEvent:]):
        (-[WKView willOpenMenu:withEvent:]):
        (-[WKView didCloseMenu:withEvent:]):
        Block all of these events as well as those we were previously blocking.

        (-[WKView _setIgnoresAllEvents:]):
        (-[WKView _setIgnoresNonWheelMouseEvents:]):
        (-[WKView _setIgnoresNonWheelEvents:]):
        (-[WKView _ignoresNonWheelEvents]):
        (-[WKView _ignoresAllEvents]):
        * UIProcess/API/mac/WKViewInternal.h:
        Adjust to the new names and the addition of ignoresAllEvents.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKPagePreviewViewController loadView]):
        Adjust to the new name.

        (-[WKActionMenuController prepareForMenu:withEvent:]):
        Move bailing from prepareForMenu: up to WKView.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _ignoresNonWheelEvents]):
        (-[WKWebView _setIgnoresNonWheelEvents:]):
        (-[WKWebView _ignoresNonWheelMouseEvents]): Deleted.
        (-[WKWebView _setIgnoresNonWheelMouseEvents:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Adjust to the new name (without "mouse" in it).

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView _viewWasUnparented]):
        (-[_WKThumbnailView _viewWasParented]):
        Explicitly tell WKView to disable event handling while thumbnailed,
        instead of having WKView special-case thumbnail views internally.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setShouldDispatchFakeMouseMoveEvents):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldDispatchFakeMouseMoveEvents):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::shouldDispatchFakeMouseMoveEvents):
        (WebKit::WebPage::setShouldDispatchFakeMouseMoveEvents):
        * WebProcess/WebPage/WebPage.messages.in:
        Plumb shouldDispatchFakeMouseMoveEvents from the UI process to the Web process
        and through to WebKit2's ChromeClient implementation.

2014-12-03  Anders Carlsson  <andersca@apple.com>

        Remove ENABLE_UI_PROCESS_STORAGE define, it's always 1.

        Rubber-stamped by Beth Dakin.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::localStorageNamespace):
        (WebKit::WebPlatformStrategies::transientLocalStorageNamespace):
        (WebKit::WebPlatformStrategies::sessionStorageNamespace):

2014-12-03  Anders Carlsson  <andersca@apple.com>

        Use an @autoreleasepool instead of NSAutoreleasePool.

        Rubber-stamped by Tim Horton.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2014-12-03  Dan Bernstein  <mitz@apple.com>

        REGRESSION(r176687): Caused webkit2 test assertion failure crashes in WebKit::WebPage::willStartDrag()
        https://bugs.webkit.org/show_bug.cgi?id=139224

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEventSyncForTesting): Wait for the UI process to start dragging if
        needed before handling the event.

2014-12-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] outdated comment
        https://bugs.webkit.org/show_bug.cgi?id=137801

        Reviewed by Carlos Garcia Campos.

        Remove a comment that is no longer correct.

        * NetworkProcess/gtk/NetworkProcessMainGtk.cpp:

2014-12-02  Conrad Shultz  <conrad_shultz@apple.com>

        Don't block menu highlighting when presenting a page preview
        https://bugs.webkit.org/show_bug.cgi?id=139217

        Reviewed by Tim Horton.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _previewURLFromActionMenu:]):
        Defer popover presentation to the next turn of the runloop.

2014-12-02  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/WebContextMac.mm:

2014-12-02  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/18441138> [iOS] Text selection in WKWebView with WKSelectionGranularityCharacter only works in the most recent WKWebView to load
        https://bugs.webkit.org/show_bug.cgi?id=139211

        Reviewed by Anders Carlsson.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView becomeFirstResponder]): Override to activate the text selection for when
        becoming first resopnder.
        (-[WKContentView resignFirstResponder]): Deactiavte the text selection when resigning first
        responder. This ensures that if another WKWebView becomes first responder, and it uses
        block selection, we don’t end up with two active selection views.
        (-[WKContentView useSelectionAssistantWithMode:]): Only activate the text selection if this
        is the first responder. This ensures that loading content into a non-first-responder
        WKWebView doesn‘t deactivate the text selection in the current first responder.

2014-12-02  Alexey Proskuryakov  <ap@apple.com>

        http/tests/appcache/main-resource-fallback-for-network-error-crash.html can break subsequent tests
        https://bugs.webkit.org/show_bug.cgi?id=139149

        Reviewed by Anders Carlsson.

        This changes API behavior. I think that it's OK, because existing behavior made no sense.
        We used to delete caches from disk, but they were still active in memory. Now we also
        obsolete them in memory, so documents that use a cache still work, but new ones don't
        pick one up.

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::deleteAllEntries): Use the new WebCore function
        that properly deletes caches.

2014-12-02  Tim Horton  <timothy_horton@apple.com>

        Remove a SnowLeopard-era quirk for QuickLook
        https://bugs.webkit.org/show_bug.cgi?id=139208
        <rdar://problem/19121822>

        Reviewed by Alexey Proskuryakov.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::needsQuickLookResourceCachingQuirks): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::needsQuickLookResourceCachingQuirks): Deleted.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-12-02  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForLink]):

2014-12-02  Beth Dakin  <bdakin@apple.com>

        More build fix.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForLink]):

2014-12-02  Dan Bernstein  <mitz@apple.com>

        REGRESSION: Dragging selected text changes the selection
        https://bugs.webkit.org/show_bug.cgi?id=139110

        Reviewed by Simon Fraser.

        After it sent the UI process the message to start dragging, the Web process handled mouse
        move events that had already been in flight, interpreting them as a drag to start a new
        selection. This is fixed by ignoring any mouse events received after asking the UI process
        to start dragging.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setDragImage): Send the new DidStartDrag message back to the Web
        process, so that it stops ignoring mouse events.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag): Call the new WebPage::willStartDrag, so that it starts
        ignoring mouse events.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize new member variable.
        (WebKit::WebPage::mouseEvent): Don’t handle the event if we have asked the UI process to
        start dragging.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::willStartDrag): Added. Sets new member variable m_isStartingDrag to true.
        (WebKit::WebPage::didStartDrag): Added. Handles the message from the UI process by setting
        m_isStartingDrag back to false.

        * WebProcess/WebPage/WebPage.messages.in: Added DidStartDrag.

2014-12-02  Beth Dakin  <bdakin@apple.com>

        Should use standardQuickLookMenuItem for apps that don't implement customizations
        https://bugs.webkit.org/show_bug.cgi?id=139193
        -and corresponding-
        rdar://problem/18944696

        Reviewed by Anders Carlsson.

        New SPI will allow clients to opt-out of the standardQuickLookMenuItem. By 
        default, opt in.
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _shouldUseStandardQuickLookPreview]):
        * UIProcess/mac/WKActionMenuController.mm:

        Use [NSMenuItem standardQuickLookMenuItem] unless the client has requested 
        otherwise.
        (-[WKActionMenuController _defaultMenuItemsForLink]):

        Delegate methods to set up the standardQuickLookMenuItem.
        (-[WKActionMenuController menuItem:viewAtScreenPoint:]):
        (-[WKActionMenuController menuItem:previewItemAtPoint:]):
        (-[WKActionMenuController menuItem:preferredEdgeForPoint:]):

2014-12-02  Tim Horton  <timothy_horton@apple.com>

        TextIndicator can get stuck (especially if we don't get LUNotificationPopoverWillClose when we should)
        https://bugs.webkit.org/show_bug.cgi?id=139175
        <rdar://problem/19072236>

        Reviewed by Beth Dakin.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView scrollWheel:]):
        (-[WKView mouseDown:]):
        Work around <rdar://problem/19086993> by always explicitly clearing the
        active text indicator in mouseDown: and scrollWheel:.
        This way, even if you manage to get a text indicator that outlives the
        Look Up popover (or find-in-page, or whatever), it will be dismissed
        by clicking or scrolling the view.

2014-12-02  Anders Carlsson  <andersca@apple.com>

        Remove visited link handling from PageGroup
        https://bugs.webkit.org/show_bug.cgi?id=139185

        Reviewed by Sam Weinig.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::populateVisitedLinks): Deleted.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2014-12-01  Anders Carlsson  <andersca@apple.com>

        Remove WKBundleRemoveAllVisitedLinks
        https://bugs.webkit.org/show_bug.cgi?id=139163

        Reviewed by Sam Weinig.

        WKBundleRemoveAllVisitedLinks has been a no-op since at least Yosemite; get rid of it.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleRemoveAllVisitedLinks): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::removeAllVisitedLinks): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:

2014-12-02  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix class was previously declared as a struct warnings
        https://bugs.webkit.org/show_bug.cgi?id=139131

        Reviewed by Csaba Osztrogonác.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * UIProcess/CoordinatedGraphics/WebViewClient.h:

2014-12-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] ewk_view_scale_set() doesn't work correctly
        https://bugs.webkit.org/show_bug.cgi?id=139109

        Reviewed by Csaba Osztrogonác.

        When ewk_view_scale_set() is called, it has only updated a scale factor which is maintained by WebPageProxy.
        It causes WebPageProxy unsynchronized with PageViewportController's scale factor. That's why wrong scale
        behavior has occured through ewk_view_scale_set(). Besides zooming has similar problem as well.

        Thus this patch updates m_pageScaleFactor of PageViewportController as well as prohibits to change the scale
        factor through viewport meta tag update. Because ewk_view_scale_set() means that user wants to set a specific
        value to scale factor of current viewport.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::updateScaleToPageViewportController):
            Set m_initiallyFitToViewport to false. And call didChangeContentsVisibility() with new scale and scale position.

        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_scale_set):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::didCommitLoad):
            Set m_initiallyFitToViewport to true in order to fit content to viewport size by default.
            Initizlize content position with (0, 0).

        (WebKit::PageViewportController::pageTransitionViewportReady):
           Do not update scale when m_initiallyFitToViewport is false.

        (WebKit::PageViewportController::syncVisibleContents):
           Return false when syncVisibleContents is failed.

        (WebKit::PageViewportController::didChangeViewportAttributes):
           Do not update scale when m_initiallyFitToViewport is false.

        (WebKit::PageViewportController::applyScaleAfterRenderingContents):
            If syncVisibleContents() is failed, m_pageScaleFactor should be restored with previous value.
            If not, new scale factor isn't applied though, PageViewportController uses it as own scale factor.

        (WebKit::PageViewportController::updateMinimumScaleToFit):
           Do not update scale when m_initiallyFitToViewport is false or m_hadUserInteraction is true.

        * UIProcess/CoordinatedGraphics/PageViewportController.h:
        (WebKit::PageViewportController::setInitiallyFitToViewport):

2014-11-20  Jeffrey Pfau  <jpfau@apple.com>

        Add cancelable version of willSendRequest
        https://bugs.webkit.org/show_bug.cgi?id=138987

        Reviewed by Anders Carlsson.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):

2014-12-01  Conrad Shultz  <conrad_shultz@apple.com>

        Clients need a way to explicitly set the title of a page preview
        https://bugs.webkit.org/show_bug.cgi?id=139161

        Reviewed by Beth Dakin.

        This implicitly assumes that only one page preview can be associate with a given WKView at a time.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setPreviewTitle:]):
        Wrap -[WKActionMenuController setPreviewTitle:]

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        Add ivars for the title and the title text field (previously not independently exposed).
        (-[WKPagePreviewViewController previewTitle]):
        Accessor.
        (-[WKPagePreviewViewController setPreviewTitle:]):
        Accessor; set the text field's string value.
        (-[WKPagePreviewViewController loadView]):
        Adopt the _titleTextField ivar; assume that if a client has explicitly set the previewTitle then we don't
        need to ask for it again.
        (-[WKActionMenuController setPreviewTitle:]):
        Wrap -[WKPagePreviewViewController setPreviewTitle:].

2014-12-01  Anders Carlsson  <andersca@apple.com>

        Make WebKit2 work slightly better with garbage collection
        https://bugs.webkit.org/show_bug.cgi?id=139159
        <rdar://problem/19108390>

        Reviewed by Dan Bernstein.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::ref):
        (API::Object::deref):
        Call CFRetain/CFRelease to prevent the memory from being collected.

        (API::Object::newObject):
        Call CFRetain under GC so we'll prevent memory from being collected prematurely.

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

        Implement yellow highlight for WebKit1 data detectors
        https://bugs.webkit.org/show_bug.cgi?id=138956
        <rdar://problem/18992185>

        Reviewed by Beth Dakin.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindIndicator):
        (WebKit::FindController::drawRect):
        Adjust to the fact that TextIndicator keeps screen-relative rects.

2014-12-01  Anders Carlsson  <andersca@apple.com>

        Remove old site specific quirks code that was added in 2009
        https://bugs.webkit.org/show_bug.cgi?id=139141

        Reviewed by Antti Koivisto.

        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::needsSiteSpecificQuirks): Deleted.
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::needsSiteSpecificQuirks): Deleted.

2014-12-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crash in WebInspectorClient::hideHighlight when page is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=139136

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::hideHighlight):
        Speculatively fix by null-checking the main frame which
        can be null during page destruction.

2014-11-30  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL] Add eldbus to the library list
        https://bugs.webkit.org/show_bug.cgi?id=139120

        Reviewed by Gyuyoung Kim.

        Fix undefined reference errors for eldbus APIs.

        * PlatformEfl.cmake:

2014-11-29  Anders Carlsson  <andersca@apple.com>

        Crash when calling WKPageClose on the originated page from within createNewPage callback
        https://bugs.webkit.org/show_bug.cgi?id=139099
        <rdar://problem/19052564>

        Reviewed by Sam Weinig.

        Null check the namespace ID.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::cloneSessionStorageNamespaceInternal):

2014-11-28  Tim Horton  <timothy_horton@apple.com>

        Stale userData is handed to WKView _actionMenuItemsForHitTestResult under prepareForMenu
        https://bugs.webkit.org/show_bug.cgi?id=139069
        <rdar://problem/19075587>

        Reviewed by Sam Weinig.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController wkView:willHandleMouseDown:]):
        (-[WKActionMenuController didCloseMenu:withEvent:]):
        (-[WKActionMenuController _clearActionMenuState]):
        Previously, _userData was not being cleared in didCloseMenu, so a subsequent
        action menu invocation would end up sending stale userData to _actionMenuItemsForHitTestResult.

        Additionally, factor all of the cleanup code out into _clearActionMenuState,
        and call it from both wkView:willHandleMouseDown: and didCloseMenu:withEvent:.

2014-11-26  Timothy Horton  <timothy_horton@apple.com>

        DataDetectors PageOverlay callbacks are never called
        https://bugs.webkit.org/show_bug.cgi?id=139067
        <rdar://problem/19086676>

        Reviewed by Anders Carlsson.

        * Shared/mac/ActionMenuHitTestResult.mm:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):
        Encode/decode the PageOverlay ID.

2014-11-28  Simon Fraser  <simon.fraser@apple.com>

        Allow clients of the WKRenderLayerRef C SPI to connect layer trees across frame boundaries
        https://bugs.webkit.org/show_bug.cgi?id=139021

        Reviewed by Dan Bernstein.
        
        Add WKRenderLayerGetFrameContentsLayer which returns a WKRenderLayerRef for
        the content document of a RenderWidget, if its has one (e.g. frames, iframes
        and <object> with document contents).

        * Shared/API/c/WKRenderLayer.cpp:
        (WKRenderLayerGetFrameContentsLayer):
        * Shared/API/c/WKRenderLayer.h:
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebRenderLayer.cpp:
        (WebKit::WebRenderLayer::create):
        (WebKit::WebRenderLayer::WebRenderLayer):
        * Shared/WebRenderLayer.h:
        (WebKit::WebRenderLayer::frameContentsLayer):

2014-11-28  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] SecComp buildfix after r176452
        https://bugs.webkit.org/show_bug.cgi?id=139081

        Reviewed by Antti Koivisto.

        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        (WebKit::SeccompBrokerClient::dispatch):
        (WebKit::SeccompBroker::runLoop):

2014-11-28  Csaba Osztrogonác  <ossy@webkit.org>

        Fix -Wc++11-narrowing error in SeccompFilters.cpp
        https://bugs.webkit.org/show_bug.cgi?id=139079

        Reviewed by Carlos Garcia Campos.

        * Shared/linux/SeccompFilters/SeccompFilters.cpp:
        (WebKit::SeccompFilters::addRule):
        * Shared/linux/SeccompFilters/SeccompFilters.h:

2014-11-28  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] SecComp buildfix after r168605 and r168999
        https://bugs.webkit.org/show_bug.cgi?id=139080

        Reviewed by Carlos Garcia Campos.

        * Shared/linux/SeccompFilters/SyscallPolicy.cpp:
        (WebKit::SyscallPolicy::addDefaultWebProcessPolicy):

2014-11-27  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Remove E_Dbus dependency
        https://bugs.webkit.org/show_bug.cgi?id=136355

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_main.cpp: Added init/shutdown for eldbus.
        (WebKit::EwkMain::initialize):
        (WebKit::EwkMain::finalize):
        (WebKit::EwkMain::shutdownInitializedEFLModules):

2014-11-25  Anders Carlsson  <andersca@apple.com>

        Remove user content handling from PageGroup
        https://bugs.webkit.org/show_bug.cgi?id=139051

        Reviewed by Antti Koivisto.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::addUserScript):
        (WebKit::InjectedBundle::addUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScript):
        (WebKit::InjectedBundle::removeUserStyleSheet):
        (WebKit::InjectedBundle::removeUserScripts):
        (WebKit::InjectedBundle::removeUserStyleSheets):
        (WebKit::InjectedBundle::removeAllUserContent):
        Talk to the user content controller from the passed in WebPageGroupProxy.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Create the WebPageGroupProxy before creating the page so we can get its user content controller and
        pass it to the page configuration if necessary.
        
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::userContentController):
        New function that lazily creates a user content controller. We don't want to create this eagerly since
        it's not used with the modern API.

        (WebKit::WebPageGroupProxy::addUserStyleSheet):
        (WebKit::WebPageGroupProxy::addUserScript):
        (WebKit::WebPageGroupProxy::removeAllUserStyleSheets):
        (WebKit::WebPageGroupProxy::removeAllUserScripts):
        (WebKit::WebPageGroupProxy::removeAllUserContent):
        Call through to the user content controller.

        * WebProcess/WebPage/WebPageGroupProxy.h:
        Add an m_userContentController member.

2014-11-25  Ting-Wei Lan  <lantw44@gmail.com>

        [GTK] Use LD_LIBRARY_PATH to make g-ir-scanner use the newly-built
        version of libraries when running the temporary executable
        https://bugs.webkit.org/show_bug.cgi?id=138833

        Reviewed by Carlos Garcia Campos.

        This patch modifies LD_LIBRARY_PATH to make sure the dynamic linker
        find the correct version of libraries when running the temporary
        executable to generate the .gir file.

        * PlatformGTK.cmake:

2014-11-25  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] REGRESSION(r176514): It made performance tests fail
        https://bugs.webkit.org/show_bug.cgi?id=139037

        Reviewed by Gyuyoung Kim.

        * WebProcess/efl/WebProcessMainEfl.cpp: Don't try to load/shutdown eail if eailLibraryPath() is empty.

2014-11-24  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove Qt cruft related to tap higlighting
        https://bugs.webkit.org/show_bug.cgi?id=139030

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * WebProcess/WebPage/TapHighlightController.cpp: Removed.
        * WebProcess/WebPage/TapHighlightController.h: Removed.

2014-11-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r176530.

        * UIProcess/CoordinatedGraphics/WebView.cpp: Replace pointer with reference.
        (WebKit::WebView::processDidExit):

2014-11-24  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Remove some bad stuff from WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=138896

        Reviewed by Sam Weinig.

        The state loadStateAtProcessExit does not seem to be used anywhere.

        The state urlAtProcessExit only exists to forward the url from
        WebPageProxy::resetStateAfterProcessExited() to the coordinated graphics code
        WebView::processDidExit().

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::processDidExit):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::urlAtProcessExit): Deleted.
        (WebKit::WebPageProxy::loadStateAtProcessExit): Deleted.

2014-11-24  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] REGRESSION(176066): It made all performance tests fail
        https://bugs.webkit.org/show_bug.cgi?id=138865

        Reviewed by Csaba Osztrogonác.

        Since r176066, there are crash because evas_gl_surface is destroyed with
        invalid evas_gl instance after evas_gl is destroyed.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::~EwkView):

2014-11-24  Alberto Garcia  <berto@igalia.com>

        Webkit2 doesnt build on powerpc 32 bits
        https://bugs.webkit.org/show_bug.cgi?id=130837

        Reviewed by Carlos Garcia Campos.

        Check if libatomic is needed in order to use std::atomic, and add
        it to the list of WebKit2 libraries.

        * PlatformGTK.cmake:

2014-11-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.7.2 release.

        * gtk/NEWS: Add release notes for 2.7.2.

2014-11-24  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Utilize Eail library to support accessibility in EFL
        https://bugs.webkit.org/show_bug.cgi?id=137742

        Reviewed by Gyuyoung Kim.

        Initialize EAIL module so that all the listeners and atk-bridge started properly.
        Dynamic loading of EAIL help us to avoid elementary dependencies in WebKit.

        * WebProcess/efl/WebProcessMainEfl.cpp:
        (eailLibraryPath): reads path provided by ACCESSIBILITY_EAIL_LIBRARY_PATH variable.
        (eail):

2014-11-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView is created with the wrong web context when using webkit_web_view_new_with_related_view()
        https://bugs.webkit.org/show_bug.cgi?id=139023

        Reviewed by Sergio Villar Senin.

        The WebKitWebContext is a construct only property, so it's always
        set to the default value when not provided, during the
        construction. When a related-view is used to create a new web view
        we should ensure that the same web context is used for the new web
        view, instead of the default. We should also ignore any web
        context given as construct parameter if a related view is alos provided.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Do not set the context to the default
        one when not given during construction.
        (webkitWebViewSetProperty): Only use the default web context when
        not provided as construct parameter and there isn't a related view.

2014-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to override the default local storage directory
        https://bugs.webkit.org/show_bug.cgi?id=138828

        Reviewed by Gustavo Noronha Silva.

        Add WebKitWebContext:local-storage-directory construct-only
        property. If not provided the default will be used.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextGetProperty):
        (webkitWebContextSetProperty):
        (webkitWebContextConstructed):
        (webkit_web_context_class_init):

2014-11-23  Conrad Shultz  <conrad_shultz@apple.com>

        Page previews should have titles
        https://bugs.webkit.org/show_bug.cgi?id=139020

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Declare -_titleForPreviewOfURL:.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _titleForPreviewOfURL:]):
        Stub implementation.

        * UIProcess/mac/WKActionMenuController.mm:
        (+[WKPagePreviewViewController previewPadding]):
        Account for the title height.
        (-[WKPagePreviewViewController loadView]):
        Set correct autoresize masks on some views; create and configure a title view that is
        horizontally and vertically centered.
        (-[WKActionMenuController pagePreviewViewController:titleForPreviewOfURL:]):
        WKPagePreviewViewControllerDelegate method; wrap -[WKView _titleForPreviewOfURL:].

2014-11-22  Simon Fraser  <simon.fraser@apple.com>

        Extend WKRenderObject and WKRenderLayer with some more useful data
        https://bugs.webkit.org/show_bug.cgi?id=139006

        Reviewed by Sam Weinig.
        
        Implement WKRenderLayerGetBackingStoreMemoryEstimate,
        WKRenderObjectCopyTextSnippet and WKRenderObjectGetTextLength for improved
        RenderLayer and RenderTree display in clients of the C SPI.        

        * Shared/API/c/WKRenderLayer.cpp:
        (WKRenderLayerGetBackingStoreMemoryEstimate):
        * Shared/API/c/WKRenderLayer.h:
        * Shared/API/c/WKRenderObject.cpp:
        (WKRenderObjectCopyTextSnippet):
        (WKRenderObjectGetTextLength):
        * Shared/API/c/WKRenderObject.h:
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebRenderLayer.cpp:
        (WebKit::WebRenderLayer::create):
        (WebKit::WebRenderLayer::WebRenderLayer):
        * Shared/WebRenderLayer.h:
        (WebKit::WebRenderLayer::backingStoreMemoryEstimate):
        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::create):
        (WebKit::WebRenderObject::WebRenderObject):
        * Shared/WebRenderObject.h:
        (WebKit::WebRenderObject::textSnippet):
        (WebKit::WebRenderObject::textLength):

2014-11-21  Jer Noble  <jer.noble@apple.com>

        Support multiple signatures of diagnostic logging.
        https://bugs.webkit.org/show_bug.cgi?id=138690

        Reviewed by Anders Carlsson.

        Extend the existing WKBundlePageDiagnosticLoggingClient interface by deprecating
        the original logDiagnosticMessage client method in V1 and adding three new,
        explicit client methods.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePageDiagnosticLoggingClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp:
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessageDeprecated):
            Renamed from logDiagnosticMessage().
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessage): Pass to the client.
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessageWithResult): Ditto.
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessageWithValue): Ditto.
        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::logDiagnosticMessage): Deleted.
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp: Added.
        (WebKit::WebDiagnosticLoggingClient::WebDiagnosticLoggingClient): Simple constructor.
        (WebKit::WebDiagnosticLoggingClient::~WebDiagnosticLoggingClient): Simple destructor.
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage): Pass to the injected bundle.
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult): Ditto.
        (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue): Ditto.
        * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize the new client.

2014-11-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r176459.

        r176459 removed Timer parameter in timer callbacks only for Mac port.
        So this patch applies it to remaining classes for EFL port.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::displayTimerFired):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/efl/TextCheckerClientEfl.cpp:
        (TextCheckerClientEfl::TextCheckerClientEfl):
        (TextCheckerClientEfl::languagesUpdateTimerFired):
        (TextCheckerClientEfl::spellCheckingSettingChangeTimerFired):
        * UIProcess/efl/TextCheckerClientEfl.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::layerFlushTimerFired):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2014-11-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, iOS build fix after r176462.

        Fix include path to TextIndicator.h to include WebCore/
        as it was moved.

        * UIProcess/ios/PageClientImplIOS.mm:

2014-11-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, iOS build fix after r176452.

        dencodeFixedLengthData() now only takes 2 arguments instead of
        3.

        * Shared/ios/QuickLookDocumentData.cpp:
        (WebKit::QuickLookDocumentData::decode):

2014-11-21  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add "show simple line layout debug borders" setting to MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=138981

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _simpleLineLayoutDebugBordersEnabled]):
        (-[WKPreferences _setSimpleLineLayoutDebugBordersEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2014-11-21  Eric Carlson  <eric.carlson@apple.com>

        WebVideoFullscreenManagerProxy must clear pointers when invalidated
        https://bugs.webkit.org/show_bug.cgi?id=138982

        Reviewed by Jer Noble.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::~WebVideoFullscreenManagerProxy): Call invalidate.
        (WebKit::WebVideoFullscreenManagerProxy::invalidate): Set WebVideoFullscreenModel and
            WebVideoFullscreenChangeObserver to NULL.

2014-11-21  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseDown:]):

2014-11-21  Beth Dakin  <bdakin@apple.com>

        The preview action menu item should not have a title
        https://bugs.webkit.org/show_bug.cgi?id=138989
        -and corresponding-
        rdar://problem/19061959

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _createActionMenuItemForTag:]):

2014-11-21  Conrad Shultz  <conrad_shultz@apple.com>

        Page previews should have a margin.
        https://bugs.webkit.org/show_bug.cgi?id=138990

        Reviewed by Beth Dakin.

        Enclose the WKWebView (or client-supplied preview view) in a container slightly larger
        than the preview view. Adjust sizing code to accommodate the margin.

        * UIProcess/mac/WKActionMenuController.mm:
        (+[WKPagePreviewViewController previewPadding]):
        Return the total amount of fixed padding surrounding the preview
        (-[WKPagePreviewViewController loadView]):
        Store the actual previewView in an ivar so that clients can distinguish it from the container
        view; wrap the preview in a container view; set frames appropriately.
        (-[WKActionMenuController _createPreviewPopover]):
        Update to reflect method rename; supplement the popover size with the fixed padding.
        (-[WKActionMenuController _preferredPopoverSizeWithPreviewPadding:]):
        Renamed from -_preferredPopoverSize; account for the fixed padding when computing the preferred size.
        (-[WKActionMenuController _clearPreviewPopover]):
        Use the previewView ivar instead of the view controller's view.
        (-[WKActionMenuController pagePreviewViewControllerWasClicked:]):
        Ditto.
        (-[WKActionMenuController _preferredPopoverSize]): Deleted.

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r176415): Can get stuck, unable to invoke any DataDetectors popovers
        https://bugs.webkit.org/show_bug.cgi?id=138955
        <rdar://problem/19056442>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView mouseDown:]):
        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController wkView:willHandleMouseDown:]):
        (-[WKActionMenuController didCloseMenu:withEvent:]):
        (-[WKActionMenuController menuNeedsUpdate:]):
        Keep track of whether we have called shouldUseActionsWithContext: on a
        DDActionContext; if we get a mouseDown without having seen didCloseMenu:
        (and thus don't properly pair the shouldUseActionsWithContext: with a didUseActions),
        tear down the old DDActionContext before proceeding.

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r176351): Parts of apple.com/contact aren't Lookup-able
        ​https://bugs.webkit.org/show_bug.cgi?id=138960
        <rdar://problem/19056715>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        (-[WKActionMenuController _defaultMenuItemsForMailtoLink]): Deleted.
        Use DataDetectors SPI instead of an explicit blacklist.

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        Crashes while encoding a TextIndicator with no contentImageWithHighlight
        https://bugs.webkit.org/show_bug.cgi?id=138984
        <rdar://problem/19063717>

        Reviewed by Sam Weinig.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        encodeImage doesn't deal with null images, so handle that case gracefully.

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r176351): Parts of apple.com/contact aren't Lookup-able
        https://bugs.webkit.org/show_bug.cgi?id=138960
        <rdar://problem/19056715>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        Blacklist contact results, because they don't have useful menus. If we
        bail before setting up _currentActionContext, we'll still allow fallthrough
        to ordinary text actions, avoiding mysterious failure when a contact is detected.

        This doesn't break the case that r176351 was intended to fix,
        because in that case we were detecting e.g. addresses.

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        Move TextIndicator{Window} to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=138954
        <rdar://problem/18992185>

        Some adjustments by Csaba Osztrogonác.
        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        Remove TextIndicator.cpp.

        * Scripts/webkit/messages.py:
        (struct_or_class):
        (headers_for_type):
        Tell messages.py that TextIndicatorData is a struct, and comes from TextIndicator.h.

        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<TextIndicatorData>::encode):
        (IPC::ArgumentCoder<TextIndicatorData>::decode):
        Add argument coders for TextIndicatorData.

        * Shared/DictionaryPopupInfo.h:        
        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/WKContentView.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        * UIProcess/mac/WKActionMenuController.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        Adjust to TextIndicator and TextIndicatorWindow's new home.

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r176238): Mailto links are getting preloaded, which results in a compose window
        https://bugs.webkit.org/show_bug.cgi?id=138972

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        Only preload links.

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Remove the Timer parameters from timer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=138974

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::bufferingTimerFired):
        * NetworkProcess/NetworkResourceLoader.h:
        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::WebMemorySampler):
        (WebKit::WebMemorySampler::sampleTimerFired):
        (WebKit::WebMemorySampler::stopTimerFired):
        * Shared/WebMemorySampler.h:
        * Shared/mac/RemoteLayerBackingStoreCollection.h:
        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        (WebKit::RemoteLayerBackingStoreCollection::RemoteLayerBackingStoreCollection):
        (WebKit::RemoteLayerBackingStoreCollection::volatilityTimerFired):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::layerFlushTimerFired):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::processSuspensionCleanupTimerFired):
        (WebKit::WebProcess::nonVisibleProcessCleanupTimerFired):
        * WebProcess/WebProcess.h:

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Remove the Timer parameters from timer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=138974

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::bufferingTimerFired):
        * NetworkProcess/NetworkResourceLoader.h:
        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::WebMemorySampler):
        (WebKit::WebMemorySampler::sampleTimerFired):
        (WebKit::WebMemorySampler::stopTimerFired):
        * Shared/WebMemorySampler.h:
        * Shared/mac/RemoteLayerBackingStoreCollection.h:
        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        (WebKit::RemoteLayerBackingStoreCollection::RemoteLayerBackingStoreCollection):
        (WebKit::RemoteLayerBackingStoreCollection::volatilityTimerFired):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::layerFlushTimerFired):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::processSuspensionCleanupTimerFired):
        (WebKit::WebProcess::nonVisibleProcessCleanupTimerFired):
        * WebProcess/WebProcess.h:

2014-11-21  Antti Koivisto  <antti@apple.com>

        Fix iOS build.

        * Shared/ios/QuickLookDocumentData.cpp:
        (WebKit::QuickLookDocumentData::encode):

2014-11-21  Antti Koivisto  <antti@apple.com>

        Remove alignment code from IPC coders
        https://bugs.webkit.org/show_bug.cgi?id=138963

        Reviewed by Anders Carlsson.

        Alignment code achieves nothing except making the messages somewhat bigger.

        * Platform/IPC/ArgumentCoders.cpp:
        (IPC::ArgumentCoder<CString>::encode):
        (IPC::ArgumentCoder<CString>::decode):
        (IPC::ArgumentCoder<String>::encode):
        (IPC::decodeStringText):
        * Platform/IPC/ArgumentCoders.h:
        (IPC::SimpleArgumentCoder::encode):
        (IPC::SimpleArgumentCoder::decode):
        * Platform/IPC/ArgumentDecoder.cpp:
        (IPC::ArgumentDecoder::initialize):
        (IPC::ArgumentDecoder::bufferIsLargeEnoughToContain):
        (IPC::ArgumentDecoder::decodeFixedLengthData):
        (IPC::ArgumentDecoder::decodeVariableLengthByteArray):
        (IPC::ArgumentDecoder::decodeNumber):
        (IPC::ArgumentDecoder::decode):
        (IPC::roundUpToAlignment): Deleted.
        (IPC::alignedBufferIsLargeEnoughToContain): Deleted.
        (IPC::ArgumentDecoder::alignBufferPosition): Deleted.
        (IPC::decodeValueFromBuffer): Deleted.
        * Platform/IPC/ArgumentDecoder.h:
        (IPC::ArgumentDecoder::isInvalid):
        (IPC::ArgumentDecoder::markInvalid):
        (IPC::ArgumentDecoder::bufferIsLargeEnoughToContain):
        * Platform/IPC/ArgumentEncoder.cpp:
        (IPC::ArgumentEncoder::ArgumentEncoder):
        (IPC::ArgumentEncoder::grow):
        (IPC::ArgumentEncoder::encodeFixedLengthData):
        (IPC::ArgumentEncoder::encodeVariableLengthByteArray):
        (IPC::ArgumentEncoder::encode):
        * Platform/IPC/ArgumentEncoder.h:
        (IPC::ArgumentEncoder::buffer):
        (IPC::ArgumentEncoder::mutableBuffer):
        * Platform/IPC/DataReference.cpp:
        (IPC::SharedBufferDataReference::encode):
        * Platform/IPC/MessageEncoder.cpp:
        (IPC::MessageEncoder::setIsSyncMessage):
        (IPC::MessageEncoder::setShouldDispatchMessageWhenWaitingForSyncReply):
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::sendOutgoingMessage):

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Make memoryCache() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=138939

        Reviewed by Antti Koivisto.

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didCacheResource):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins):
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::terminate):
        (WebKit::WebProcess::didClose):
        (WebKit::WebProcess::clearResourceCaches):
        (WebKit::getWebCoreMemoryCacheStatistics):
        (WebKit::WebProcess::setMemoryCacheDisabled):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetCacheModel):
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformSetCacheModel):

2014-11-21  Daniel Bates  <dabates@apple.com>

        [iOS] WebKit2 fails to build with public SDK due to missing SPI from CFNetwork, QuartzCore, MediaPlayer, XPC
        https://bugs.webkit.org/show_bug.cgi?id=138930

        Reviewed by Anders Carlsson.

        * NetworkProcess/mac/NetworkResourceLoaderMac.mm: Remove forward declaration for NSCachedURLResponse
        methods as this functionality was incorporated into CFNetworkSPI.h, which is included by this file.
        * Platform/mac/LayerHostingContext.mm: Moved QuartzCore forward declarations from this file to file
        QuartzCoreSPI.h and included header QuartzCoreSPI.h.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h: Include header XPCSPI.h.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm: Remove forward declarations of
        XPC SPI since these declarations are part of XCPSPI.h, which is included by header XPCServiceEntryPoint.h.
        * UIProcess/API/Cocoa/WKWebView.mm: Remove unnecessary include of header QuartzCore/CARenderServer.h
        as it will be included by header QuartzCoreSPI.h.
        * UIProcess/Network/NetworkProcessProxy.cpp: Include header XPCSPI.h when building for iOS with
        USE(XPC_SERVICES) enabled.
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: Include header MediaPlayerSPI.h instead of including
        MediaPlayer private headers directly. Also sort the list of #import directives.

2014-11-20  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:
        (-[WKAirPlayRoutePicker showAirPlayPickerIPad:fromRect:]): Cast the return value of
        [getMPAudioVideoRoutingPopoverControllerClass() alloc] to resolve ambiguity about which
        -initWithType: we are calling.
        (-[WKAirPlayRoutePicker showAirPlayPickerIPhone:]): Cast to resolve ambiguity.
        (-[WKAirPlayRoutePicker show:fromRect:]): Cast for consistency.

2014-11-20  Benjamin Poulain  <bpoulain@apple.com>

        Remove the remaining vestiges of minimal-ui
        https://bugs.webkit.org/show_bug.cgi?id=138890

        Reviewed by Sam Weinig.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        (WebKit::WebPage::didFinishDocumentLoad): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::savePageState):
        (WebKit::WebPage::restorePageState):
        (WebKit::WebPage::viewportConfigurationChanged):
        (WebKit::WebPage::updateViewportSizeForCSSViewportUnits):

2014-11-20  Beth Dakin  <bdakin@apple.com>

        Preview popover needs minimum and maximum sizes
        https://bugs.webkit.org/show_bug.cgi?id=138943
        -and corresponding-
        rdar://problem/18904651

        Reviewed by Tim Horton.

        Quick follow-up to get the right screen.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController largestPopoverSize]):

2014-11-20  Beth Dakin  <bdakin@apple.com>

        Preview popover needs minimum and maximum sizes
        https://bugs.webkit.org/show_bug.cgi?id=138943
        -and corresponding-
        rdar://problem/18904651

        Reviewed by Tim Horton.

        This patch enforces minimum and maximum popover sizes. If the popover needs to be 
        sized up to be above the minimum, it will end up covering some of the 
        _hitTestResult, so we should compute a new origin rect based on the original 
        event location. 
        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        (-[WKActionMenuController _previewURLFromActionMenu:]):
        (-[WKActionMenuController _createPreviewPopover]):
        (-[WKActionMenuController largestPopoverSize]):
        (-[WKActionMenuController _preferredPopoverSize]):
        (-[WKActionMenuController _preferredSizeForPopoverPresentedFromOriginRect:]): Deleted.

2014-11-20  Conrad Shultz  <conrad_shultz@apple.com>

        Clicks on previews can be recognized multiple times
        https://bugs.webkit.org/show_bug.cgi?id=138944

        Reviewed by Tim Horton.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKPagePreviewViewController _clickRecognized:]):
        Only dispatch the delegate message on the appropriate gesture recognizer state transition.

2014-11-20  Conrad Shultz  <conrad_shultz@apple.com>

        Clients should be able to customize preview click behavior
        https://bugs.webkit.org/show_bug.cgi?id=138940

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Declare -_handleClickInPreviewView:URL:.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _handleClickInPreviewView:URL:]):
        Extracted from -[WKActionMenuController pagePreviewViewControllerWasClicked:].

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController pagePreviewViewControllerWasClicked:]):
        Extract code to -[WKView _handleClickInPreviewView:URL:].

2014-11-20  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r176420 to fix non Apple builds.

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

2014-11-20  Anders Carlsson  <andersca@apple.com>

        WebPlugInClient::m_webPage can never be null, use a reference
        https://bugs.webkit.org/show_bug.cgi?id=138937

        Reviewed by Andreas Kling.

        * WebProcess/WebCoreSupport/WebPlugInClient.cpp:
        (WebKit::WebPlugInClient::WebPlugInClient):
        (WebKit::WebPlugInClient::shouldAutoStartFromOrigin):
        * WebProcess/WebCoreSupport/WebPlugInClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::shouldPlugInAutoStartFromOrigin):
        * WebProcess/WebProcess.h:

2014-11-20  Tim Horton  <timothy_horton@apple.com>

        TextIndicator should have getters for TextIndicator::Data properties
        https://bugs.webkit.org/show_bug.cgi?id=138920

        Reviewed by Beth Dakin.

        Instead of having clients reach into the data(), add getters.
        Remove frameRect(), which is identical to the textBoundingRectInWindowCoordinates getter.
        Remove declarations for draw/drawContentImage, which were already removed.

        * Shared/TextIndicator.cpp:
        (WebKit::TextIndicator::frameRect): Deleted.
        * Shared/TextIndicator.h:
        (WebKit::TextIndicator::textBoundingRectInWindowCoordinates):
        (WebKit::TextIndicator::textRectsInBoundingRectCoordinates):
        (WebKit::TextIndicator::contentImageScaleFactor):
        (WebKit::TextIndicator::contentImageWithHighlight):
        (WebKit::TextIndicator::contentImage):
        * UIProcess/mac/TextIndicatorWindow.mm:
        (-[WKTextIndicatorView initWithFrame:textIndicator:margin:]):
        (-[WKTextIndicatorView presentWithCompletionHandler:]):
        (WebKit::TextIndicatorWindow::setTextIndicator):

2014-11-20  Tim Horton  <timothy_horton@apple.com>

        Cancel DataDetectors menu earlier if we know it can't be presented
        https://bugs.webkit.org/show_bug.cgi?id=138922
        <rdar://problem/18950441>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        If we end up with a menu with no items, don't change selection or anything.

        (-[WKActionMenuController menuNeedsUpdate:]):
        Move our call to shouldUseActionsWithContext earlier, to menuNeedsUpdate,
        and use a bigger hammer (removeAllItems).

2014-11-20  Tim Horton  <timothy_horton@apple.com>

        Don't use a TextIndicator BounceAndCrossfade transition if the selection highlight is never shown
        https://bugs.webkit.org/show_bug.cgi?id=138919
        <rdar://problem/19042207>

        Reviewed by Beth Dakin.

        * Shared/TextIndicator.h:
        (WebKit::TextIndicator::presentationTransition):
        (WebKit::TextIndicator::setPresentationTransition):
        Add getter and setter pair.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        If the selection highlight will never be shown because there's only a single menu item,
        use a normal bounce animation instead of bounce + crossfade.

2014-11-20  Beth Dakin  <bdakin@apple.com>

        Invalid message WebPageProxy.DidPerformDictionaryLookup on Google stocks result
        https://bugs.webkit.org/show_bug.cgi?id=138568
        -and corresponding-
        rdar://problem/18904600

        Reviewed by Tim Horton.

        Skip images for lookup.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForRange):

2014-11-20  Daniel Bates  <dabates@apple.com>

        [iOS] Add more ENABLE({TOUCH_EVENTS, IOS_TOUCH_EVENTS})-guards in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=138928

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary):

2014-11-20  Anders Carlsson  <andersca@apple.com>

        Add -[WKWebView loadData:MIMEType:textEncodingName:baseURL:]
        https://bugs.webkit.org/show_bug.cgi?id=138929
        <rdar://problem/18683802>

        Reviewed by Dan Bernstein.

        Also, re-implement -[WKWebView loadHTMLString:baseURL:] in terms of this newly added function
        and assume a UTF-8 encoding. This matches what Legacy WebKit does.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadHTMLString:baseURL:]):
        (-[WKWebView loadData:MIMEType:textEncodingName:baseURL:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadData):
        * UIProcess/WebPageProxy.h:

2014-11-20  Antti Koivisto  <antti@apple.com>

        Remove alignment code from cache coders
        https://bugs.webkit.org/show_bug.cgi?id=138927

        Failed to land this file.

        * NetworkProcess/cache/NetworkCacheCoders.cpp:
        (WebKit::NetworkCacheCoder<CString>::encode):
        (WebKit::NetworkCacheCoder<CString>::decode):
        (WebKit::NetworkCacheCoder<String>::encode):
        (WebKit::decodeStringText):
        (WebKit::NetworkCacheCoder<WebCore::CertificateInfo>::encode):
        (WebKit::NetworkCacheCoder<WebCore::CertificateInfo>::decode):
        * NetworkProcess/cache/NetworkCacheCoders.h:

2014-11-20  Antti Koivisto  <antti@apple.com>

        Remove alignment code from cache coders
        https://bugs.webkit.org/show_bug.cgi?id=138927

        Reviewed by Anders Carlsson.

        Alignment code doesn't do anything useful, wastes space and produces wrong results
        if the encoder and decoder buffers don't have the same 8-byte alignment.

        * NetworkProcess/cache/NetworkCacheDecoder.cpp:
        (WebKit::NetworkCacheDecoder::NetworkCacheDecoder):
        (WebKit::NetworkCacheDecoder::bufferIsLargeEnoughToContain):
        (WebKit::NetworkCacheDecoder::decodeFixedLengthData):
        (WebKit::NetworkCacheDecoder::decodeNumber):
        (WebKit::roundUpToAlignment): Deleted.
        (WebKit::alignedBufferIsLargeEnoughToContain): Deleted.
        (WebKit::NetworkCacheDecoder::alignBufferPosition): Deleted.
        * NetworkProcess/cache/NetworkCacheDecoder.h:
        (WebKit::NetworkCacheDecoder::currentOffset):
        (WebKit::NetworkCacheDecoder::isInvalid):
        (WebKit::NetworkCacheDecoder::markInvalid):
        (WebKit::NetworkCacheDecoder::bufferIsLargeEnoughToContain):
        * NetworkProcess/cache/NetworkCacheEncoder.cpp:
        (WebKit::NetworkCacheEncoder::grow):
        (WebKit::NetworkCacheEncoder::encodeFixedLengthData):
        (WebKit::NetworkCacheEncoder::encodeNumber):
        (WebKit::roundUpToAlignment): Deleted.
        * NetworkProcess/cache/NetworkCacheEncoder.h:

2014-11-20  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] URTBF after r176363.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setTextIndicator):
        * UIProcess/API/gtk/PageClientImpl.h:

2014-11-19  Yongjun Zhang  <yongjun_zhang@apple.com>

        Don't track sub-resources that are started after main frame progress has completed.
        https://bugs.webkit.org/show_bug.cgi?id=138582

        Reviewed by Sam Weinig.

        After main frame progress has finished, starting loading a sub-resource shouldn't affect
        UI process's view of page loading status (i.e., the page has already completed loading
        and the progress shouldn't change). To achive that, don't track the subresources that
        are started after the main frame has finished, except for those triggered by user interaction.

        * WebProcess/WebCoreSupport/WebProgressTrackerClient.cpp:  Notify WebPage that the main frame progress
            has started or finished.
        (WebKit::WebProgressTrackerClient::progressStarted):
        (WebKit::WebProgressTrackerClient::progressFinished):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::addResourceRequest): Don't track the resource request if it is initiated after
            the main frame is loaded and it is not triggered by user interaction.
        (WebKit::WebPage::removeResourceRequest):
        * WebProcess/WebPage/WebPage.h: Rename m_networkResourceRequestIdentifiers to m_trackedNetworkResourceRequestIdentifiers.
        (WebKit::WebPage::setMainFrameProgressCompleted):

2014-11-19  Sun-woo Nam  <sunny.nam@samsung.com>

        [EFL] Fix build failure since r176363.
        https://bugs.webkit.org/show_bug.cgi?id=138903

        Reviewed by Gyuyoung Kim.

        The parameter for animation on setTextIndicator() was removed on 'PageClient' class.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::setTextIndicator):
        * UIProcess/CoordinatedGraphics/WebView.h:

2014-11-19  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the iOS build

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

2014-11-19  Timothy Horton  <timothy_horton@apple.com>

        Fix the 32-bit build

        * UIProcess/mac/TextIndicatorWindow.mm:
        (WebKit::TextIndicatorWindow::setTextIndicator):

2014-11-19  Tim Horton  <timothy_horton@apple.com>

        Add an optional entry transition (from selection highlight) to TextIndicator
        https://bugs.webkit.org/show_bug.cgi?id=138856
        <rdar://problem/18840128>

        Reviewed by Anders Carlsson.

        * Shared/TextIndicator.cpp:
        (WebKit::outsetIndicatorRectIncludingShadow):
        (WebKit::TextIndicator::createWithRange):
        (WebKit::snapshotSelectionWithHighlight):
        (WebKit::TextIndicator::createWithSelectionInFrame):
        (WebKit::TextIndicator::frameRect):
        (WebKit::TextIndicator::Data::encode):
        (WebKit::TextIndicator::Data::decode):
        Remove TextIndicator::draw and related functions; drawing is handled entirely
        by the TextIndicatorWindow now, and TextIndicator just stores the required data.

        Unify outsetIndicatorRectIncludingShadow.

        Add an argument to createWithRange/createWithSelectionInFrame to indicate
        if the TextIndicator should transition from the selection highlight to
        the yellow bubble.

        If we're doing the transition, paint the selection into a second bitmap,
        without forcing the text to black and without hiding the blue highlight.

        Encode/decode the second bitmap.

        * Shared/TextIndicator.h:
        * UIProcess/mac/TextIndicatorWindow.h:
        * UIProcess/mac/TextIndicatorWindow.mm:
        (-[WKTextIndicatorView initWithFrame:textIndicator:margin:transitionFromSelectionColor:]):
        (-[WKTextIndicatorView presentWithCompletionHandler:]):
        (-[WKTextIndicatorView hideWithCompletionHandler:]):
        (-[WKTextIndicatorView isFlipped]):
        (WebKit::TextIndicatorWindow::TextIndicatorWindow):
        (WebKit::TextIndicatorWindow::setTextIndicator):
        (WebKit::TextIndicatorWindow::closeWindow):
        (WebKit::TextIndicatorWindow::startFadeOutTimerFired):
        Re-implement the bounce animation using CoreAnimation instead of
        the WKSI-based WKWindowBounceAnimation*.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForSelection):
        (WebKit::WebPage::performDictionaryLookupOfCurrentSelection):
        (WebKit::WebPage::performDictionaryLookupForRange):
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        Use the aforementioned transition animation for performDictionaryLookupOfCurrentSelection,
        the context menu lookup item, and for Data Detectors.

2014-11-19  Anders Carlsson  <andersca@apple.com>

        Add a version of API::Data::createWithoutCopying that takes an NSData
        https://bugs.webkit.org/show_bug.cgi?id=138893

        Reviewed by Dan Bernstein.

        * Shared/APIData.h:
        * Shared/Cocoa/APIDataCocoa.mm: Added.
        (API::Data::createWithoutCopying):
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]):
        (releaseNSData): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]):

2014-11-19  Beth Dakin  <bdakin@apple.com>

        Invoking an action menu on a selection should result in the text menu
        https://bugs.webkit.org/show_bug.cgi?id=138892
        -and corresponding-
        rdar://problem/18996776

        Reviewed by Tim Horton.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItems]):

2014-11-19  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:

2014-11-19  Anders Carlsson  <andersca@apple.com>

        Rename two Cocoa-only .cpp files to .mm.

        Rubber-stamped by Sam Weinig.

        * Shared/APIWebArchive.mm: Renamed from Source/WebKit2/Shared/APIWebArchive.cpp.
        * Shared/APIWebArchiveResource.mm: Renamed from Source/WebKit2/Shared/APIWebArchiveResource.cpp.
        * WebKit2.xcodeproj/project.pbxproj:

2014-11-19  Beth Dakin  <bdakin@apple.com>

        Data detected results with no menu items should not fall through to regular text 
        action menus
        https://bugs.webkit.org/show_bug.cgi?id=138887
        -and corresponding-
        rdar://problem/18971616

        Reviewed by Tim Horton.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItems]):

2014-11-19  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebKit build with public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=136863

        Reviewed by David Kilzer.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm: Moved CFNetwork forward declarations
        from this file to file CFNetworkSPI.h and included header CFNetworkSPI.h.
        * NetworkProcess/mac/NetworkDiskCacheMonitor.mm: Ditto.
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm: Ditto.
        * UIProcess/API/Cocoa/WKProcessPool.mm: Ditto.
        * UIProcess/mac/WebContextMac.mm: Ditto.
        * WebProcess/cocoa/WebProcessCocoa.mm: Ditto.

2014-11-19  Anders Carlsson  <andersca@apple.com>

        Add APIs for customizing the user agent
        https://bugs.webkit.org/show_bug.cgi?id=138881
        rdar://problem/17233981

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView customUserAgent]):
        (-[WKWebView setCustomUserAgent:]):
        (-[WKWebView _customUserAgent]):
        (-[WKWebView _setCustomUserAgent:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (LazyInitialized::set):
        (-[WKWebViewConfiguration copyWithZone:]):
        (defaultApplicationNameForUserAgent):
        (-[WKWebViewConfiguration applicationNameForUserAgent]):
        (-[WKWebViewConfiguration setApplicationNameForUserAgent:]):

2014-11-19  Simon Fraser  <simon.fraser@apple.com>

        [WK2 UI-side compositing] Initialize RemoteLayerTreeTransaction properties which are unset on Mac
        https://bugs.webkit.org/show_bug.cgi?id=138877

        Reviewed by Tim Horton.
        
        These data members are unused on Mac, but still encoded, so initialize them with
        reasonable values.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::RemoteLayerTreeTransaction):

2014-11-19  Enrica Casucci  <enrica@apple.com>

        Refactor iOS selection gestures.
        https://bugs.webkit.org/show_bug.cgi?id=138720
        rdar://problem/18964359

        Reviewed by Benjamin Poulain.

        This is a first step towards refactoring the selection gestures code.
        It introduces more general selection movement functions that can be used to build
        the gestures.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (toWKTextGranularity):
        (toWKSelectionDirection):
        (-[WKContentView selectPositionAtPoint:completionHandler:]):
        (-[WKContentView selectPositionAtBoundary:inDirection:fromPoint:completionHandler:]):
        (-[WKContentView selectTextWithGranularity:atPoint:completionHandler:]):
        (-[WKContentView beginSelectionInDirection:completionHandler:]):
        (-[WKContentView updateSelectionWithExtentPoint:completionHandler:]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::selectTextWithGranularityAtPoint):
        (WebKit::WebPageProxy::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPageProxy::selectPositionAtPoint):
        (WebKit::WebPageProxy::beginSelectionInDirection):
        (WebKit::WebPageProxy::updateSelectionWithExtentPoint):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::visiblePositionInFocusedNodeForPoint):
        (WebKit::WebPage::selectPositionAtPoint):
        (WebKit::WebPage::selectPositionAtBoundaryWithDirection):
        (WebKit::WebPage::selectTextWithGranularityAtPoint):
        (WebKit::WebPage::beginSelectionInDirection):
        (WebKit::WebPage::updateSelectionWithExtentPoint):

2014-11-19  Simon Fraser  <simon.fraser@apple.com>

        [WK2 UI-side Compositing] Fix the position and scroll indicator of the UI-side tiled scrolling indicator
        https://bugs.webkit.org/show_bug.cgi?id=138876

        Reviewed by Beth Dakin.
        
        Fix the position of the tiled scrolling indicator in MiniBrowser by taking top
        content offset into account.
        
        On Mac, pass the current scroll position back to the UI process via the RemoteLayerTreeTransaction
        so that we can use it to show the correctly scroll offset in the indicator. This is temporary until
        Mac does UI-side scrolling.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::scrollPosition):
        (WebKit::RemoteLayerTreeTransaction::setScrollPosition):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):

2014-11-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Error in documentation of webkit_print_operation_get_page_setup()
        https://bugs.webkit.org/show_bug.cgi?id=138868

        Reviewed by Carlos Garcia Campos.

        Fix copypaste error in documentation of
        webkit_print_operation_get_page_setup().

        * UIProcess/API/gtk/WebKitPrintOperation.cpp:

2014-11-19  Mark Rowe  <mrowe@apple.com>

        Remove an unused file.

        * version.plist: Removed.

2014-11-18  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Remove the minimalUI code from the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=138819

        Reviewed by Sam Weinig.

        It looks like the only interface we have to keep alive is
        [WKWebView _overrideLayoutParametersWithMinimumLayoutSize:minimumLayoutSizeForMinimalUI:maximumUnobscuredSizeOverride:].

        Clean up everything else, it is a pile of useless code.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLoadForMainFrame]):
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _didRelaunchProcess]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:minimumLayoutSizeForMinimalUI:maximumUnobscuredSizeOverride:]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]):
        (-[WKWebView _setUsesMinimalUI:]): Deleted.
        (-[WKWebView _usesMinimalUI]): Deleted.
        (activeMinimumLayoutSizeForMinimalUI): Deleted.
        (-[WKWebView _setMinimumLayoutSizeOverrideForMinimalUI:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _frameOrBoundsChanged]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setUsesMinimalUI): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSizeForMinimalUI): Deleted.
        (WebKit::WebPageProxy::setUsesMinimalUI): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportPropertiesDidChange):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSizeForMinimalUI): Deleted.

2014-11-18  Conrad Shultz  <conrad_shultz@apple.com>

        Unreviewed. Revision to the build fix in r176304.

        The guarded method should simply be in the !TARGET_OS_IPHONE block.

        * UIProcess/API/Cocoa/WKViewPrivate.h:

2014-11-18  Benjamin Poulain  <bpoulain@apple.com>

        iOS8 new "slow tap" heuristic fires mouse compat events despite preventDefault on touchend
        https://bugs.webkit.org/show_bug.cgi?id=137069
        rdar://problem/18481464

        Reviewed by Simon Fraser.

        On WebKit2, we let UIWebTouchEventsGestureRecognizer and _UIWebHighlightLongPressGestureRecognizer
        run concurrently. This causes a race with an incorrect behavior:
        1) If UIWebTouchEventsGestureRecognizer does not cancel the native gestures on start.
        2) _UIWebHighlightLongPressGestureRecognizer starts after highlightDelay.
        3) When the finger leaves the screen, both gestures end.
        -> If the touch end sent to JavaScript in [3] ask the priority over native events, that no longer stops
           the _UIWebHighlightLongPressGestureRecognizer.

        The two gesture recognizers can run in any order, there is no guarantee on which one runs first.
        To solve the bug, I must make sure the _UIWebHighlightLongPressGestureRecognizer never trigger a click
        if the page wants the event.

        To solve the order problem, I use the fact that event recognition goes in two phases for
        non cancelled events:
        1) Update the gesture recognizers.
        2) Trigger the actions.

        I do not know the order of recognizers in [1], but I know both have run before [2] is executed.
        I use that to stop _UIWebHighlightLongPressGestureRecognizer from ending with a click in the case of the bug:
        1) When _UIWebHighlightLongPressGestureRecognizer starts, I set _highlightLongPressCanClick signaling
           the gesture can end normally. This is done on a timer and not direct input so I don't really have to worry
           about a race here.
        2) When processing the touch event for UIWebTouchEventsGestureRecognizer, I reset the flag _highlightLongPressCanClick
           if the page wants the event.
        3) When the actions of _UIWebHighlightLongPressGestureRecognizer are processed, the touch event
           has already been processed by the page and the flag has been cleared if needed.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEvent:preventsNativeGestures:]):
        (-[WKContentView _highlightLongPressRecognized:]):

2014-11-18  Ryosuke Niwa  <rniwa@webkit.org>

        iOS build fix after r176299. This method is not defined in WKViewIOS.mm.

        * UIProcess/API/Cocoa/WKViewPrivate.h:

2014-11-18  David Kilzer  <ddkilzer@apple.com>

        FeatureDefines.xcconfig: Switch from using PLATFORM_NAME to SDK selectors
        <http://webkit.org/b/138813>

        Reviewed by Mark Rowe.

        * Configurations/FeatureDefines.xcconfig: Switch to using SDK
        selectors.

2014-11-18  Conrad Shultz  <conrad_shultz@apple.com>

        Give clients a way to cancel preview popovers
        https://bugs.webkit.org/show_bug.cgi?id=138855

        Reviewed by Tim Horton.

        Promote -[WKView _dismissActionMenuPopovers] from internal to private.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dismissActionMenuPopovers]):
        * UIProcess/API/mac/WKViewInternal.h:

2014-11-18  Chris Dumez  <cdumez@apple.com>

        Add a setting to toggle DOMTimer throttling support
        https://bugs.webkit.org/show_bug.cgi?id=138844
        <rdar://problem/19020874>

        Reviewed by Andreas Kling.

        Add a setting to disable DOM timers throttling, in order to help
        developers determine if a specific issue is caused by timer
        throttling.

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

2014-11-18  Geoffrey Garen  <ggaren@apple.com>

        Removed the custom allocator for ListHashSet nodes
        https://bugs.webkit.org/show_bug.cgi?id=138841

        Reviewed by Andreas Kling.

        Uses of ListHashSet no longer need to declare an inline capacity,
        since that was only used to specify the capacity of the custom allocator.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::loadPluginsIfNecessary):

2014-11-18  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed build fix after r176283.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:

2014-11-18  Tim Horton  <timothy_horton@apple.com>

        Avoid re-encoding action menu image data
        https://bugs.webkit.org/show_bug.cgi?id=138817
        <rdar://problem/18840382>

        Reviewed by Anders Carlsson.

        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):
        Store and encode a SharedMemory with the raw encoded image data,
        instead of re-painting the image into a ShareableBitmap.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _hitTestResultImage]):
        (-[WKActionMenuController _defaultMenuItemsForImage]):
        (-[WKActionMenuController _copyImage:]):
        (-[WKActionMenuController _addImageToPhotos:]):
        (-[WKActionMenuController _defaultMenuItems]):
        (-[WKActionMenuController _canAddMediaToPhotos]): Deleted.
        Build a temporary filename from a UUID and the image's desired extension.
        Use the Image's encoded data instead of re-encoding it with CGImageDestination.
        Build an image menu only if we have an image, URL, data, and extension.

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

2014-11-18  Eric Carlson  <eric.carlson@apple.com>

        [iOS] allow host application to opt-out of alternate fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=138787

        Reviewed by Sam Weinig.
        
        "allowsAlternateFullscreen" doesn't need to be in the public WKWebView header.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): allowsAlternateFullscreen -> _allowsAlternateFullscreen.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h: Remove allowsAlternateFullscreen.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _allowsAlternateFullscreen]): New.
        (-[WKWebViewConfiguration _setAllowsAlternateFullscreen:]): New.

        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Declare _allowsAlternateFullscreen.

2014-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Subclass CachedFont for SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=138686

        Reviewed by Simon Fraser.

        Re-landing due to flakey bots.

        Update for enum type.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::maximumBufferingTime):

2014-11-18  Chris Dumez  <cdumez@apple.com>

        Update the Vector API to deal with unsigned types instead of size_t
        https://bugs.webkit.org/show_bug.cgi?id=138824

        Reviewed by Andreas Kling.

        Update code base to fix build errors related to the typing changes
        in the Vector API (size_t -> unsigned).

        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/DataReference.h:

2014-11-18  Commit Queue  <commit-queue@webkit.org>

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

        caused many test failures (Requested by litherum on #webkit).

        Reverted changeset:

        "Subclass CachedFont for SVG fonts"
        https://bugs.webkit.org/show_bug.cgi?id=138686
        http://trac.webkit.org/changeset/176264

2014-11-18  Daniel Bates  <dabates@apple.com>

        [iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions, MobileGestalt
        SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138802

        Reviewed by David Kilzer.

        Include headers DispatchSPI.h and MachVMSPI.h.h instead of including
        libdispatch and Mach headers directly.

        * Platform/mac/SharedMemoryMac.cpp:
        * UIProcess/ios/WebMemoryPressureHandlerIOS.mm:

2014-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Subclass CachedFont for SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=138686

        Reviewed by Simon Fraser.

        Update for enum type.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::maximumBufferingTime):

2014-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to create a WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=138826

        Reviewed by Gustavo Noronha Silva.

        We have always used a default web context without providing API to
        create others. The main reason was that nobody requested it and we
        haven't needed it either. The main problem of the default web
        context is that you can't configure anything during
        construction. This hasn't been a problem so far because all the
        web context configuration we expose in the API can be configured
        after construction. But now we need to expose API to allow the
        user to configure the local storage directory, which is a
        construct only configuration. The default web context was also a
        problem for our unit tests, because sharing the same context made
        it difficult to ensure tests cases are independent to each other.

        * UIProcess/API/gtk/WebKitGeolocationProvider.cpp:
        (WebKitGeolocationProvider::~WebKitGeolocationProvider): Reset the
        provider to avoid crashes when web context is destroyed and a new
        one is created.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextConstructed): Add constructed implementation to
        create the WebContext and initialize it.
        (webkitWebContextDispose): Detach web context clients to avoid
        crashes when a client callback is called on a disposed WebKitWebContext.
        (webkit_web_context_class_init): Initialize gettext, add
        constructed implementation and add the pointer to the vmethods
        when creating signals.
        (createDefaultWebContext): Simply create a WebKitWebContext.
        (webkit_web_context_new): New public method to create a WebKitWebContext.
        (injectedBundleFilename): Deleted.
        * UIProcess/API/gtk/WebKitWebContext.h: Add virtual methods for
        signals, so that users can inherit from WebKitWebContext and
        override the virtual methods.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.

2014-11-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [SOUP] [GnuTLS] Don't use a SSL3.0 record version in client hello.
        https://bugs.webkit.org/show_bug.cgi?id=138794

        Reviewed by Sergio Villar Senin.

        It seems that following POODLE many sites incorrectly banned SSL 3.0
        record packet versions. Since GnuTLS uses a SSL 3.0 record to
        advertise TLS 1.2, they are effectively banning it even if it doesn't
        advertise SSL 3.0. That is a server issue, but it can be worked around
        by using the modifier %LATEST_RECORD_VERSION.

        With this modifier, GnuTLS will use the latest TLS version record
        in client hello instead of using the default SSL 3.0.

        * NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp:
        (main):
        * WebProcess/EntryPoint/unix/WebProcessMain.cpp:
        (main):

2014-11-17  Conrad Shultz  <conrad_shultz@apple.com>

        Page previews should be loaded sooner
        https://bugs.webkit.org/show_bug.cgi?id=138814

        Reviewed by Tim Horton.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        Send -_createPreviewPopover..
        (-[WKActionMenuController _previewURLFromActionMenu:]):
        Relocate some logic to the new -_createPreviewPopover; gate early return on popover visibility.
        (-[WKActionMenuController _createPreviewPopover]):
        Renamed from -_createPreviewPopoverForURL:originRect:; explicitly send -loadView to warm up the preview view.
        (-[WKActionMenuController _createPreviewPopoverForURL:originRect:]): Deleted.

2014-11-17  Beth Dakin  <bdakin@apple.com>

        Preview is sometimes dismissed too early
        https://bugs.webkit.org/show_bug.cgi?id=138811
        -and corresponding-
        rdar://problem/18900839

        Reviewed by Tim Horton.

        Don’t make the popover transient until didCloseMenu: time.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController didCloseMenu:withEvent:]):
        (-[WKActionMenuController _createPreviewPopoverForURL:originRect:]):

2014-11-17  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r176232.

        Broke the Mac build. Will investigate offline.

        Reverted changeset:

        "[iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions,
        MobileGestalt"
        https://bugs.webkit.org/show_bug.cgi?id=138802
        http://trac.webkit.org/changeset/176232

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions, MobileGestalt
        SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138802

        Reviewed by David Kilzer.

        Include headers DispatchSPI.h and MachVMSPI.h.h instead of including
        libdispatch and Mach headers directly.

        * Platform/mac/SharedMemoryMac.cpp:
        * UIProcess/ios/WebMemoryPressureHandlerIOS.mm:

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] CoreText and CoreUI SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138760

        Reviewed by David Kilzer.

        Include header CoreTextSPI.h instead of including CoreText private headers.

        * WebProcess/WebPage/WebPage.cpp:

2014-11-17  Tim Horton  <timothy_horton@apple.com>

        DataDetectors PageOverlay callbacks can come in to the wrong overlay
        https://bugs.webkit.org/show_bug.cgi?id=138801
        <rdar://problem/18991369>

        Reviewed by Anders Carlsson.

        We can call dataDetectorsDidHideUI on the wrong (or no) PageOverlay,
        because it's possible to have another performActionMenuHitTestAtLocation
        between the first one and the dataDetectorsDid*UI that correspond to it.

        To make sure that the callbacks come to the right PageOverlay, plumb
        an integer ID through all of the callbacks and find the overlay based on that.

        * Shared/mac/ActionMenuHitTestResult.h:
        Store the ID of the PageOverlay that overrode data detection.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        Send the ID back to the Web process when replying from DD callbacks.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Store the ID of the PageOverlay that overrode data detection instead of
        keeping the PageOverlay itself.

        (WebKit::WebPage::dataDetectorsDidPresentUI):
        (WebKit::WebPage::dataDetectorsDidChangeUI):
        (WebKit::WebPage::dataDetectorsDidHideUI):
        Find and reply to the correct page overlay.

2014-11-17  Beth Dakin  <bdakin@apple.com>

        Whitespace action menus should focus the HitTestResult and create an insertion 
        point
        https://bugs.webkit.org/show_bug.cgi?id=138786
        -and corresponding-
        rdar://problem/18944893

        Reviewed by Tim Horton.

        Whitespace menus should cause the HitTestResult to be focused, and they should set 
        the selection based on the HitTest location.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::focusAndSelectLastActionMenuHitTestResult):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController isMenuForTextContent]):
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        (WebKit::WebPage::focusAndSelectLastActionMenuHitTestResult):

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] AVKit and MediaPlayer SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138756

        Reviewed by Eric Carlson.

        Include header MPAVRoutingControllerSPI.h instead of including the
        private header MPAVRoutingController.h.

        Additionally, sort the list of #import directives.

        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm:

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] QuartzCore SPI not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138751

        Reviewed by David Kilzer.

        * Shared/mac/RemoteLayerBackingStore.mm: Move CALayer forward declaration
        from this file to file QuartzCoreSPI.h and include header QuartzCoreSPI.h.
        * Shared/mac/RemoteLayerTreePropertyApplier.mm: Ditto.
        * UIProcess/API/Cocoa/WKWebView.mm: Include header QuartzCoreSPI.h instead
        of including QuartzCore headers directly.
        * UIProcess/ios/ViewGestureControllerIOS.mm: Ditto.
        * UIProcess/ios/WKContentView.mm: Ditto.
        * UIProcess/ios/WKPDFPageNumberIndicator.mm: Ditto.
        * UIProcess/mac/ViewGestureControllerMac.mm: Move CAFilter forward declarations
        from this file to fileQuartzCoreSPI.h and include header QuartzCoreSPI.h.
        Also sort the list of #import directives.
        * UIProcess/mac/ViewSnapshotStore.mm: Include header QuartzCoreSPI.h
        instead of including QuartzCore headers directly.

2014-11-17  Eric Carlson  <eric.carlson@apple.com>

        [iOS] allow host application to opt-out of alternate fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=138787

        Reviewed by Darin Adler.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAllowsAlternateFullscreen):
        (WKPreferencesGetAllowsAlternateFullscreen):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration copyWithZone:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2014-11-16  Benjamin Poulain  <bpoulain@apple.com>

        Start cleaning up minimal UI from WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=138725

        Reviewed by Sam Weinig.

        Start removing the old update path for minimumLayoutSize/maximumUnobscuredSize.

        Unfortunately, I cannot remove everything yet because the clients still did not have
        alternatives to [_overrideLayoutParametersWithMinimumLayoutSize:minimumLayoutSizeForMinimalUI:maximumUnobscuredSizeOverride]
        and might change the minimal UI options.

        This patch adds [_overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride] to move
        in the right direction. Next we'll udpate the client code and get rid of all the useless code.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:minimumLayoutSizeForMinimalUI:maximumUnobscuredSizeOverride:]):
        (-[WKWebView _overrideLayoutParametersWithMinimumLayoutSize:maximumUnobscuredSizeOverride:]):
        (-[WKWebView _minimumLayoutSizeOverrideForMinimalUI]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-11-16  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Add typecasting support for GraphicsLayerTextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=138741

        Reviewed by Martin Robinson.

        Replace uses of toTextureMapperLayer() with downcasting and
        calling the GraphicsLayerTextureMapper::layer() method.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):
        (WebKit::LayerTreeHostGtk::layerFlushTimerFired):
        (WebKit::LayerTreeHostGtk::compositeLayersToContext):

2014-11-16  Tim Horton  <timothy_horton@apple.com>

        Use TextIndicator instead of the built in Lookup highlight
        https://bugs.webkit.org/show_bug.cgi?id=138775
        <rdar://problem/18953982>

        Follow-up to r176164.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView initWithFrame:context:configuration:webView:]):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        Include the softlinking macros directly in the files they're used
        in, as they're supposed to be used.

2014-11-16  Tim Horton  <timothy_horton@apple.com>

        Use TextIndicator instead of the built in Lookup highlight
        https://bugs.webkit.org/show_bug.cgi?id=138775
        <rdar://problem/18953982>

        Reviewed by Anders Carlsson.

        In order to make the yellow highlight for Lookup more accurately match the
        painted content of the web page (in light of e.g. Web fonts, and interesting
        text features that only WebKit implements and cannot round-trip through
        NSAttributedString), use a TextIndicator instead of the built-in Lookup
        highlight where possible.

        * Configurations/BaseTarget.xcconfig:
        Make it possible to include headers from private frameworks. This matches WebCore.

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:
        Include the attributed string inside the DictionaryPopupInfo, instead of
        as a secondary argument to DidPerformDictionaryLookup.
        Add a TextIndicator to DictionaryPopupInfo, which can be used to highlight
        the text in the UI process.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _dictionaryLookupPopoverWillClose:]):
        (-[WKView _setTextIndicator:fadeOut:animate:animationCompletionHandler:]):
        (-[WKView _setTextIndicator:fadeOut:animate:]):
        (-[WKView initWithFrame:context:configuration:webView:]):
        (+[WKView hideWordDefinitionWindow]):
        * UIProcess/API/mac/WKViewInternal.h:
        Adopt the Lookup SPI header.
        If we have the requisite API, register the notification that Lookup sends
        when the popover closes, and hook that up to hide the text indicator.
        Add a version of _setTextIndicator: that takes an animation completion handler.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::didPerformDictionaryLookup):
        Adjust to the new didPerformDictionaryLookup signature.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Remove a WKSI import.

        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        If we have the requisite API, disable Lookup's built-in highlight and
        present a TextIndicator instead.
        We currently have to run the animations serially (first bounce the TextIndicator,
        then animate in the Lookup popover) because the act of adding the Lookup popover
        blocks us from getting any animation events for the TextIndicator, and breaks
        the bounce. We could also fix this by using a threaded animation for the TextIndicator,
        but it's not clear that it's safe to do so.

        (WebKit::PageClientImpl::dismissDictionaryLookupPanel):
        When explicitly dismissing the Lookup panel, also hide the text indicator.

        * UIProcess/mac/TextIndicatorWindow.h:
        * UIProcess/mac/TextIndicatorWindow.mm:
        (WebKit::TextIndicatorWindow::setTextIndicator):
        Store the completion handler.

        (WebKit::TextIndicatorWindow::bounceAnimationDidEnd):
        Call the completion handler when the animation completes.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        Disable the Lookup item if lookup is not available.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::showDefinitionForAttributedString):
        Adjust to the new didPerformDictionaryLookup signature.
        Since PDFPlugin can't trivially repaint the required part of the PDF,
        we don't build a TextIndicator. This will result in PDFPlugin continuing
        to use Lookup's built-in highlight.
        
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForRange):
        Build a TextIndicator from the Lookup range and pass it along with
        the DictionaryPopupInfo.

2014-11-15  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r176137): iOS build broke after moving DataDetectors scanning code to WebCore

        This regressed with the following commit:

            Move DataDetectors scanning code to WebCore
            https://bugs.webkit.org/show_bug.cgi?id=138731
            <rdar://problem/18877535>

        * Shared/mac/ActionMenuHitTestResult.mm: Add PLATFORM(MAC) check
        around the entire implementation since it it unused on iOS.

2014-11-14  Anders Carlsson  <andersca@apple.com>

        Raise an exception if -[WKWebView initWithFrame:configuration:] is passed a nil configuration
        https://bugs.webkit.org/show_bug.cgi?id=138757

        Reviewed by Simon Fraser.

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

2014-11-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Network process crash when running http/tests/appcache/fallback.html
        https://bugs.webkit.org/show_bug.cgi?id=138740

        Reviewed by Alexey Proskuryakov.

        It happens because ResourceHandle::continueWillSendRequest() is
        called with a null request. We could handle that case in the
        ResourceHandle, but the thing is tha the behaviour is
        not the same for async loads, or when loading in the web
        process. In WebResourceLoader::willSendRequest(),
        ResourceRequest::willSendRequest() is called, and cancels the load
        if the client returns a null request. In this case, the
        ResourceLoader is detached and WebResourceLoader::willSendRequest()
        returns early without sending the ContinueWillSendRequest message
        to the network process. However, for synchronous loads,
        NetworkResourceLoader::continueWillSendRequest() is always called.

        Fixes http/tests/appcache/fallback.html for GTK port when using
        the network process.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest): Do not
        call ResourceHandle::continueWillSendRequest() if the client
        request is null, since the load is going to be cancelled.

2014-11-15  Tim Horton  <timothy_horton@apple.com>

        Implement data detectors and mailto action menus for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=138765
        <rdar://problem/18877535>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForMailtoLink]):

2014-11-14  Tim Horton  <timothy_horton@apple.com>

        Remove pre-[DDActionContext contextForView:...] fallback path
        https://bugs.webkit.org/show_bug.cgi?id=138735
        <rdar://problem/18982046>

        Reviewed by Simon Fraser.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        (-[WKActionMenuController didCloseMenu:withEvent:]):
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        (hasDataDetectorsCompletionAPI): Deleted.
        Remove the now-unnecessary fallback path.

2014-11-14  Tim Horton  <timothy_horton@apple.com>

        Frequent crashes under actionContextForResultAtPoint
        https://bugs.webkit.org/show_bug.cgi?id=138761
        <rdar://problem/18990684>

        Reviewed by Dean Jackson.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (PageOverlayClientImpl::actionContextForResultAtPoint):
        Initialize apiRange.

2014-11-14  Daniel Bates  <dabates@apple.com>

        [iOS] CoreGraphics SPI not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138709

        Reviewed by David Kilzer.

        Include header CoreGraphicsSPI.h instead of including headers of
        CoreGraphics directly.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/ios/WKScrollView.mm:

2014-11-14  Tim Horton  <timothy_horton@apple.com>

        Move DataDetectors scanning code to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=138731
        <rdar://problem/18877535>

        Reviewed by Anders Carlsson.

        Move DataDetectors scanning code to WebCore, so that both WebKits can use it.

        * Shared/TextIndicator.cpp:
        (WebKit::TextIndicator::createWithRange):
        Move createWithRange in from WebPageMac's textIndicatorForRange.

        (WebKit::TextIndicator::createWithSelectionInFrame):
        * Shared/TextIndicator.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSelectionSnapshot):
        * WebProcess/WebPage/WebFrame.h:
        Constify some things.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Avoid using the DD result if it didn't come with a non-null Range.
        Make use of detectItemAroundHitTestResult and TextIndicator::createWithRange.

        (WebKit::scanForDataDetectedItems): Deleted.
        (WebKit::textIndicatorForRange): Deleted.
        Moved these two to other places.

2014-11-14  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/18978497> Wrong (off-by-1) navigation snapshots shown after a mix of gesture and button back/forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=138753

        Reviewed by Tim Horton.

        Rather than having the UI process record a snapshot jut before the Web Content process’s
        notion of its current back/forward list item changes, have the UI process record a snapshot
        right before its own current back/forward list item changes. This ensures that the right
        snapshot gets attached to the right item in the UI process.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem): If there is a current item, record a navigation
        snapshot of it before making the new item current.
        (WebKit::WebBackForwardList::goToItem): If there is a current item, record a navigation
        snapshot of it before making another item current.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willChangeCurrentHistoryItemForMainFrame): Deleted.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPageProxy.messages.in: Removed willChangeCurrentHistoryItemForMainFrame
        message.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::willChangeCurrentHistoryItem): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: Removed declaration of
        willChangeCurrentHistoryItem override.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willChangeCurrentHistoryItemForMainFrame): Deleted.
        * WebProcess/WebPage/WebPage.h:

2014-11-14  Dan Bernstein  <mitz@apple.com>

        Add some tracing to help investigating <rdar://problem/18905383> [iOS] Crash due to null m_webPageProxyForBackForwardListForCurrentSwipe in ViewGestureController::endSwipeGesture
        https://bugs.webkit.org/show_bug.cgi?id=138750

        Reviewed by Tim Horton.

        Emit trace messages at various points, and log them prior to crashing if the error condition
        occurs. Otherwise, clear the trace messages.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::addLogEntry): Helper function that adds a message, including a time stamp and a
        backtrace, to m_logEntries.
        (WebKit::dumpLogEntries): Helper function that logs everything in m_logEntries.
        (WebKit::ViewGestureController::beginSwipeGesture): Add a log entry.
        (WebKit::ViewGestureController::endSwipeGesture): If
        m_webPageProxyForBackForwardListForCurrentSwipe is null, dump the log entries just before
        crashing. Otherwise, clear m_logEntries.
        (WebKit::ViewGestureController::willCommitPostSwipeTransitionLayerTree): Add a log entry.
        (WebKit::ViewGestureController::removeSwipeSnapshot): Add a log entry.
        * UIProcess/mac/ViewGestureController.h: Defined ENABLE_VIEW_GESTURE_CONTROLLER_TRACING,
        and added m_logEntries member variable.

2014-11-14  Beth Dakin  <bdakin@apple.com>

        URLs for some videos are not valid URLs, should not be exposed to action menu
        https://bugs.webkit.org/show_bug.cgi?id=138746
        -and corresponding-
        rdar://problem/18941927

        Reviewed by Tim Horton.

        If the video cannot be downloaded, that is also an indication that the URL of the 
        video will not be valid on its own. In these cases, we should share or copy the 
        main page’s URL.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForVideo]):
        (-[WKActionMenuController _copyVideoURL:]):

2014-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Encode/Decode allowCookies in ResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=138730

        Reviewed by Sergio Villar Senin.

        We are not sending this information to the network process, making
        cookies always available. Fixes
        http/tests/xmlhttprequest/cross-origin-no-authorization.html when
        network process is enabled.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):

2014-11-14  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for the GTK+ port using Clang.

        * UIProcess/gtk/RedirectedXCompositeWindow.h: Include the <functional>
        header for the use of std::function<>.

2014-11-13  Dan Bernstein  <mitz@apple.com>

        Two WKWebView internal methods are implemented in a category
        https://bugs.webkit.org/show_bug.cgi?id=138728

        Reviewed by Tim Horton.

        Moved the implementations from the category to the class.

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

2014-11-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Move FontMac and FontCacheMac off of WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138633

        Reviewed by Simon Fraser.

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

2014-11-13  Eric Carlson  <eric.carlson@apple.com>

        Context menus should not offer the "Download video" option for videos that cannot 
        be downloaded
        https://bugs.webkit.org/show_bug.cgi?id=138530
        -and corresponding-
        rdar://problem/18919130

        Reviewed by Tim Horton.

        Expose isDownloadableMedia() to the InjectedBundleHitTestResult.
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultIsDownloadableMedia):
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::isDownloadableMedia):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:

2014-11-13  Daniel Bates  <dabates@apple.com>

        [iOS] NSGeometry data types are not available in the public SDK
        https://bugs.webkit.org/show_bug.cgi?id=137536

        Reviewed by David Kilzer.

        Substitute header WAKAppKitStubs.h for NSGeometry.h as the latter is a
        private header.

        * Shared/ios/NativeWebTouchEventIOS.mm:

2014-11-13  Simon Fraser  <simon.fraser@apple.com>

        [WK2] Fire a layout milestone on session restore based on render tree size
        https://bugs.webkit.org/show_bug.cgi?id=138711
        rdar://problem/16033854

        Reviewed by Anders Carlsson.
        
        Add a session-restore layout milestone which fires after restoring a session,
        when the render tree size reaches 50% of the size saved in the session state.

        * Shared/SessionState.h: Add renderTreeSize.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (layoutMilestones): Translate from SPI to WebCore milestones.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: New iOS-only milestone, er, event.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::renderingProgressEvents): Translate from WebCore milestone to rendering event.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Init stuff.
        (WebKit::WebPageProxy::sessionState):
        (WebKit::WebPageProxy::restoreFromSessionState): Zero out the target render tree size,
        then get it out of session state and set the flag to say that we haven't reached it yet.
        (WebKit::WebPageProxy::listenForLayoutMilestones): Set a flag to know that we should fire
        the milestone. The other milestones get sent directly to WebCore.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::exceedsRenderTreeSizeSizeThreshold): Return true when we've reached 50%.
        (WebKit::WebPageProxy::didCommitLayerTree): Fire the milestone when appropriate.
        * UIProcess/mac/LegacySessionStateCoding.cpp: Rev the session state data for iOS
        (where doing so is less disruptive). Standardize some CFString constants.
        (WebKit::encodeSessionHistory): Wrap for legibility.
        (WebKit::encodeLegacySessionState): Make a CFNumber for render tree size, and store
        it in the root dictionary.
        (WebKit::decodeBackForwardTreeNode): Move a comment to match another similar block.
        (WebKit::decodeLegacySessionState): Decode render tree size and store it.

2014-11-13  Tim Horton  <timothy_horton@apple.com>

        Adjust the WKBundlePageOverlay Data Detectors SPI
        https://bugs.webkit.org/show_bug.cgi?id=138685
        <rdar://problem/18947156>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        Forward DDActionContext callbacks to the Web process.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        * WebProcess/WebPage/WebPageOverlay.cpp:
        * WebProcess/WebPage/WebPageOverlay.h:
        Add four DataDetectors-related WebKit2-only page overlay callbacks:

        (WebKit::WebPageOverlay::actionContextForResultAtPoint):
        Called during the action menu hit test; clients can reply with a DDActionContext
        and a DOM range, and WebKit will treat that result and range as if it had
        detected it itself, building the action menu and showing the yellow highlight as usual.

        (WebKit::WebPageOverlay::dataDetectorsPresentedUI):
        (WebKit::WebPageOverlay::dataDetectorsChangedUI):
        (WebKit::WebPageOverlay::dataDetectorsHidUI):
        These correspond to the DDActionContext callbacks, and can be used by clients
        to show/hide corresponding UI while DataDetectors in the UI process is presenting UI.

        (WebKit::WebPageOverlay::prepareForActionMenu): Deleted.
        Get rid of prepareForActionMenu, as nobody ever used it.

        * WebProcess/WebPage/WebPage.cpp:
        Add WebPageOverlay.h so that we can build, because the destructor lives here.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Give all of the WebPageOverlays the first shot at data detection; if none of them
        reply with a valid DDActionContext/DOM range, we'll go ahead and do our normal detection.

        (WebKit::WebPage::dataDetectorsPresentedUI):
        (WebKit::WebPage::dataDetectorsChangedUI):
        (WebKit::WebPage::dataDetectorsHidUI):
        Forward these along to the active WebPageOverlay.

2014-11-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Missing ResourceRequest members encoded/decoded
        https://bugs.webkit.org/show_bug.cgi?id=138694

        Reviewed by Sergio Villar Senin.

        At least timeoutInterval and priority should also be
        encoded/decoded. This fixes all http/tests/xmlhttprequest/timeout/
        tests when using the network process, since the timeout is always
        0 for all requests that we send to the network process.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):

2014-11-12  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Fix the build with EFL 1.12
        https://bugs.webkit.org/show_bug.cgi?id=138245

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/EwkView.cpp:
        First, modified to use Evas_GL raw pointer instead of UniquePtrEfl because
        Evas_GL.h can't be included in UniquePtrEfl.h
        It should be moved into EvasGLContext because WebKit/EFL use only one Evas_GL.
        Second, provided the version of GLES in Evas_GL_Config not to break build with
        EFL 1.12
        (EwkView::EwkView):
        (EwkView::~EwkView):
        (EwkView::displayTimerFired):
        (EwkView::createGLSurface):
        * UIProcess/API/efl/EwkView.h:

2014-11-12  Ada Chan  <adachan@apple.com>

        Fix the iOS build.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pageMutedStateDidChange):

2014-11-05  Ada Chan  <adachan@apple.com>

        Implement new plug-in API for muting plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=138105

        Reviewed by Anders Carlsson.

        Handle the setting of NPNVmuteAudioBool on the plug-in.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::PluginControllerProxy):
        Initialize m_isMuted.
        (WebKit::PluginControllerProxy::mutedStateChanged):
        Tell the plugin about the new muted state.
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        Add the MutedStateChanged message.
        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::PluginCreationParameters):
        Initialize isMuted.
        (WebKit::PluginCreationParameters::encode):
        Handle isMuted.
        (WebKit::PluginCreationParameters::decode):
        Ditto.
        * PluginProcess/PluginCreationParameters.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Get the plug-in's muted state.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::isMuted):
        Get the muted state from PluginControllerProxy.
        (WebKit::NetscapePlugin::mutedStateChanged):
        Call NPP_SetValue with NPNVmuteAudioBool and the updated muted state.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::mutedStateChanged):
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        Set m_pendingPluginCreationParameters->isMuted.
        (WebKit::PluginProxy::mutedStateChanged):
        Send the MutedStateChanged message to the plugin process.
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pageMutedStateDidChange):
        Call Plugin::mutedStateChanged() with the page's muted state.
        (WebKit::PluginView::isMuted):
        Get the page's current muted state.
        * WebProcess/Plugins/PluginView.h:

2014-11-12  Tim Horton  <timothy_horton@apple.com>

        Two action menu item titles are swapped
        https://bugs.webkit.org/show_bug.cgi?id=138667
        <rdar://problem/18960409>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        Swap them back.

2014-11-12  Commit Queue  <commit-queue@webkit.org>

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

        Capturing CString is not thread safe (Requested by anttik on
        #webkit).

        Reverted changeset:

        "[WK2] Use C++ lambdas in IPC::Connection"
        https://bugs.webkit.org/show_bug.cgi?id=138018
        http://trac.webkit.org/changeset/175806

2014-11-12  Tim Horton  <timothy_horton@apple.com>

        Need to show the text indicator when Data Detectors shows a popover
        https://bugs.webkit.org/show_bug.cgi?id=138664
        <rdar://problem/18869900>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (hasDataDetectorsCompletionAPI):
        Determine if we have the new API.

        (-[WKActionMenuController willDestroyView:]):
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        Make use of the new API.
        If we wanted to show a Data Detectors menu but have no items (or they're all
        disabled), cancel the menu.
        If we don't have it, manually manipulate the highlight.

        (-[WKActionMenuController didCloseMenu:withEvent:]):
        Make use of the new API.
        If we don't have it, manually manipulate the highlight.

        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        Set up completion handlers if we have the new API; when DataDetectors
        presents UI, show the text indicator, when it dismisses, hide it.
        If we don't have the API, manually manipulate the highlight.

2014-11-12  Tim Horton  <timothy_horton@apple.com>

        Make action menus much more reliable
        https://bugs.webkit.org/show_bug.cgi?id=138654
        <rdar://problem/18909111>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        Remove MenuUpdateStage; nothing actually uses this value, we just pass it around.

        (-[WKActionMenuController didPerformActionMenuHitTest:userData:]):
        Update the menu as soon as we have a reply from the Web process.

        (-[WKActionMenuController menuNeedsUpdate:]):
        If our sync-wait for the Web process' reply times out, we should still update
        the menu to remove the placeholder separator item.

        (-[WKActionMenuController _updateActionMenuItems]):
        (-[WKActionMenuController _updateActionMenuItemsForStage:]): Deleted.
        If we have our final answer for this menu (_state == Ready), and the final answer
        has no items in the menu, cancel tracking on the menu.

2014-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move RedirectedXCompositeWindow from platform to WebKit2 layer
        https://bugs.webkit.org/show_bug.cgi?id=138093

        Reviewed by Martin Robinson.

        It's only used by WebKitWebViewBase. While moving the code the
        following cleanups have been made:

          - Use NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL.
          - Use a helper class XDamageNotifier to handle the XDamage
            events filtering and notification.
          - Use std::function instead of pointer to function for the
            damage callback.
          - Pass the X display to the RedirectedXCompositeWindow constructor
            and keep it as a member to use it everywhere, instead of using
            the default display in some places and the widget display in others.
          - Pass the damage notify function as a contructor parameter of
            RedirectedXCompositeWindow instead of setting the callback
            right after creating the object.
          - Remove GLContextNeeded and all the dead code related to the
            CreateGLContext mode that is no longer used.
          - Rename cairoSurfaceForWidget() as surface().
          - windowId() has been renamed as windowID() and made const.
          - Use std::unique_ptr instead of PassOwnPtr.
          - Fix coding style issues.

        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseConstructed):
        (webkitWebViewRenderAcceleratedCompositingResults):
        (webkitWebViewBaseCreateWebPage):
        (redirectedWindowDamagedCallback): Deleted.
        * UIProcess/gtk/RedirectedXCompositeWindow.cpp: Renamed from Source/WebCore/platform/gtk/RedirectedXCompositeWindow.cpp.
        (WebKit::XDamageNotifier::XDamageNotifier):
        (WebKit::XDamageNotifier::add):
        (WebKit::XDamageNotifier::remove):
        (WebKit::XDamageNotifier::filterXDamageEvent):
        (WebKit::XDamageNotifier::filterXEvent):
        (WebKit::xDamageNotifier):
        (WebKit::supportsXDamageAndXComposite):
        (WebKit::RedirectedXCompositeWindow::create):
        (WebKit::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        (WebKit::RedirectedXCompositeWindow::~RedirectedXCompositeWindow):
        (WebKit::RedirectedXCompositeWindow::resize):
        (WebKit::RedirectedXCompositeWindow::cleanupPixmapAndPixmapSurface):
        (WebKit::RedirectedXCompositeWindow::surface):
        * UIProcess/gtk/RedirectedXCompositeWindow.h: Renamed from Source/WebCore/platform/gtk/RedirectedXCompositeWindow.h.
        (WebKit::RedirectedXCompositeWindow::windowID):

2014-09-01  Philippe Normand  <pnormand@igalia.com>

        [WK2] UserMediaClient support
        https://bugs.webkit.org/show_bug.cgi?id=123158

        Reviewed by Benjamin Poulain.

        Support for UserMediaPermissionRequest in WebKit2. It's
        implemented similarily to the GeolocationPermissionRequest
        support. When the WebPage requires this permission it sends a
        message to the UI process which at some point grants or denies the
        permission and sends the result back to the WebProcess.

        * CMakeLists.txt: Generic CMake support for new files.
        * Shared/API/c/WKBase.h: New type for UserMediaPermissionRequest.
        * Shared/APIObject.h: Ditto.
        * UIProcess/API/C/WKAPICast.h: PermissionRequest API mapping.
        * UIProcess/API/APIUIClient.h: New decidePolicy handler for UserMediaPermissionRequest.
        (API::UIClient::decidePolicyForUserMediaPermissionRequest):
        * UIProcess/API/C/WKPage.cpp: Ditto.
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h: WKPageUIClient version bump to
        5, including the new decidePolicyForUserMediaPermissionRequest member.
        * UIProcess/API/C/WKUserMediaPermissionRequest.cpp: Added, C API
        implementation of the UserMediaPermissionRequest.
        (WKUserMediaPermissionRequestGetTypeID):
        (WKUserMediaPermissionRequestAllow):
        (WKUserMediaPermissionRequestDeny):
        * UIProcess/API/C/WKUserMediaPermissionRequest.h: Added.
        * UIProcess/API/C/WebKit2_C.h:
        * UIProcess/UserMediaPermissionRequestManagerProxy.h: Added.
        * UIProcess/UserMediaPermissionRequestProxy.cpp: Added, proxy
        object for the UserMediaPermissionRequestType.
        (WebKit::UserMediaPermissionRequestProxy::UserMediaPermissionRequestProxy):
        (WebKit::UserMediaPermissionRequestProxy::allow):
        (WebKit::UserMediaPermissionRequestProxy::deny):
        (WebKit::UserMediaPermissionRequestProxy::invalidate):
        * UIProcess/UserMediaPermissionRequestProxy.h: Added.
        (WebKit::UserMediaPermissionRequestProxy::create):
        (WebKit::UserMediaPermissionRequestProxy::mediaParameters):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): Defer
        UserPermissionRequest to the UIClient.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: New message to handle UserMediaPermissionRequests.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp: Added,
        WebProcess side of the UserRequestManager, keeping track of each
        permission request.
        (WebKit::generateRequestID):
        (WebKit::UserMediaPermissionRequestManager::UserMediaPermissionRequestManager):
        (WebKit::UserMediaPermissionRequestManager::startRequest):
        (WebKit::UserMediaPermissionRequestManager::cancelRequest):
        (WebKit::UserMediaPermissionRequestManager::didReceiveUserMediaPermissionDecision):
        * WebProcess/MediaStream/UserMediaPermissionRequestManager.h: Added.
        * WebProcess/WebCoreSupport/WebUserMediaClient.cpp: Added,
        WebProcess implementation of the WebCore::UserMediaClient.
        (WebKit::WebUserMediaClient::WebUserMediaClient):
        (WebKit::WebUserMediaClient::pageDestroyed):
        (WebKit::WebUserMediaClient::requestPermission):
        (WebKit::WebUserMediaClient::cancelRequest):
        * WebProcess/WebCoreSupport/WebUserMediaClient.h: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Create the
        UserMediaPermissionRequestManager and register the UserMediaClient
        to the page.
        (WebKit::WebPage::didReceiveUserMediaPermissionDecision): Dispatch
        decision to manager.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userMediaPermissionRequestManager):
        * WebProcess/WebPage/WebPage.messages.in: New Message to handle
        permission decision result from the UI process.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Add support for mailto: link action menus
        https://bugs.webkit.org/show_bug.cgi?id=138641
        <rdar://problem/18741567>

        Reviewed by Beth Dakin.

        * Shared/API/c/WKActionMenuTypes.h:
        Add a new type for mailto links.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForMailtoLink]):
        Build a DDActionContext and grab menu items for our mailto link.

        (-[WKActionMenuController _defaultMenuItems]):
        Get menu items from _defaultMenuItemsForMailtoLink if needed.

2014-11-11  Conrad Shultz  <conrad_shultz@apple.com>

        Clients should be notified when a page preview finishes
        https://bugs.webkit.org/show_bug.cgi?id=138635

        Reviewed by Tim Horton.

        Add SPI to WKView to allow clients to do any cleanup that might be necessary when the preview closes.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Declare new SPI.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _finishPreviewingURL:withPreviewView:]):
        Stub SPI implementation.

        * UIProcess/mac/WKActionMenuController.h:
        Add an ivar for the preview view controller.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _createPreviewPopoverForURL:originRect:]):
        Update to use the ivar.
        (-[WKActionMenuController _clearPreviewPopover]):
        Send -_finishPreviewingURL:withPreviewView: and nil out the view controller ivar.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Update artwork for some action menu items
        https://bugs.webkit.org/show_bug.cgi?id=138634
        <rdar://problem/18871984>

        Reviewed by Anders Carlsson.

        * Resources/OpenInNewWindowTemplate.pdf: Removed.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        (webKitBundleImageNamed): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:
        Get rid of our custom art, and use system art for two more items.

2014-11-11  Alexey Proskuryakov  <ap@apple.com>

        DRT and WKTR touch disk cache
        https://bugs.webkit.org/show_bug.cgi?id=138622

        Reviewed by Geoffrey Garen.

        Setting a cache model has a very strange behavior in WebKit2, where it ignores
        sizes that were explicitly passed from UI process, and uses different ones. As
        setCacheModel() is always called on launch, it always creates a non-empty disk cache.

        The design needs to be improved one day, but for now, just make sure that we never
        create a disk cache during testing.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        (WebKit::NetworkProcess::platformSetCacheModel):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-11-11  Eric Carlson  <eric.carlson@apple.com>

        [iOS] a page with video in optimized fullscreen is visible
        https://bugs.webkit.org/show_bug.cgi?id=138632

        Reviewed by Anders Carlsson.

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

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewVisible): Return true if displaying optimized fullscreen
            video.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Occasional assertion failure under recommendedScrollbarStyleDidChange()
        https://bugs.webkit.org/show_bug.cgi?id=138604
        <rdar://problem/18855914>

        Reviewed by Beth Dakin.

        It is possible for AppKit to install tracking areas into our view
        behind our back, but we have code that depends on knowing exactly
        the set of tracking areas installed on WKView.

        Make this more robust by keeping a reference to the tracking area we
        use for many things and manipulating that instead of making assumptions
        about the total set of tracking areas on WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _primaryTrackingArea]):
        (-[WKView _replacePrimaryTrackingArea:]):
        Provide a 'primary' tracking area setter/getter.

        (-[WKView initWithFrame:context:configuration:webView:]):
        Keep a reference to the original tracking area installed at initialization time.

        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::recommendedScrollbarStyleDidChange):
        Instead of walking the set of tracking areas, make use of the fact that
        we know exactly which tracking area we installed, and uninstall just that
        one, and replace it with our newly-built one.

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

        Finish moving CTFontGetVerticalGlyphsForCharacters and CTLineCreateWithUniCharProvider out from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138623

        Reviewed by Geoff Garen.

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

2014-11-11  Timothy Horton  <timothy_horton@apple.com>

        Add a respondsToSelector check to dismissActionMenuPopovers
        ​https://bugs.webkit.org/show_bug.cgi?id=138600
        <rdar://problem/18932770>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController dismissActionMenuPopovers]):
        Avoid calling this wherever it doesn't exist.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        DataDetectors' menu items aren't presented in the telephone number menu
        https://bugs.webkit.org/show_bug.cgi?id=138602
        <rdar://problem/18866308>

        Reviewed by Beth Dakin.

        We currently round-trip the DataDetectors telephone number NSMenuItems
        through the very-lossy WebContextMenuItemData, for no real reason.
        We should avoid this so that DataDetectors' actual NSMenuItems are
        presented in the final menu, so that they can adjust their items after
        providing them to us.

        * Platform/mac/MenuUtilities.h:
        * Platform/mac/MenuUtilities.mm:
        (WebKit::menuItemTitleForTelephoneNumber): Deleted.
        Stop adjusting the menu item titles, as they come correct now.

        (WebKit::menuItemsForTelephoneNumber): Deleted.
        (WebKit::menuForTelephoneNumber):
        Return a fully-formed menu for the single telephone number case.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu):
        Present the fully-formed menu, without round-tripping through
        WebContextMenuItemData, because we do not need to hand the items to
        the context menu client (and indeed, were not), and because this
        allows us to use the exact items returned by DataDetectors, so they
        can keep ahold of the items that we actually present.

        * UIProcess/PageClient.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::showPlatformContextMenu):
        Add a Mac-only PageClient function for presenting a NSMenu at a
        WKView-relative point.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Adopt DDActionContext menu type SPI
        https://bugs.webkit.org/show_bug.cgi?id=138603
        <rdar://problem/18867627>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        Use the new SPI instead of WKSI.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Data Detectors popovers should be dismissed upon scrolling
        https://bugs.webkit.org/show_bug.cgi?id=138600
        <rdar://problem/18932770>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        Dismiss popovers when we start preparing another menu.

        (-[WKActionMenuController dismissActionMenuPopovers]):
        Use the new DataDetectors SPI.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Localize strings for action menus
        https://bugs.webkit.org/show_bug.cgi?id=138591
        <rdar://problem/18815343>

        Reviewed by Dan Bates.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _showTextIndicator]):
        (-[WKActionMenuController _hideTextIndicator]):
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        Make use of the new strings.

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

        Cleanup from r175379
        https://bugs.webkit.org/show_bug.cgi?id=138616

        Reviewed by Simon Fraser.

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

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

        Move CTFontTransformGlyphs out from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138599

        Reviewed by Simon Fraser.

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

2014-11-10  Simon Fraser  <simon.fraser@apple.com>

        Fix possible crash when closing the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=138597
        rdar://problem/18872688

        Reviewed by Andreas Kling.
        
        I reported a crash when reloading a page after inspecting it, possibly caused by
        r172864. Speculatively fix by null-checking the main frame.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::~WebInspectorClient):

2014-11-10  Beth Dakin  <bdakin@apple.com>

        Whitespace action menus aren't working properly
        https://bugs.webkit.org/show_bug.cgi?id=138585
        -and corresponding-
        rdar://problem/18933586

        Reviewed by Tim Horton.

        Treat the whitespace menu as a text menu.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController isMenuForTextContent]):

2014-11-10  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Scroll deceleration rate is wrong
        https://bugs.webkit.org/show_bug.cgi?id=138574
        rdar://problem/18715303

        Reviewed by Benjamin Poulain.
        
        The CSS Snap Points code incorrectly set the WKScrollView's deceleration rate,
        overriding the custom value that UIWebScrollView sets.
        
        Fix by having WKScrollView store the custom rate at init time, and
        using that value in -scrollViewWillBeginDragging:.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillBeginDragging:]):
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView initWithFrame:]):

2014-11-09  Ada Chan  <adachan@apple.com>

        Reset WebPageProxy's isPlayingAudio state after web process crash or page invalidation.
        https://bugs.webkit.org/show_bug.cgi?id=138559

        Reviewed by Andreas Kling.

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

2014-11-10  Beth Dakin  <bdakin@apple.com>

        WK1: Support default actions for read-only text
        https://bugs.webkit.org/show_bug.cgi?id=138552
        -and corresponding-
        rdar://problem/18877483

        Reviewed by Tim Horton.

        WK1 now needs to do a lot of dictionary lookup operations that it did not 
        previously have to handle. So this patch takes a lot of that functionality, which 
        was implemented as static functions in WebPageMac for WK2 and moves it into 
        WebCore.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForRange):
        (WebKit::isPositionInRange): Deleted.
        (WebKit::shouldUseSelection): Deleted.
        (WebKit::rangeExpandedAroundPositionByCharacters): Deleted.
        (WebKit::rangeForDictionaryLookupForSelection): Deleted.
        (WebKit::rangeForDictionaryLookupAtHitTestResult): Deleted.

2014-11-10  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):

2014-11-10  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Use C++ lambdas in IPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=138018

        Reviewed by Anders Carlsson.

        Replace uses of WTF::bind() in the IPC::Connection class with C++11 lambdas.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (IPC::Connection::invalidate):
        (IPC::Connection::sendMessage):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::enqueueIncomingMessage):
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::initializeDeadNameSource):
        (IPC::Connection::receiveSourceEventHandler):
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::open):

2014-11-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove create() factory function in FooAnimationValue classes
        https://bugs.webkit.org/show_bug.cgi?id=138206

        Reviewed by Darin Adler.

        As a step to use std::unique_ptr and std::make_unique, this patch removes create()
        factory function in FooAnimationValue classes. As this changes, FooAnimationValue::create()
        are changed to std::make_unique<>.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<GraphicsLayerAnimation>::decode):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::showPaintRect):

2014-11-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix typo in r175796.

        Rename areEssentialEqualAsFloat to areEssentiallyEqualAsFloat.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::areEssentiallyEqualAsFloat):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::areEssentialEqualAsFloat): Deleted.

2014-11-09  Chris Dumez  <cdumez@apple.com>

        Add a more correct way to compare floating point numbers and use it
        https://bugs.webkit.org/show_bug.cgi?id=138527

        Reviewed by Darin Adler.

        Use the new WTF::areEssentuallyEqual() utility function from MathExtras.h
        to compare floating-point numbers.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (withinEpsilon):
        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        (WebKit::fuzzyCompare): Deleted.
        * UIProcess/CoordinatedGraphics/PageViewportController.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::withinEpsilon):

        * UIProcess/API/Cocoa/WKWebView.mm:
        (areEssentiallyEqualAsFloat):
        (-[WKWebView _didCommitLayerTree:]):
        (withinEpsilon): Deleted.
        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        (WebKit::fuzzyCompare): Deleted.
        * UIProcess/CoordinatedGraphics/PageViewportController.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::areEssentialEqualAsFloat):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::withinEpsilon): Deleted.

2014-11-08  Simon Fraser  <simon.fraser@apple.com>

        Implement round-rect clipping on video elements
        https://bugs.webkit.org/show_bug.cgi?id=138537
        rdar://problem/9534399

        Reviewed by Darin Adler.

        Support border-radius on video and other layers with composited contents,
        by pushing a FloatRoundedRect onto the GraphicsLayer as the contentsClippingRect,
        and, on Mac, using layer corner-radius or a CAShapeLayer mask.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FloatRoundedRect>::encode):
        (IPC::ArgumentCoder<FloatRoundedRect>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/RemoteLayerBackingStore.mm: New shape layer type.
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer): Apply corner-radius and shape path.
        * Shared/mac/RemoteLayerTreeTransaction.h: Prettify the flags. Yes, I prefer this style.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTextStream::operator<<):
        (WebKit::dumpChangedLayers):
        (WebKit::RemoteLayerTreeTransaction::description):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (+[WKShapeView layerClass]): Make UIViews with a CAShapeLayer layer class.
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::updateClonedLayerProperties):
        (WebKit::isEquivalentLayer):
        (WebKit::PlatformCALayerRemote::setMask):
        (WebKit::PlatformCALayerRemote::setClonedLayer):
        (WebKit::PlatformCALayerRemote::cornerRadius):
        (WebKit::PlatformCALayerRemote::setCornerRadius):
        (WebKit::PlatformCALayerRemote::shapeRoundedRect):
        (WebKit::PlatformCALayerRemote::setShapeRoundedRect):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2014-11-09  Conrad Shultz  <conrad_shultz@apple.com>

        Move _ignoresNonWheelMouseEvents implementation to WKView(Private)
        https://bugs.webkit.org/show_bug.cgi?id=138487

        Reviewed by Dan Bernstein.

        Relocate some methods that should have been in a category implementation.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setIgnoresNonWheelMouseEvents:]):
        (-[WKView _ignoresNonWheelMouseEvents]):

2014-11-08  Beth Dakin  <bdakin@apple.com>

        WKActionMenuController methods should be more careful to use the best 
        WebHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=138536
        -and corresponding-
        rdar://problem/18919195

        Reviewed by Tim Horton.

        This patch re-names _hitTestResultForStage to _webHitTestResult. The method no 
        longer takes a stage since that value is really not necessary to determine the 
        correct WebHitTestResult. This patch also makes all spots in this file that access 
        a WebHitTestResult go through _webHitTestResult to ensure that they get the most 
        up-to-date option.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        (-[WKActionMenuController _openURLFromActionMenu:]):
        (-[WKActionMenuController _addToReadingListFromActionMenu:]):
        (-[WKActionMenuController _previewURLFromActionMenu:]):
        (-[WKActionMenuController _defaultMenuItemsForVideo]):
        (-[WKActionMenuController _copyVideoURL:]):
        (-[WKActionMenuController _saveVideoToDownloads:]):
        (-[WKActionMenuController _saveImageToDownloads:]):
        (-[WKActionMenuController _defaultMenuItems]):
        (-[WKActionMenuController _updateActionMenuItemsForStage:]):
        (imageForResource:name::switch): Deleted.
        (-[WKActionMenuController _defaultMenuItems:]): Deleted.

2014-11-08  Beth Dakin  <bdakin@apple.com>

        Implement action menu support for videos
        https://bugs.webkit.org/show_bug.cgi?id=138534
        -and corresponding-
        rdar://problem/18742164

        Reviewed by Tim Horton.

        New menu type and items types.
        * Shared/API/c/WKActionMenuItemTypes.h:
        * Shared/API/c/WKActionMenuTypes.h:

        Plumb isMediaThatCanBeDownloaded() up to WebHitTestResult.
        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::Data):
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h:
        (WebKit::WebHitTestResult::isMediaThatCanBeDownloaded):

        Re-name _canAddImageToPhotos to _canAddMediaToPhotos, which is more accurate. We 
        might use this method for videos some day, so now it has an accurate name.
        * UIProcess/mac/WKActionMenuController.mm:

        Default items and their actions.
        (-[WKActionMenuController _defaultMenuItemsForVideo]):
        (-[WKActionMenuController _copyVideoURL:]):
        (-[WKActionMenuController _saveVideoToDownloads:]):
        (-[WKActionMenuController _defaultMenuItemsForImage]):
        (-[WKActionMenuController _canAddMediaToPhotos]):
        (-[WKActionMenuController _addImageToPhotos:]):
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        (-[WKActionMenuController _defaultMenuItems:]):
        (-[WKActionMenuController _canAddImageToPhotos]): Deleted.

        We hit test including shadow content to get the desired result for editable text 
        regions. But for media, we want to re-set to the shadow root.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):

2014-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Allow to create a view with a related page in WTR
        https://bugs.webkit.org/show_bug.cgi?id=138501

        Reviewed by Martin Robinson.

        This is needed when running tests in multi web process mode.

        * UIProcess/API/C/gtk/WKView.cpp:
        (WKViewCreate):
        * UIProcess/API/C/gtk/WKView.h:

2014-11-07  Conrad Shultz  <conrad_shultz@apple.com>

        "Lookup" action menu should read "Look up"
        https://bugs.webkit.org/show_bug.cgi?id=138509

        Reviewed by Tim Horton.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _createActionMenuItemForTag:]):

2014-11-07  Beth Dakin  <bdakin@apple.com>

        Null deref performing Lookup on Apple Trailers full screen button
        https://bugs.webkit.org/show_bug.cgi?id=138513
        -and corresponding-
        rdar://problem/18909699

        Reviewed by Tim Horton.

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

2014-11-07  Anshu Chimala  <anshu@apple.com>

        Make it possible to associate snapshots with back/forward list items other than the current item.
        https://bugs.webkit.org/show_bug.cgi?id=138490

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Declare -saveBackForwardSnapshotForItem:, an alternative to -saveBackForwardSnapshotForCurrentItem that accepts a
        back/forward list item as an argument.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView saveBackForwardSnapshotForItem:]):
        Pass the provided back/forward list item along to WebPageProxy::recordNavigationSnapshot().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::recordNavigationSnapshot):
        Overloaded to optionally take a back/forward list item as an argument. If one isn't provided, default to the current item
        as before; otherwise, associate the snapshot with whichever item was provided.
        * UIProcess/WebPageProxy.h:
        Declare the new recordNavigationSnapshot() overload.

        * UIProcess/mac/ViewSnapshotStore.h:
        Make recordSnapshot() take a back/forward list item as an argument.
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Store the snapshot in the provided back/forward list item instead of in the current item.

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

        Popovers do not dismiss when navigating back and forth using gestures
        https://bugs.webkit.org/show_bug.cgi?id=138512
        <rdar://problem/18900200>

        Reviewed by Beth Dakin.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::navigationGestureDidBegin):
        Dismiss action menu related popovers when navigation gestures begin.

2014-11-07  Beth Dakin  <bdakin@apple.com>

        Action menu preview popover should dismiss on scroll
        https://bugs.webkit.org/show_bug.cgi?id=138511
        -and corresponding-
        rdar://problem/18901445

        Reviewed by Tim Horton.

        This patch re-names dismissActionMenuDataDetectorPopovers() to 
        dismissActionMenuPopovers() and also calls _clearPreviewPopover from that method 
        as well.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _dismissActionMenuPopovers]):
        (-[WKView _dismissActionMenuDataDetectorPopovers]): Deleted.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::pageDidScroll):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::dismissActionMenuPopovers):
        (WebKit::PageClientImpl::dismissActionMenuDataDetectorPopovers): Deleted.
        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController dismissActionMenuPopovers]):
        (-[WKActionMenuController dismissActionMenuDataDetectorPopovers]): Deleted.

2014-11-07  Beth Dakin  <bdakin@apple.com>

        Support action menus for whitespace in editable areas
        https://bugs.webkit.org/show_bug.cgi?id=138488
        -and corresponding-
        rdar://problem/18877717

        Reviewed by Tim Horton.

        Very simple menu for whitespace in editable areas.
        * Shared/API/c/WKActionMenuTypes.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForWhitespaceInEditableArea]):
        (-[WKActionMenuController _defaultMenuItems:]):

2014-11-07  Beth Dakin  <bdakin@apple.com>

        Invoking an action menu should dismiss existing selection
        https://bugs.webkit.org/show_bug.cgi?id=138496
        -and corresponding-
        rdar://problem/18892787

        Reviewed by Tim Horton.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController willOpenMenu:withEvent:]):

2014-11-07  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Update optimized fullscreen media controls
        https://bugs.webkit.org/show_bug.cgi?id=138493

        Reviewed by Brent Fulgham.

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

2014-11-07  Antti Koivisto  <antti@apple.com>

        Add cache coders
        https://bugs.webkit.org/show_bug.cgi?id=138413

        Reviewed by Anders Carlsson.

        Add encoding and decoding support for cache types.

        This is largely a copy of the IPC coder classes with some unnecessary features removed.
        The coders compute a type-sensitive checksum that can be used to verify the data integrity.

        The code is behind ENABLE(NETWORK_CACHE) and not yet used.

        * NetworkProcess/cache: Added.
        * NetworkProcess/cache/NetworkCacheCoder.h: Added.
        * NetworkProcess/cache/NetworkCacheCoders.cpp: Added.
        * NetworkProcess/cache/NetworkCacheCoders.h: Added.
        * NetworkProcess/cache/NetworkCacheDecoder.cpp: Added.
        * NetworkProcess/cache/NetworkCacheDecoder.h: Added.
        * NetworkProcess/cache/NetworkCacheEncoder.cpp: Added.
        * NetworkProcess/cache/NetworkCacheEncoder.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2014-11-06  Conrad Shultz  <conrad_shultz@apple.com>

        Clients should be able to customize the view used for page previews
        https://bugs.webkit.org/show_bug.cgi?id=138447

        Reviewed by Tim Horton.

        Add SPI to WKView that clients can use to customize the view used in the page preview popover.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Declare -_viewForPreviewingURL:initialFrameSize:.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _viewForPreviewingURL:initialFrameSize:]):
        Return nil in the default implementation.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKPagePreviewViewController loadView]):
        Only spin up a WKWebView if the delegate (and, therefore, the presenting WKView) doesn't supply a custom view.
        (-[WKActionMenuController pagePreviewViewController:viewForPreviewingURL:initialFrameSize:]):
        WKPagePreviewViewControllerDelegate method; wrap the WKView SPI.

2014-11-05  Jer Noble  <jer.noble@apple.com>

        De-templatize Timer
        https://bugs.webkit.org/show_bug.cgi?id=138450

        Reviewed by Anders Carlsson.

        Remove template specifiers from Timer.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::bufferingTimerFired):
        * NetworkProcess/NetworkResourceLoader.h:
        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::sampleTimerFired):
        (WebKit::WebMemorySampler::stopTimerFired):
        * Shared/WebMemorySampler.h:
        * Shared/mac/RemoteLayerBackingStoreCollection.h:
        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        (WebKit::RemoteLayerBackingStoreCollection::volatilityTimerFired):
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::displayTimerFired):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/efl/TextCheckerClientEfl.cpp:
        (TextCheckerClientEfl::languagesUpdateTimerFired):
        (TextCheckerClientEfl::spellCheckingSettingChangeTimerFired):
        * UIProcess/efl/TextCheckerClientEfl.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::layerFlushTimerFired):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::layerFlushTimerFired):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::processSuspensionCleanupTimerFired):
        (WebKit::WebProcess::nonVisibleProcessCleanupTimerFired):
        * WebProcess/WebProcess.h:

2014-11-06  Dean Jackson  <dino@apple.com>

        [filters2] Support for backdrop-filter
        https://bugs.webkit.org/show_bug.cgi?id=138384
        <rdar://problem/18874494>

        Reviewed by Simon Fraser.

        Take 2!! Previous patch was rolled out.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext): Handle LayerTypeBackdropLayer in the switch.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::description): Describe a backdrop layer.
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (+[WKBackdropView layerClass]): Define CABackdropLayer and use it as the class.
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeHost.mm: Ditto.
        (WebKit::RemoteLayerTreeHost::createLayer):

2014-11-06  Tim Horton  <timothy_horton@apple.com>

        Data detectors popover points at the first line of the detected item
        https://bugs.webkit.org/show_bug.cgi?id=138471
        <rdar://problem/18893079>

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::scanForDataDetectedItems):
        Determine the bounding box of all quads of the detected item's text.
        This way, the popover will point at the border of the item, instead of
        right at the very first line.

2014-11-06  Beth Dakin  <bdakin@apple.com>

        Preview views often misplaced inside popover
        https://bugs.webkit.org/show_bug.cgi?id=138472

        Reviewed by Tim Horton.

        This patch makes the popover maintain aspect ratio, and it uses the final scale of 
        that popover to scale the preview view as well.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKPagePreviewViewController initWithPageURL:mainViewSize:popoverToViewScale:]):
        (-[WKPagePreviewViewController loadView]):
        (-[WKActionMenuController _createPreviewPopoverForURL:originRect:]):
        (-[WKActionMenuController _targetSize:fitsInAvailableSpace:]):
        (-[WKActionMenuController _preferredSizeForPopoverPresentedFromOriginRect:]):
        (-[WKPagePreviewViewController initWithPageURL:]): Deleted.

2014-11-06  Tim Horton  <timothy_horton@apple.com>

        TextIndicatorWindow's bounce animation is lopsided when indicating two short lines of text
        https://bugs.webkit.org/show_bug.cgi?id=138458

        Reviewed by Simon Fraser.

        Previously, the TextIndicator's frame() covered the entire selection highlight bounds.
        This was undesirable in cases where the highlight included areas far outside the
        bounds of the selected text, as the TextIndicatorWindow's 'bounce' animation
        would be misaligned (centered on the highlight instead of on the text).

        * Shared/TextIndicator.cpp:
        Get rid of the many-argument TextIndicator::create, because it was only used
        internally, and have createWithSelectionInFrame make a ::Data instead.

        (WebKit::TextIndicator::createWithSelectionInFrame):
        Compute and store the bounding rect of all of the selected text rects, and store
        all of the text rects relative to that bounding rect instead of relative to the
        selection highlight bounds. We do this because the selection highlight bounds
        often includes area which is far outside of the text bounds (in the case of a
        selection that spans multiple lines), and causes the text indicator bounce
        animation to bounce in a lopsided manner.

        (WebKit::TextIndicator::TextIndicator):
        Adjust to the rename of textRectsInSelectionRectCoordinates -> textRectsInBoundingRectCoordinates.

        (WebKit::TextIndicator::frameRect):
        Instead of the TextIndicator's frame being the selection highlight bounds,
        it is now the bounds of all of the text rects.

        (WebKit::TextIndicator::draw):
        Translate into the image by the difference between the selection highlight bounds
        and the text bounding rect. This is necessary because the content image is still generated
        covering the entire selection highlight bounds, but the text rects are in text-rect-bounds coordinates.

        (WebKit::TextIndicator::Data::encode):
        (WebKit::TextIndicator::Data::decode):
        Adjust to the rename of textRectsInSelectionRectCoordinates -> textRectsInBoundingRectCoordinates.
        Encode/decode textBoundingRectInWindowCoordinates.

        * Shared/TextIndicator.h:
        (WebKit::TextIndicator::contentImage): Deleted.
        Get rid of an unnecessary getter and constructor.

2014-11-06  Tim Horton  <timothy_horton@apple.com>

        Only provide a single result to the action menu DDActionContext
        https://bugs.webkit.org/show_bug.cgi?id=138469
        <rdar://problem/18869036>

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::scanForDataDetectedItems):
        Only provide one result; secondary results can be extremely unrelated to
        the primary one and confuse Data Detectors further down the line.

2014-11-06  Tim Horton  <timothy_horton@apple.com>

        Null deref in rangeForDictionaryLookupAtHitTestResult on occasion
        https://bugs.webkit.org/show_bug.cgi?id=138459
        <rdar://problem/18872825>

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::rangeForDictionaryLookupAtHitTestResult):
        rangeExpandedAroundPositionByCharacters can return null.

2014-11-06  Tim Horton  <timothy_horton@apple.com>

        Prefer link action menus over images
        https://bugs.webkit.org/show_bug.cgi?id=138461
        <rdar://problem/18768377>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItems:]):
        Swap the priority of links and images.

2014-11-05  Sam Weinig  <sam@webkit.org>

        Use std::unique_ptr for TileController
        https://bugs.webkit.org/show_bug.cgi?id=138429

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::PlatformCALayerRemoteTiledBacking):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2014-11-06  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * WebProcess/Plugins/PluginController.h:

2014-11-06  Daniel Bates  <dabates@apple.com>

        [iOS] WebProcess needs to take a background task assertion to prevent being killed
        for "suspended with locked system files"
        https://bugs.webkit.org/show_bug.cgi?id=138155
        <rdar://problem/17939303>

        Reviewed by Anders Carlsson.

        Mitigates an issue where the WebProcess may be killed when suspended holding locked files
        by allowing the WebProcess to notify the UIProcess when it is holding such files so that
        both can continue to run for a period of time after the UIProcess transitions to the
        background. In particular, the WebProcess notifies the UIProcess that it is holding- or
        relinquished- a locked file when it begins and ends a sequence of SQLite transactions,
        respectively.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::disconnect): Relinquish an existing background task assertion
        when the WebProcess disconnects. Among other situations, the WebProcess may disconnect as
        a result of being suspended holding locked files even when the UIProcess requested a
        background task assertion (i.e. it may have exceeded its background time limit).
        (WebKit::WebProcessProxy::setIsHoldingLockedFiles): Added. Either acquires a new background
        task assertion or relinquishes an existing one.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in: Added message SetIsHoldingLockedFiles(bool). The WebProcess
        dispatches this message to inform the UIProcess that it is holding- or relinquished- a locked file.
        * WebKit2.xcodeproj/project.pbxproj: Added files WebSQLiteDatabaseTracker.{cpp, h}.
        * WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.cpp: Added.
        (WebKit::WebSQLiteDatabaseTracker::supplementName): Added.
        (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker): Added.
        (WebKit::WebSQLiteDatabaseTracker::initialize): Register to receive SQLiteDatabaseTrackerClient callbacks.
        (WebKit::WebSQLiteDatabaseTracker::willBeginFirstTransaction): Inform the HysteresisActivity object on
        the main thread that we began a transaction so that it calls WebSQLiteDatabaseTracker::started().
        (WebKit::WebSQLiteDatabaseTracker::didFinishLastTransaction): Inform the HysteresisActivity object on
        the main thread that we finished a transaction so that it may eventually call WebSQLiteDatabaseTracker::stopped().
        (WebKit::WebSQLiteDatabaseTracker::started): Notify the UIProcess that the WebProcess is holding
        a locked file.
        (WebKit::WebSQLiteDatabaseTracker::stopped): Notify the UIProcess that the WebProcess has
        relinquished the locked file.
        * WebProcess/WebCoreSupport/WebSQLiteDatabaseTracker.h: Added. We use a HysteresisActivity object
        to coalesce SetIsHoldingLockedFiles(false) messages as an optimization to minimize the number of
        messages exchanged between the UIProcess and WebProcess when a web page performs SQLite transactions
        in batches.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Instantiate the supplement WebSQLiteDatabaseTracker when building
        for iOS.

2014-11-06  Alberto Garcia  <berto@igalia.com>

        [GTK] [Stable] webkitgtk 2.6.1 fails to load flashplugin
        https://bugs.webkit.org/show_bug.cgi?id=137849

        Reviewed by Carlos Garcia Campos.

        NPPVpluginNeedsXEmbed is a boolean value, so it should normally
        use an NPBool (1 byte). However some plugins (the Flash player in
        particular) are using an int instead, so we have to do it as well
        else we'll end up corrupting the stack.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPostInitialize):

2014-11-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add context menu API to Web Process Extensions
        https://bugs.webkit.org/show_bug.cgi?id=138311

        Reviewed by Gustavo Noronha Silva.

        Add WebKitWebPage::context-menu signal, similar to the
        WebKitWebView one, but that receives a WebKitWebHitTestResult, a
        class that extends WebKitTestResult to provide the WebKitDOMNode
        from the Web Process Extensions API. This makes WebKitContextMenu,
        WebKitContextMenuItem and WebKitTestResult classes shared between
        UI and Web Extensions APIs. In addition to be able to customize
        the context menu, it also provides API to set user data, as a
        GVariant, in the Web Process that is sent to the UI Process.

        * PlatformGTK.cmake: Add new files.
        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        (webkit_context_menu_set_user_data): Add user data to the context
        menu as a GVariant.
        (webkit_context_menu_get_user_data): Get the user data previously
        set with webkit_context_menu_set_user_data() either from the Web
        or UI processes.
        * UIProcess/API/gtk/WebKitContextMenu.h:
        * UIProcess/API/gtk/WebKitContextMenuActions.h:
        * UIProcess/API/gtk/WebKitContextMenuClient.cpp:
        (getContextMenuFromProposedMenu): Convert the received user data
        into a GVariant and pass it to webkitWebViewPopulateContextMenu().
        * UIProcess/API/gtk/WebKitContextMenuItem.h:
        * UIProcess/API/gtk/WebKitForwardDeclarations.h:
        * UIProcess/API/gtk/WebKitHitTestResult.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewPopulateContextMenu): Set the user data received
        from the Web Process to the WebKitContextMenu before emitting
        WebKitWebView::context-menu.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for WebKitWebHitTestResult.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add webkit_web_hit_test_result_get_type.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResult.cpp: Added.
        (webkitWebHitTestResultGetProperty): Add getter for node property.
        (webkitWebHitTestResultSetProperty): Add setter for node property.
        (webkit_web_hit_test_result_class_init): Add node property.
        (webkitWebHitTestResultCreate): Create a new
        WebKitWebHitTestResult for the given InjectedBundleHitTestResult.
        (webkit_web_hit_test_result_get_node): Return the WebKitDOMNode.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResult.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebHitTestResultPrivate.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (getContextMenuFromDefaultMenu): Build a WebKitContextMenu and
        WebKitWebHitTestResult and emit WebKitWebPage::context-menu signal.
        (webkit_web_page_class_init): Add WebKitWebPage::context-menu signal.
        (webkitWebPageCreate): Add implementation for getContextMenuFromDefaultMenu.
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:

2014-11-06  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Remove m_scrollPosition from CoordinatedGraphicsScene
        https://bugs.webkit.org/show_bug.cgi?id=138419

        Reviewed by Gyuyoung Kim.

        m_scrollPosition of CoordinatedGraphicsScene is only to adjust the position
        of fixed element. But this adjustment is only called by paintToCurrentGLContext()
        and WebView can pass same information to the parameter of that method.

        * UIProcess/CoordinatedGraphics/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):
        (WebCore::CoordinatedGraphicsScene::adjustPositionForFixedLayers):
        (WebCore::CoordinatedGraphicsScene::setScrollPosition): Deleted.
        * UIProcess/CoordinatedGraphics/CoordinatedGraphicsScene.h:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::setVisibleContentsRect):
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::paintToCurrentGLContext):

2014-11-05  Commit Queue  <commit-queue@webkit.org>

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

        Tries to make backdrop layers on every layer, asserts on
        Mavericks (Requested by smfr on #webkit).

        Reverted changeset:

        "[filters2] Support for backdrop-filter"
        https://bugs.webkit.org/show_bug.cgi?id=138384
        http://trac.webkit.org/changeset/175672

2014-11-04  Ada Chan  <adachan@apple.com>

        Figure out whether a plug-in is playing audio.
        https://bugs.webkit.org/show_bug.cgi?id=137219

        Reviewed by Anders Carlsson.

        Handle the setting of the NPPVpluginIsPlayingAudio variable.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::setPluginIsPlayingAudio):
        Send a SetPluginIsPlayingAudio message to the WebProcess.
        * PluginProcess/PluginControllerProxy.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_SetValue):
        Handle NPPVpluginIsPlayingAudio. Call NetscapePlugin::setIsPlayingAudio().
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::setIsPlayingAudio):
        Call PluginControllerProxy::setPluginIsPlayingAudio().
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::setPluginIsPlayingAudio):
        Call PluginView::setPluginIsPlayingAudio().
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in:
        Add the SetPluginIsPlayingAudio message.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Initialize m_pluginIsPlayingAudio.
        (WebKit::PluginView::~PluginView):
        Remove itself from the Document's list of AudioProducers.
        (WebKit::PluginView::initializePlugin):
        Add itself to the Document's list of AudioProducers.
        (WebKit::PluginView::pageMutedStateDidChange):
        Add a FIXME.
        (WebKit::PluginView::setPluginIsPlayingAudio):
        If m_pluginIsPlayingAudio has changed, tell the Document to update its audio playing state.
        * WebProcess/Plugins/PluginView.h:
        Now inherits AudioProducer.

2014-11-05  Dan Bernstein  <mitz@apple.com>

        Tried to fix the GTK build.

        * PlatformGTK.cmake: Removed references to deletion UI resources that have been removed.

2014-11-04  Dean Jackson  <dino@apple.com>

        [filters2] Support for backdrop-filter
        https://bugs.webkit.org/show_bug.cgi?id=138384
        <rdar://problem/18874494>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext): Handle LayerTypeBackdropLayer in the switch.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::description): Describe a backdrop layer.
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (+[WKBackdropView layerClass]): Define CABackdropLayer and use it as the class.
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeHost.mm: Ditto.
        (WebKit::RemoteLayerTreeHost::createLayer):

2014-11-05  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Improve previous temporary fix against drawing (0,0) position before rendering content of next web page
        https://bugs.webkit.org/show_bug.cgi?id=138305

        Reviewed by Gyuyoung Kim.

        WebKit2 has freezed layer tree until frame load completion since r101838.
        In EFL port, we unfreeze it when PageViewportController::pageTransitionViewportReady() is called though,
        UIProcess on EFL port updates cairo surface during the freezing time of layer tree.
        Thus UIProcess should not update the layer trees until the layerTreeState is unfrozen.

        * UIProcess/API/efl/EwkView.h: Removed previous workarounds.
        (EwkView::setWaitingForNewPage): Deleted.
        (EwkView::waitingForNewPage): Deleted.
        (EwkView::didCommitNewPage): Deleted.
        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::didCommitLoad):
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::syncVisibleContents):
        * UIProcess/CoordinatedGraphics/PageViewportController.h:
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::didRenderFrame):

2014-11-05  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/WKActionMenuController.mm:

2014-11-05  Dan Bernstein  <mitz@apple.com>

        Remove the unused deletion UI feature
        https://bugs.webkit.org/show_bug.cgi?id=138442

        Rubber-stamped by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldShowDeleteInterface): Deleted.
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2014-11-05  Conrad Shultz  <conrad_shultz@apple.com>

        It should be possible to open a page preview by clicking on it
        https://bugs.webkit.org/show_bug.cgi?id=138445

        Reviewed by Tim Horton.

        Add a click recognizer to WKPagePreviewViewController and plumb it through to WKActionMenuController.

        * UIProcess/mac/WKActionMenuController.mm:
        Declare <WKPagePreviewViewControllerDelegate>, currently home to just a single method.
        (-[WKPagePreviewViewController loadView]):
        Configure and add a click gesture recognizer to the WKWebView.
        (-[WKPagePreviewViewController _clickRecognized:]):
        Gesture recognizer action; send -pagePreviewViewControllerWasClicked: to the delegate.
        (-[WKActionMenuController willDestroyView:]):
        Extract code to -_clearPreviewPopover.
        (-[WKActionMenuController didCloseMenu:withEvent:]):
        Ditto.
        (-[WKActionMenuController _createPreviewPopoverForURL:]):
        Set ourself as the delegate of the page preview controller.
        (-[WKActionMenuController _clearPreviewPopover]):
        Extracted from various other methods; if appropriate, nil out the preview view controller's delegate.
        (-[WKActionMenuController popoverWillClose:]):
        Extract code to -_clearPreviewPopover.
        (-[WKActionMenuController pagePreviewViewControllerWasClicked:]):
        WKPagePreviewViewControllerDelegate method; open the URL of the clicked page.

2014-11-05  Beth Dakin  <bdakin@apple.com>

        Page preview popover should show scaled-down web content
        https://bugs.webkit.org/show_bug.cgi?id=138444

        Reviewed by Anders Carlsson.

        Instead of keeping the preferred size in the controller, keep the main view’s 
        size, and then scale the bounds of the popover’s view using that and the scale 
        factor as a constant. Set the size of the popover explicitly so that it doesn’t 
        get the view’s size. This will cause it to scale the WKWebView.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKPagePreviewViewController initWithPageURL:]):
        (-[WKPagePreviewViewController loadView]):
        (-[WKActionMenuController _createPreviewPopoverForURL:originRect:]):
        (-[WKActionMenuController _preferredSizeForPopoverPresentedFromOriginRect:]):

2014-11-05  Conrad Shultz  <conrad_shultz@apple.com>

        Page preview popovers sometimes cover their originating element
        https://bugs.webkit.org/show_bug.cgi?id=138437

        Reviewed by Beth Dakin.

        If a popover is sufficiently large, and the originating element is in a particular location, it's
        possible that the popover can't be positioned in a manner that doesn't occlude the originating element.
        Address this by scaling down the popover content if it can't fit entirely between the originating
        element and the screen edge.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _previewURLFromActionMenu:]):
        Update to use -_createPreviewPopoverForURL:originRect:.
        (-[WKActionMenuController _createPreviewPopoverForURL:originRect:]):
        Renamed from -_createPreviewPopoverForURL:; extract code to -_preferredSizeForPopoverPresentedFromOriginRect:.
        (-[WKActionMenuController _preferredSizeForPopoverPresentedFromOriginRect:]):
        Compute a size that is as large as possible while keeping the popover between the origin rect and screen edge
        (with an arbitrary padding applied to keep from directly abutting the screen edge).
        (-[WKActionMenuController _createPreviewPopoverForURL:]): Deleted.

2014-11-05  Alexey Proskuryakov  <ap@apple.com>

        fast/dom/remove-body-during-body-replacement2.html fails on WK2
        https://bugs.webkit.org/show_bug.cgi?id=138334

        Reviewed by Anders Carlsson.

        Added an SPI to focus a frame.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameFocus):
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setViewState):

2014-11-05  Tim Horton  <timothy_horton@apple.com>

        Select Data Detectors results instead of just highlighting them
        https://bugs.webkit.org/show_bug.cgi?id=138435
        <rdar://problem/18877675>

        Reviewed by Beth Dakin.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::selectLastActionMenuRange):
        (WebKit::WebPageProxy::selectLookupTextAtLocation): Deleted.
        Rename selectLookupTextAtLocation to selectLastActionMenuRange.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        Do a real selection for single-item Data Detector menus; show the yellow highlight otherwise.
        Adopt selectLastActionMenuRange for non-detected text.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        (WebKit::WebPage::selectLastActionMenuRange):
        (WebKit::WebPage::selectLookupTextAtLocation): Deleted.
        Store the last (detected data or Lookup-derived) action menu range.
        Select it upon selectLastActionMenuRange.

2014-11-04  Jon Honeycutt  <jhoneycutt@apple.com>

        WebContent crash in WebPage::selectWithGesture()

        <https://bugs.webkit.org/show_bug.cgi?id=138399>
        <rdar://problem/18550631>

        This crash occurs when the web process receives a "TapAndAHalf" gesture
        with the "Changed" state without having received a "TapAndAHalf"
        gesture with the "Began" state.

        No test possible.

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):
        Null check m_currentWordRange before dereferencing it.

2014-11-05  Conrad Shultz  <conrad_shultz@apple.com>

        Disable action menus on page previews
        https://bugs.webkit.org/show_bug.cgi?id=138431

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _shouldIgnoreMouseEvents]):
        Renamed from -shouldIgnoreMouseEvents since this isn't actually public.
        (-[WKView swipeWithEvent:]):
        (-[WKView mouseMoved:]):
        (-[WKView mouseDown:]):
        (-[WKView mouseUp:]):
        (-[WKView mouseDragged:]):
        Updated to reflect method rename.
        (-[WKView shouldIgnoreMouseEvents]): Deleted.

        * UIProcess/API/mac/WKViewInternal.h:
        Expose -_shouldIgnoreMouseEvents.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        Cancel the menu if the presenting WKView should ignore mouse events.

2014-11-05  Beth Dakin  <bdakin@apple.com>

        Action menu URL preview should "peek," i.e. appear when the menu item is 
        highlighted
        https://bugs.webkit.org/show_bug.cgi?id=138432
        -and corresponding-
        rdar://problem/18774264

        Reviewed by Anders Carlsson.

        New ivars. Keep a reference to the popover, and a BOOL that indicates whether we 
        should close the popover when the menu goes away.
        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:

        Re-set the preview bool to NO whenever we are about to pop up a new menu.
        (-[WKActionMenuController prepareForMenu:withEvent:]):

        Close the popover when the menu closes unless _shouldKeepPreviewPopoverOpen has 
        been set.
        (-[WKActionMenuController didCloseMenu:withEvent:]):

        Set _shouldKeepPreviewPopoverOpen.
        (-[WKActionMenuController _keepPreviewOpen:]):

        Re-factored to use ivar.
        (-[WKActionMenuController _previewURLFromActionMenu:]):
        (-[WKActionMenuController _createPreviewPopoverForURL:]):

        Now call _previewURLFromActionMenu on menu item highlight.
        (-[WKActionMenuController menu:willHighlightItem:]):

        NSPopover delegate method so that we can keep our BOOL and ivar accurate in the 
        case where the popover is closed by some other mechanism than the action menu 
        going away.
        (-[WKActionMenuController popoverWillClose:]):

        New selector for the preview. Now when this item is actually selected, we just 
        want to set the BOOL _shouldKeepPreviewPopoverOpen to YES so that we keep the 
        preview open.
        (-[WKActionMenuController _createActionMenuItemForTag:]):

2014-11-05  Conrad Shultz  <conrad_shultz@apple.com>

        Disable interaction with action menu page previews
        https://bugs.webkit.org/show_bug.cgi?id=138400

        Reviewed by Tim Horton.

        Expand on the existing -[WKView shouldIgnoreMouseEvents] by adding facilities to suppress handling
        of all non-wheel events, effectively creating a scroll-only web view. Deploy this in
        WKPagePreviewViewController.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Declare the OS X-only ignoresNonWheelMouseEvents SPI.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _ignoresNonWheelMouseEvents]):
        (-[WKWebView _setIgnoresNonWheelMouseEvents:]):
        Wrap the underlying WKView methods.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Declare the OS X-only ignoresNonWheelMouseEvents property.

        * UIProcess/API/mac/WKView.mm:
        Add _ignoresNonWheelMouseEvents to WKViewData.
        (-[WKView shouldIgnoreMouseEvents]):
        Include a check for _ignoresNonWheelMouseEvents.
        (-[WKView _setIgnoresNonWheelMouseEvents:]):
        Set the ivar in WKViewData.
        (-[WKView _ignoresNonWheelMouseEvents]):
        Fetch the ivar in WKViewData.
        (-[WKView _shouldIgnoreWheelEvents]):
        Implement the old -shouldIgnoreMouseEvents behavior.
        (-[WKView scrollWheel:]):
        -shouldIgnoreMouseEvents -> -_shouldIgnoreWheelEvents.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKPagePreviewViewController loadView]):
        Configure the WKWebView to ignore non-wheel mouse events; use RetainPtr for the WKWebView.

2014-11-03  Dean Jackson  <dino@apple.com>

        Add ENABLE_FILTERS_LEVEL_2 feature guard.
        https://bugs.webkit.org/show_bug.cgi?id=138362

        Reviewed by Tim Horton.

        Add a new feature define for Level 2 of CSS Filters.
        http://dev.w3.org/fxtf/filters-2/

        * Configurations/FeatureDefines.xcconfig:

2014-11-05  Alberto Garcia  <berto@igalia.com>

        NetscapePlugin: NPP_GetValue should receive a pointer to NPBool, not bool
        https://bugs.webkit.org/show_bug.cgi?id=138418

        Reviewed by Carlos Garcia Campos.

        Replace bool with NPBool, which is actually an unsigned char.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPostInitialize):

2014-11-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebResource::failed-with-tls-errors signal
        https://bugs.webkit.org/show_bug.cgi?id=137862

        Reviewed by Gustavo Noronha Silva.

        When a resource load fails due to TLS errors emit WebKitWebResource::failed-with-tls-errors
        signal instead of WebKitWebResource::failed so that TLS errors information and certificate
        are provided.

        * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp:
        (didReceiveWebViewMessageFromInjectedBundle): Check if the error
        is a TLS failure to emit failed-with-tls-errors instead of failed.
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkit_web_resource_class_init): Add WebKitWebResource::failed-with-tls-errors signal.
        (webkitWebResourceFailedWithTLSErrors): Emit failed-with-tls-errors and finish signals.
        * UIProcess/API/gtk/WebKitWebResourcePrivate.h:

2014-11-05  Shivakumar JM  <shiva.jm@samsung.com>

        Fix build warning in WebKit2/WebProcess module.
        https://bugs.webkit.org/show_bug.cgi?id=138410

        Reviewed by Alexey Proskuryakov.

        Fix build warning by removing parameter name

        * WebProcess/WebPage/WebPageOverlay.h:
        (WebKit::WebPageOverlay::Client::prepareForActionMenu):

2014-11-05  Antti Koivisto  <antti@apple.com>

        Move HTTPHeaderMap encoding to the class
        https://bugs.webkit.org/show_bug.cgi?id=138412

        Reviewed by Andreas Kling.

        * PluginProcess/PluginControllerProxy.cpp:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<HTTPHeaderMap>::encode): Deleted.
        (IPC::ArgumentCoder<HTTPHeaderMap>::decode): Deleted.

            Make these HTTPHeaderMap members instead so they can access internals and can be used elsewhere.

        * Shared/WebCoreArgumentCoders.h:

2014-11-04  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dismissActionMenuDataDetectorPopovers]):
        * UIProcess/API/mac/WKViewInternal.h:

2014-11-04  Beth Dakin  <bdakin@apple.com>

        Un-anchor data detector popovers on scroll
        https://bugs.webkit.org/show_bug.cgi?id=138385
        -and corresponding-
        rdar://problem/18869345

        Reviewed by Tim Horton.

        Whenever we dismiss the dictionary popover, and on scroll, we should try to 
        dismiss the data detector popovers. Right now we don’t have the ability to know if 
        a dismiss succeeded, so we will settle for un-anchoring the popover.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _dismissActionMenuDataDetetcorPopovers]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::pageDidScroll):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::dismissActionMenuDataDetetcorPopovers):
        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController dismissActionMenuDataDetetcorPopovers]):

2014-11-04  Andy Estes  <aestes@apple.com>

        [iOS] WKPDFView should scroll to a fragment when loading a PDF
        https://bugs.webkit.org/show_bug.cgi?id=138404

        Reviewed by Tim Horton.

        WKPDFView already knew how to scroll to a page number fragment during a same-document navigation, but it didn't
        know to do so when loading a PDF whose URL already contained a page number fragment. This could happen if the
        user long-presses a page number link and taps 'Open in New Tab'.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]): Called _scrollToFragment:.
        (-[WKPDFView _scrollToFragment:]): Moved fragment scrolling code to here from web_didSameDocumentNavigation:.
        (-[WKPDFView web_didSameDocumentNavigation:]): Called _scrollToFragment.

2014-11-04  Andy Estes  <aestes@apple.com>

        [iOS] Stop using +[NSURL _web_URLWithWTFString:relativeToURL:] in WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=138357

        Rubber-stamped by Dan Bernstein.

        During patch review for r175595 I changed from using +URLWithString:relativeToURL: to using
        +_web_URLWithWTFString:relativeToURL: to append a page number fragment to the document URL.
        If the base URL already contains a fragment, +_web_URLWithWTFString:relativeToURL: appends to the existing
        fragment whereas +URLWithString:relativeToURL: replaces the existing fragment. I want the latter behavior.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _URLForLinkAnnotation:]):

2014-11-04  Tim Horton  <timothy_horton@apple.com>

        Add bundle SPI allowing PageOverlay to customize the action menu
        https://bugs.webkit.org/show_bug.cgi?id=138388
        <rdar://problem/18875579>

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        Bump the BundlePageOverlay client version.

        (WKBundlePageOverlayCreate):
        (WKBundlePageOverlaySetAccessibilityClient):
        Don't return if we have a version; the version check happens later anyway,
        and now it is valid to have a version >0.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        Bump the BundlePageOverlay client version.
        Add prepareForActionMenu callback.

        * WebProcess/WebPage/WebPageOverlay.h:
        (WebKit::WebPageOverlay::Client::prepareForActionMenu):
        * WebProcess/WebPage/WebPageOverlay.cpp:
        (WebKit::overlayMap):
        (WebKit::WebPageOverlay::WebPageOverlay):
        (WebKit::WebPageOverlay::~WebPageOverlay):
        (WebKit::WebPageOverlay::fromCoreOverlay):
        (WebKit::WebPageOverlay::pageOverlayDestroyed):
        Keep track of a map of PageOverlay to WebPageOverlay.

        (WebKit::WebPageOverlay::prepareForActionMenu):
        Forward prepareForActionMenu to the client.
        
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Iterate through the overlays and let them prepareForActionMenu;
        the first overlay that returns true wins. If no overlays want to
        do anything, hand preparation along to the context menu client.

2014-11-03  Jeremy Jones  <jeremyj@apple.com>

        Add button and enable optimized fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=138351

        Reviewed by Eric Carlson.

        Add IsOptimizedFullscreenSupported to enable the feature only where appropriate.

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

2014-11-04  Andy Estes  <aestes@apple.com>

        [iOS] Add long press support for links in WKPDFView
        https://bugs.webkit.org/show_bug.cgi?id=138357

        Reviewed by Dan Bernstein.

        Use WKActionSheetAssistant to show a link action sheet in response to long-pressing on a link. Have WKPDFView
        conform to WKActionSheetAssistantDelegate in order to respond to the open and copy actions as well as to
        provide the link's URL and position information to WKActionSheetAssistant. The long-pressed link is highlighted
        for .75 seconds before the sheet is displayed in order to match UIWebPDFView.

        * UIProcess/ios/WKActionSheetAssistant.h: Made protocol methods that WKPDFView doesn't implement optional.
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant updatePositionInformation]): Checked if delegate responds to
        updatePositionInformationForActionSheetAssistant: before calling.
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]): Checked if delegate responds to
        actionSheetAssistant:willStartInteractionWithElement: before calling.
        (-[WKActionSheetAssistant cleanupSheet]): Checked if delegate responds to actionSheetAssistantDidStopInteraction:
        before calling.
        * UIProcess/ios/WKPDFView.h: Conformed to WKActionSheetAssistantDelegate.
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_initWithFrame:webView:]): Instantiated a WKActionSheetAssistant and set self as its delegate.
        (-[WKPDFView _highlightLinkAnnotation:forDuration:completionHandler:]): Moved highlight drawing to here from
        annotation:wasTouchedAtPoint:controller: in order to be reused for long-press.
        (-[WKPDFView _URLForLinkAnnotation:]): Moved URL creation to here from annotation:wasTouchedAtPoint:controller:
        in order to be reused for long-press. Generated an absolute URL since this URL might go into the pasteboard.
        (-[WKPDFView annotation:wasTouchedAtPoint:controller:]): Changed to call
        _highlightLinkAnnotation:forDuration:completionHandler: and _URLForLinkAnnotation:.
        (-[WKPDFView annotation:isBeingPressedAtPoint:controller:]): Set values on _positionInformation and called
        -[WKActionSheetAssistant showLinkSheet] after showing a highlight for .75 seconds.
        (-[WKPDFView positionInformation]): Returned _positionInformation.
        (-[WKPDFView performAction:]): Added a UTF-8 text and URL representation of the pressed URL to the pasteboard.
        (-[WKPDFView openElementAtLocation:]): Called WebPage::navigateToURLWithSimulatedClick().
        (-[WKPDFView actionsForElement:defaultActions:]): Returned actions from UIClient::actionsForElement().
        (-[WKPDFView _createHighlightViewWithFrame:]): Deleted.

2014-11-04  Anders Carlsson  <andersca@apple.com>

        Try to fix the 32-bit build.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForLink]):
        (-[WKActionMenuController _createActionMenuItemForTag:]):

2014-11-04  Conrad Shultz  <conrad_shultz@apple.com>

        Use a web view for Quick Look in action menus
        https://bugs.webkit.org/show_bug.cgi?id=138370

        Reviewed by Anders Carlsson.

        Instead of using the QLPreviewBubble SPI, show a popover containing a web view. This currently
        does not inherit any configuration from the presenting WKView and does not expose any
        customization options.

        * UIProcess/mac/WKActionMenuController.mm:
        Declare new internal NSViewController subclass, WKPagePreviewViewController.
        (-[WKPagePreviewViewController initWithPageURL:]):
        Store the passed-in URL and set a somewhat arbitrary (iPhone 5 screen size) default preferred size.
        (-[WKPagePreviewViewController loadView]):
        Create a WKWebView and load the URL passed into the initializer.
        (-[WKActionMenuController _previewURLFromActionMenu:]):
        Renamed from -_quickLookURLFromActionMenu:; present the popover returned by -_createPreviewPopoverForURL:.
        (-[WKActionMenuController _createPreviewPopoverForURL:]):
        New helper method; return a popover that owns a _WKPagePreviewViewController configured to show a scaled-down web page.
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        Update to reflect method rename.
        (-[WKActionMenuController _quickLookURLFromActionMenu:]): Deleted.

2014-11-04  Chris Dumez  <cdumez@apple.com>

        Add ptr() method to Ref class
        https://bugs.webkit.org/show_bug.cgi?id=138361

        Reviewed by Darin Adler.

        Use the new Ref::ptr() method.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createWebPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setPreferences):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didNavigateWithNavigationData):
        (WebKit::WebProcessProxy::didPerformClientRedirect):
        (WebKit::WebProcessProxy::didPerformServerRedirect):
        (WebKit::WebProcessProxy::didUpdateHistoryTitle):

2014-11-04  Andy Estes  <aestes@apple.com>

        [iOS] Include a WKActionSheetAssistant parameter in WKActionSheetAssistantDelegate methods
        https://bugs.webkit.org/show_bug.cgi?id=137792

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction elementActionWithTitle:actionHandler:]):
        (+[_WKElementAction elementActionWithType:customTitle:]):
        (-[_WKElementAction _runActionWithElementInfo:forActionSheetAssistant:]):
        * UIProcess/API/Cocoa/_WKElementActionInternal.h:
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant initialPresentationRectInHostViewForSheet]):
        (-[WKActionSheetAssistant presentationRectInHostViewForSheet]):
        (-[WKActionSheetAssistant updatePositionInformation]):
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        (-[WKActionSheetAssistant cleanupSheet]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView positionInformationForActionSheetAssistant:]):
        (-[WKContentView updatePositionInformationForActionSheetAssistant:]):
        (-[WKContentView actionSheetAssistant:performAction:]):
        (-[WKContentView actionSheetAssistant:openElementAtLocation:]):
        (-[WKContentView actionSheetAssistant:decideActionsForElement:defaultActions:]):
        (-[WKContentView actionSheetAssistant:willStartInteractionWithElement:]):
        (-[WKContentView actionSheetAssistantDidStopInteraction:]):

2014-11-04  Csaba Osztrogonác  <ossy@webkit.org>

         URTBF after r175564 for !PLATFORM(COCOA).

        * Shared/TextIndicator.cpp:

2014-11-04  Tim Horton  <timothy_horton@apple.com>

        Implement yellow highlight over data detected items
        https://bugs.webkit.org/show_bug.cgi?id=138340
        <rdar://problem/18840102>

        Reviewed by Anders Carlsson.

        * Shared/TextIndicator.cpp: Renamed from Source/WebKit2/UIProcess/TextIndicator.cpp.
        * Shared/TextIndicator.h: Renamed from Source/WebKit2/UIProcess/TextIndicator.h.
        Move TextIndicator to Shared.
        Move all of the members to a Data struct.
        Implement encode/decode for TextIndicator::Data, so it can be passed as
        the argument to SetTextIndicator, and also as a field on ActionMenuHitTestResult.
        Add 'createWithSelectionInFrame', which builds a TextIndicator
        from the selection in the given frame.

        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):
        Rename actionBoundingBox to detectedDataBoundingBox.
        Store/encode/decode detectedDataTextIndicator.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setTextIndicator):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Create a TextIndicator from the TextIndicator::Data.
        Add an explicit ClearTextIndicator message instead of sending empty Data.
        
        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        If the text indicator is up when preparing for a new menu invocation, hide it.

        (-[WKActionMenuController willOpenMenu:withEvent:]):
        Show the text indicator when the menu opens, for data detected items.

        (-[WKActionMenuController didCloseMenu:withEvent:]):
        Hide the text indicator when the menu closes, unless we only had one item.
        Then, we'll hide it in the DDActionContext completionHandler block.
        
        (-[WKActionMenuController _showTextIndicator]):
        (-[WKActionMenuController _hideTextIndicator]):
        Added. Show and hide the text indicator based on the TextIndicator
        data included in the action menu hit test result.

        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
        Hide the text indicator when the data detector popover completes.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::getImageForFindMatch):
        Make use of the newly-moved createSelectionSnapshot.

        (WebKit::FindController::updateFindIndicator):
        Make use of TextIndicator::createWithSelectionInFrame, which allows
        us to share this code for building a TextIndicator with other callers.

        (WebKit::FindController::hideFindIndicator):

        (WebKit::getFindIndicatorBitmap): Deleted.
        Move getFindIndicatorBitmap to WebFrame::createSelectionSnapshot.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSelectionSnapshot):
        Moved from FindController's getFindIndicatorBitmap.
        Now returns a ShareableBitmap instead of going ahead and making a Handle.

        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::scanForDataDetectedItems):
        (WebKit::textIndicatorForRange):
        Temporarily change the selection to the given range, then use
        TextIndicator::indicatorWithSelectionInFrame to acquire a TextIndicator,
        then reset the selection.

        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Create a TextIndicator from the data detected range.

2014-11-04  Andy Estes  <aestes@apple.com>

        Fix the iOS build after r175549.

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

2014-11-04  Darin Adler  <darin@apple.com>

        Eliminate ResourceBuffer and use SharedBuffer directly instead
        https://bugs.webkit.org/show_bug.cgi?id=138174

        Reviewed by Antti Koivisto.

        * CMakeLists.txt: Removed WebResourceBuffer.cpp.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sendBuffer): Use a reference instead of pointer.
        * NetworkProcess/NetworkResourceLoader.h: Ditto.
        * NetworkProcess/mac/NetworkDiskCacheMonitor.h: Ditto.
        * NetworkProcess/mac/NetworkDiskCacheMonitor.mm:
        (WebKit::NetworkDiskCacheMonitor::resourceBecameFileBacked): Ditto.
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer): Ditto.

        * Shared/WebResourceBuffer.cpp: Removed.
        * Shared/WebResourceBuffer.h: Removed.

        * WebKit2.xcodeproj/project.pbxproj: Removed WebResourceBuffer.cpp/h.

        * WebProcess/Network/NetworkProcessConnection.cpp: Removed unneeded includes.
        (WebKit::NetworkProcessConnection::didCacheResource): Use a reference instead
        of a pointer.

        * WebProcess/Network/WebResourceLoadScheduler.cpp: Removed unneeded include.
        * WebProcess/Network/WebResourceLoader.cpp: Ditto.
        * WebProcess/Network/WebResourceLoader.h: Ditto.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: Ditto.
        (WebKit::WebFrameLoaderClient::finishedLoading): Use SharedBuffer directly.
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::source): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame): Refactored to make the relationship
        between the buffer and the DataReference clearer and to avoid having a long-lived
        DataReference pointing to an underlying buffer with unclear lifetime.
        (WebKit::WebPage::getContentsAsString): Ditto.
        (WebKit::WebPage::getSelectionAsWebArchiveData): Ditto.
        (WebKit::WebPage::getMainResourceDataOfFrame): Ditto. Also use SharedBuffer directly.
        (WebKit::WebPage::getResourceDataFromFrame): Ditto.
        (WebKit::WebPage::getWebArchiveOfFrame): Ditto.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::containingLinkElement): Use elementLineage.
        (WebKit::WebPage::performActionOnElement): Use references and SharedBuffer.
        ALso did a bit of other cleanup in here.
        (WebKit::isAssistableElement): Take Element& instead of Node*, since that's what
        the caller has.
        (WebKit::nextAssistableElement): Changed name to match what the function does.
        Added an obviously-missing check on the startNode argument. Updated for change
        to isAssistableElement above. Take a Page& instead of a Page*.
        (WebKit::hasAssistableElement): Changed name to match what the function does.
        Updated for change to nextAssistableElement above. Took out incorrect comparison
        of a C++ pointer to the Objective-C object pointer nil. Take a Page& instead of a Page*.
        (WebKit::WebPage::focusNextAssistedNode): Updated for above changes.
        (WebKit::WebPage::getAssistedNodeInformation): Updated for above changes.

2014-11-04  Tim Horton  <timothy_horton@apple.com>

        Dictionary lookup panel pops up at random when clicking on selected text
        https://bugs.webkit.org/show_bug.cgi?id=138353
        <rdar://problem/18861406>

        * WebProcess/WebPage/WebPage.h:
        Fix the build; this needs to be public.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::rangeForDictionaryLookupAtHitTestResult):
        Use the right selection (the one we just tested) in the change from r175517.

2014-11-04  Tim Horton  <timothy_horton@apple.com>

        Dictionary lookup panel pops up at random when clicking on selected text
        https://bugs.webkit.org/show_bug.cgi?id=138353
        <rdar://problem/18861406>

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::rangeForDictionaryLookupForSelection):
        (WebKit::rangeForDictionaryLookupAtHitTestResult):
        Factor rangeForDictionaryLookupForSelection out of performDictionaryLookupForSelection.

        Make use of rangeForDictionaryLookupForSelection in rangeForDictionaryLookupAtHitTestResult,
        returning the selection-based range if the hit test intersects the selected text.
        Previously, we were just going forward with performDictionaryLookupForSelection,
        which would actually *do* the lookup, even if we just wanted to retrieve the range.

        Make rangeForDictionaryLookup* static.

        (WebKit::WebPage::performDictionaryLookupForSelection):
        Make use of rangeForDictionaryLookupForSelection.

2014-11-03  Chris Dumez  <cdumez@apple.com>

        Allow implicit conversion from Ref<T> to T&
        https://bugs.webkit.org/show_bug.cgi?id=138331

        Reviewed by Andreas Kling.

        Remove unnecessary calls to Ref<T>::get() now that a Ref<T> can be
        converted implicitly to a T&.

2014-11-03  Simon Fraser  <simon.fraser@apple.com>

        Expose visibleDebugOverlayRegions pref via the WK2 C SPI
        https://bugs.webkit.org/show_bug.cgi?id=138342

        Reviewed by Dan Bernstein.
        
        Expose WKDebugOverlayRegions via the C SPI.
        
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetVisibleDebugOverlayRegions):
        (WKPreferencesGetVisibleDebugOverlayRegions):
        * UIProcess/API/C/WKPreferencesRef.h:

2014-11-03  Beth Dakin  <bdakin@apple.com>

        Implement action menus for editable text with spelling suggestions
        https://bugs.webkit.org/show_bug.cgi?id=138333
        -and corresponding-
        rdar://problem/18742371

        Reviewed by Tim Horton.

        New types.
        * Shared/API/c/WKActionMenuItemTypes.h:
        * Shared/API/c/WKActionMenuTypes.h:

        ActionMenuHitTestResult now stores the String result of the lookup.
        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):

        Make getGuessesForWord() public so we can call it from WKActionMenuController.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WKActionMenuController.mm:

        Select the text for all types of text menus.
        (-[WKActionMenuController isMenuForTextContent]):
        (-[WKActionMenuController willOpenMenu:withEvent:]):

        Spelling suggestions are presented in a sub-menu and will replace the selection 
        when chosen.
        (-[WKActionMenuController _defaultMenuItemsForEditableTextWithSuggestions:]):
        (-[WKActionMenuController _changeSelectionToSuggestion:]):
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        (-[WKActionMenuController _defaultMenuItems:]):

        New function to store the lookupText as a String on the ActionMenuHitTestResult.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        (WebKit::WebPage::lookupTextAtLocation):

2014-11-03  Simon Fraser  <simon.fraser@apple.com>

        Add page overlays that show regions with mouseWheel event handlers, and the non-fast-scrollable region, and code to toggle them in MiniBrowser WK2
        https://bugs.webkit.org/show_bug.cgi?id=138257

        Reviewed by Tim Horton.
        
        Add private prefs to control visibility of debug-related page region overlays.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _visibleDebugOverlayRegions]):
        (-[WKPreferences _setVisibleDebugOverlayRegions:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::setDebugUInt32ValueIfInUserDefaults):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updatePreferences): Update the overlays.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): Update the overlays.

2014-11-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r175406, r175413, and r175423.
        https://bugs.webkit.org/show_bug.cgi?id=138327

        Multipart tests are still broken (Requested by ap on #webkit).

        Reverted changesets:

        "Eliminate ResourceBuffer and use SharedBuffer directly
        instead"
        https://bugs.webkit.org/show_bug.cgi?id=138174
        http://trac.webkit.org/changeset/175406

        "Unreviewed, iOS build fix since 175406."
        http://trac.webkit.org/changeset/175413

        "Fix assertion in CachedResource::addDataBuffer"
        http://trac.webkit.org/changeset/175423

2014-11-03  Tim Horton  <timothy_horton@apple.com>

        _actionMenuItemsForHitTestResult is given kWKActionMenuLink but an empty array of defaultMenuItems
        https://bugs.webkit.org/show_bug.cgi?id=138321
        <rdar://problem/18855134>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForLink]):
        (-[WKActionMenuController _defaultMenuItems:]):
        Move the HTTP-family-URLs-only condition to the place where we decide what kind of menu to
        show. We depend on _defaultMenuItemsForLink returning the link menu, and should never
        set the link menu type if we aren't going to build a link menu.

2014-11-03  Tim Horton  <timothy_horton@apple.com>

        Use FrameSnapshotting functions in FindController::getFindIndicatorBitmap
        https://bugs.webkit.org/show_bug.cgi?id=138300
        <rdar://problem/18855863>

        Reviewed by Simon Fraser.

        Share more code by using WebCore's FrameSnapshotting::snapshotSelection
        in FindController instead of copying it into FindController wholesale.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::getFindIndicatorBitmap):
        Make getFindIndicatorBitmap static, rename it from getFindIndicatorBitmapAndRect,
        and drop the rect argument because only one caller wanted it, and we no longer need
        to compute it (this happens in WebCore now).

        Use snapshotSelection; all of the removed paint behaviors get added by
        code in or underneath snapshotSelection now.

        Draw the snapshot into our ShareableBitmap; we could avoid this in a future patch
        by refactoring the FrameSnapshotting functions to take GraphicsContexts.

        (WebKit::FindController::getImageForFindMatch):
        (WebKit::FindController::updateFindIndicator):
        Adopt the new getFindIndicatorBitmap.

        * WebProcess/WebPage/FindController.h:
        Remove getFindIndicatorBitmap(AndRect), which is now static.

2014-11-03  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r175476 to make GTK and EFL build happy.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setTextIndicator):
        (WebKit::PageClientImpl::setFindIndicator): Deleted.
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::setTextIndicator):
        (WebKit::WebView::setFindIndicator): Deleted.
        * UIProcess/CoordinatedGraphics/WebView.h:

2014-11-03  Tim Horton  <timothy_horton@apple.com>

        Rename FindIndicator{Window} to TextIndicator{Window}
        https://bugs.webkit.org/show_bug.cgi?id=138302
        <rdar://problem/18855190>

        Reviewed by Anders Carlsson.

        Rename FindIndicator{Window} to TextIndicator{Window} (and related),
        because it will soon be used to indicate ranges of text that are not
        necessarily find-in-page results.

        FindController still has things named 'findIndicator' internally,
        and I left the API alone (because all the API bits are actually find-specific),
        but the actual FindIndicator/Window and the message to set it up, etc. are all
        now called Text*.

        * CMakeLists.txt:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/TextIndicator.cpp: Renamed from Source/WebKit2/UIProcess/FindIndicator.cpp.
        * UIProcess/TextIndicator.h: Renamed from Source/WebKit2/UIProcess/FindIndicator.h.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/WKContentView.h:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        * UIProcess/mac/TextIndicatorWindow.h: Renamed from Source/WebKit2/UIProcess/mac/FindIndicatorWindow.h.
        * UIProcess/mac/TextIndicatorWindow.mm: Renamed from Source/WebKit2/UIProcess/mac/FindIndicatorWindow.mm.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/FindController.cpp:

2014-11-03  Beth Dakin  <bdakin@apple.com>

        Implement action menus for editable text
        https://bugs.webkit.org/show_bug.cgi?id=138284
        -and corresponding-
        rdar://problem/18742323

        Reviewed by Tim Horton.

        New item type for paste.
        * Shared/API/c/WKActionMenuItemTypes.h:

        New menu type for editable text.
        * Shared/API/c/WKActionMenuTypes.h:
        * UIProcess/mac/WKActionMenuController.mm:

        willOpenMenu should select text for both regular text menus and editable text 
        menus. 
        (-[WKActionMenuController willOpenMenu:withEvent:]):

        Default items for editable text.
        (-[WKActionMenuController _defaultMenuItemsForEditableText]):
        (-[WKActionMenuController _paste:]):
        (-[WKActionMenuController _createActionMenuItemForTag:]):

        New method _hitTestResultForStage:(MenuUpdateStage)stage will figure out whether 
        we can use the WebHitTestResult from the ActionMenuHitTestResult or if we have to 
        use the potentially out-of-date WebHitTestResult that is cached on WebPageProxy. 
        An important difference between these results is that the ActionMenuHitTest 
        result, in addition to being more recent and accurate, also now includes shadow 
        content, which affects some editable regions on important sites such as 
        bugs.webkit.org and nytimes.com.
        (-[WKActionMenuController _defaultMenuItems:]):
        (-[WKActionMenuController _updateActionMenuItemsForStage:]):
        (imageForResource:name::if): Deleted.

        Allow shadow content in action menu hit testing.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        (WebKit::WebPage::selectLookupTextAtLocation):

2014-11-03  Ada Chan  <adachan@apple.com>

        Persist the page's muted state across web process crashes.
        https://bugs.webkit.org/show_bug.cgi?id=138195

        Reviewed by Anders Carlsson.

        Store the Page's muted state in WebPageCreationParameters so that state can be properly
        restored after recovering from a crash in the web process.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize m_muted.
        (WebKit::WebPageProxy::setMuted):
        Update m_muted.
        (WebKit::WebPageProxy::creationParameters):
        Set the muted data member in WebPageCreationParameters.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Initialize the page's muted state with the muted value from WebPageCreationParameters.

2014-11-03  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Remove dependency of PageViewportController from PageViewportControllerClient
        https://bugs.webkit.org/show_bug.cgi?id=138301

        Reviewed by Gyuyoung Kim.

        PaeViewportControllerClient does not need to keep the instance of PageViewPortController.
        This patch removes it to simplify relation between them.
        In addition, uses a reference for the client of PageViewportController.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::setViewportPosition):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::didChangeContentsSize):
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::pageDidRequestScroll):
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::didChangeViewportAttributes):
        * UIProcess/CoordinatedGraphics/PageViewportController.h:
        * UIProcess/PageViewportControllerClient.h:
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setController): Deleted.
        * UIProcess/efl/PageViewportControllerClientEfl.h:

2014-11-03  Sungmann Cho  <sungmann.cho@navercorp.com>

        AX: Fix some minor typos related to the word "accessibility".
        https://bugs.webkit.org/show_bug.cgi?id=138299

        Reviewed by Chris Fleizach.

        No new tests, no behavior change.

        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm:

2014-11-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r163656): Remote inspector doesn't work unless preferences change after page initialization
        https://bugs.webkit.org/show_bug.cgi?id=138246

        Reviewed by Joseph Pecoraro.

        The problem is that initializeWebPage() is still using
        pageGroup().preferences() instead of m_preferences to check if
        developer extras are enabled to enable remote inspection of the page.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage): Use m_preferences
        instead of pageGroup().preferences().

2014-11-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(CMake): Make it possible to build without introspection
        https://bugs.webkit.org/show_bug.cgi?id=138006

        Reviewed by Philippe Normand.

        Do not install introspection files when introspection is disabled.

        * PlatformGTK.cmake:

2014-10-31  Dan Bernstein  <mitz@apple.com>

        Removed a reference to a file that’s been deleted.

        * WebKit2.xcodeproj/project.pbxproj: Removed reference to XPCPtr.h.

2014-10-31  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr instead of OwnPtr in CoordinatorDrawingProxy
        https://bugs.webkit.org/show_bug.cgi?id=138238

        Reviewed by Ryosuke Niwa.

        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:
        (WebKit::CoordinatedDrawingAreaProxy::CoordinatedDrawingAreaProxy): Use std::make_unique.
        (WebKit::CoordinatedDrawingAreaProxy::enterAcceleratedCompositingMode):
        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.h: Use std::unique_ptr instead of OwnPtr.

2014-10-31  Sam Weinig  <sam@webkit.org>

        Add bundle SPI to customize the action menu
        <rdar://problem/18830771>
        https://bugs.webkit.org/show_bug.cgi?id=138271

        Reviewed by Anders Carlsson.

        - Adds a new function to the WKBundlePageContextMenuClient that allows the client to pass construct
          user data in the bundle that can be available when customizing the menu in -[WKView _actionMenuItemsForHitTestResult...].
        - Changes the signature of  -[WKView _actionMenuItemsForHitTestResult...] to add userData.
        - Makes the actual hit test result available in the second invocation of -[WKView _actionMenuItemsForHitTestResult...]
          by serializing it in the ActionMenuHitTestResult.

        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):
        Adds the WebHitTestResult and the original hit test request location.
        
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Adds a new version of _actionMenuItemsForHitTestResult that passes userData along.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _didPerformActionMenuHitTest:userData:]):
        (-[WKView _actionMenuItemsForHitTestResult:withType:defaultActionMenuItems:userData:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didPerformActionMenuHitTest):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformActionMenuHitTest):
        Pipe the user data through to the WKView.

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        (-[WKActionMenuController didPerformActionMenuHitTest:userData:]):
        (-[WKActionMenuController menuNeedsUpdate:]):
        (-[WKActionMenuController _updateActionMenuItemsForStage:]):
        Differentiate between the two times _updateActionMenuItems was called via a new stage parameter,
        (it is called once in prepareForMenu, and once in menuNeedsUpdate). Use the last mouse move hit
        test result in the prepareForMenu case (as we don't have a real result yet), and the hit result
        passed in via didPerformActionMenuHitTest in the menuNeedsUpdate case (assuming we didn't time out)
        waiting on the web process.

        * WebProcess/InjectedBundle/API/c/WKBundlePageContextMenuClient.h:
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.cpp:
        (WebKit::InjectedBundlePageContextMenuClient::prepareForActionMenu):
        * WebProcess/InjectedBundle/InjectedBundlePageContextMenuClient.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Adds new bundle SPI to collect user data to pass to the -[WKView _actionMenuItemsForHitTestResult...] method.

2014-10-31  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr for TypeCountSet
        https://bugs.webkit.org/show_bug.cgi?id=138242

        Reviewed by Andreas Kling.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getWebCoreStatistics): Use std::unique_ptr<> instead of OwnPtr.

2014-10-30  Jer Noble  <jer.noble@apple.com>

        [WK2] Send origin & deletion requests to WebProcessess in additon to the DatabaseProcess.
        https://bugs.webkit.org/show_bug.cgi?id=138212

        Reviewed by Brady Eidson.

        Now that the WebProcess has its own WebOriginDataManager, WebOriginDataManagerProxy needs to
        send its origin and deletion messages to all the WebProcesses. This necessetates synchronizing
        all the various process's callbacks so that the final callback is only triggered once all the
        messaged processes reply.

        Add a simple class, CallbackSynchronizer, which will keep track of outstanding process callbacks
        and which will trigger the final callback once all of them finish.

        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::CallbackSynchronizer::create):
        (WebKit::CallbackSynchronizer::~CallbackSynchronizer):
        (WebKit::CallbackSynchronizer::taskStarted):
        (WebKit::CallbackSynchronizer::taskCompleted):
        (WebKit::CallbackSynchronizer::CallbackSynchronizer):
        (WebKit::createSynchronizedCallback):
        (WebKit::sendMessageToAllProcessesInContext):
        (WebKit::WebOriginDataManagerProxy::getOrigins):
        (WebKit::WebOriginDataManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebOriginDataManagerProxy::deleteEntriesModifiedBetweenDates):
        (WebKit::WebOriginDataManagerProxy::deleteAllEntries):

        Drive-by fix: check the correct enum value for WebMedia origin requests.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getOrigins):
        (WebKit::WebProcess::deleteEntriesForOrigin):
        (WebKit::WebProcess::deleteEntriesModifiedBetweenDates):
        (WebKit::WebProcess::deleteAllEntries):

2014-10-31  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r175376): Occasional null deref when doing a dictionary lookup
        https://bugs.webkit.org/show_bug.cgi?id=138261
        <rdar://problem/18841709>

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        rangeForDictionaryLookupAtHitTestResult can easily return null.

2014-10-31  Beth Dakin  <bdakin@apple.com>

        Use system art for action menus when possible
        https://bugs.webkit.org/show_bug.cgi?id=138260

        Reviewed by Tim Horton.

        * Resources/AddImageToPhotosTemplate.pdf: Removed.
        * Resources/CopyImageTemplate.pdf: Removed.
        * Resources/SaveImageToDownloadsTemplate.pdf: Removed.
        * Resources/ShareImageTemplate.pdf: Removed.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-10-31  Timothy Horton  <timothy_horton@apple.com>

        Fix the build for Yosemite systems after r175417

        * UIProcess/mac/WKActionMenuController.mm:

2014-10-31  Timothy Horton  <timothy_horton@apple.com>

        Fix the build for pre-Yosemite systems after r175417

        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView initWithFrame:context:configuration:webView:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformActionMenuHitTest):
        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:

2014-10-31  Timothy Horton  <timothy_horton@apple.com>

        Remove "Add to iPhoto" from the action menu's sharing menu
        https://bugs.webkit.org/show_bug.cgi?id=138251
        <rdar://problem/18837197>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
        Retain/autorelease the new array.

2014-10-31  Tim Horton  <timothy_horton@apple.com>

        Remove "Add to iPhoto" from the action menu's sharing menu
        https://bugs.webkit.org/show_bug.cgi?id=138251
        <rdar://problem/18837197>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
        Filter out "Add to iPhoto".

2014-10-31  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Support script message handlers WebKitUserContentManager
        https://bugs.webkit.org/show_bug.cgi?id=133730

        Reviewed by Carlos Garcia Campos.

        Support user script message handlers in WebKitUserContentManager.
        This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which
        an option is added to the CMake build files. The option is disabled
        globally by default, and the WebKitGTK port enables it. On the API
        level, two new methods to register and unregister names are provided
        in the "window.webkit" namespace, and on message reception the
        "WebKitUserContentManager::script-message-received" signal is
        emitted, using the registered names as signal detail.

        * UIProcess/API/gtk/WebKitJavascriptResult.cpp: Add a new private
        function to construct a WebKitJavascriptResult directly from a
        WebCore::SerializedScriptValue.
        (_WebKitJavascriptResult::_WebKitJavascriptResult): Ditto.
        (webkitJavascriptResultCreate): Ditto.
        * UIProcess/API/gtk/WebKitJavascriptResultPrivate.h: Ditto.
        * UIProcess/API/gtk/WebKitUserContentManager.cpp:
        (webkit_user_content_manager_class_init): Install the
        "script-message-received" signal.
        (webkit_user_content_manager_register_script_message_handler):
        Added.
        (webkit_user_content_manager_unregister_script_message_handler):
        Added.
        * UIProcess/API/gtk/WebKitUserContentManager.h: Added the new
        public API methods.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Ditto.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add
        webkit_user_content_manager_get_type() to the list in order to make
        gtk-doc to generate documentation for signals.

2014-10-31  Martin Hock  <mhock@apple.com>

        Unreviewed, iOS build fix since 175406.

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

2014-10-30  Darin Adler  <darin@apple.com>

        Eliminate ResourceBuffer and use SharedBuffer directly instead
        https://bugs.webkit.org/show_bug.cgi?id=138174

        Reviewed by Antti Koivisto.

        * CMakeLists.txt: Removed WebResourceBuffer.cpp.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sendBuffer): Use a reference instead of pointer.
        * NetworkProcess/NetworkResourceLoader.h: Ditto.
        * NetworkProcess/mac/NetworkDiskCacheMonitor.h: Ditto.
        * NetworkProcess/mac/NetworkDiskCacheMonitor.mm:
        (WebKit::NetworkDiskCacheMonitor::resourceBecameFileBacked): Ditto.
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer): Ditto.

        * Shared/WebResourceBuffer.cpp: Removed.
        * Shared/WebResourceBuffer.h: Removed.

        * WebKit2.xcodeproj/project.pbxproj: Removed WebResourceBuffer.cpp/h.

        * WebProcess/Network/NetworkProcessConnection.cpp: Removed unneeded includes.
        (WebKit::NetworkProcessConnection::didCacheResource): Use a reference instead
        of a pointer.

        * WebProcess/Network/WebResourceLoadScheduler.cpp: Removed unneeded include.
        * WebProcess/Network/WebResourceLoader.cpp: Ditto.
        * WebProcess/Network/WebResourceLoader.h: Ditto.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: Ditto.
        (WebKit::WebFrameLoaderClient::finishedLoading): Use SharedBuffer directly.
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::source): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame): Refactored to make the relationship
        between the buffer and the DataReference clearer and to avoid having a long-lived
        DataReference pointing to an underlying buffer with unclear lifetime.
        (WebKit::WebPage::getContentsAsString): Ditto.
        (WebKit::WebPage::getSelectionAsWebArchiveData): Ditto.
        (WebKit::WebPage::getMainResourceDataOfFrame): Ditto. Also use SharedBuffer directly.
        (WebKit::WebPage::getResourceDataFromFrame): Ditto.
        (WebKit::WebPage::getWebArchiveOfFrame): Ditto.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::containingLinkElement): Use elementLineage.
        (WebKit::WebPage::performActionOnElement): Use references and SharedBuffer.
        ALso did a bit of other cleanup in here.
        (WebKit::isAssistableElement): Take Element& instead of Node*, since that's what
        the caller has.
        (WebKit::nextAssistableElement): Changed name to match what the function does.
        Added an obviously-missing check on the startNode argument. Updated for change
        to isAssistableElement above. Take a Page& instead of a Page*.
        (WebKit::hasAssistableElement): Changed name to match what the function does.
        Updated for change to nextAssistableElement above. Took out incorrect comparison
        of a C++ pointer to the Objective-C object pointer nil. Take a Page& instead of a Page*.
        (WebKit::WebPage::focusNextAssistedNode): Updated for above changes.
        (WebKit::WebPage::getAssistedNodeInformation): Updated for above changes.

2014-10-30  Jer Noble  <jer.noble@apple.com>

        [EME] Add Setting for accessing storage location for MediaKeys data
        https://bugs.webkit.org/show_bug.cgi?id=138147

        Reviewed by Brady Eidson.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Pass from WebMediaKeyStorageManager into Settings.

2014-10-30  Dana Burkart  <dburkart@apple.com>

        Workaround for <rdar://problem/18830639>

        Unreviewed.

        * Shared/API/Cocoa/WKFoundation.h:

2014-10-30  Dana Burkart  <dburkart@apple.com>

        <rdar://problem/18821260> Prepare for the mysterious future

        Reviewed by Lucas Forschler.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebContentService.Development.xcconfig:
        * Configurations/WebContentService.xcconfig:
        * Configurations/WebKit.xcconfig:

2014-10-30  Anders Carlsson  <andersca@apple.com>

        Try to fix the iOS build.

        * WebProcess/WebPage/WebPage.messages.in:

2014-10-30  Tim Horton  <timothy_horton@apple.com>

        Long spins under rangeExpandedAroundPosition on Yahoo Mail
        https://bugs.webkit.org/show_bug.cgi?id=138223
        <rdar://problem/18819547>

        Reviewed by Enrica Casucci.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::rangeExpandedAroundPositionByCharacters):
        Reimplement rangeExpandedAroundPosition to operate on characters instead of lines,
        and to use Position. Moving VisiblePositions by line can be very expensive in some cases,
        and for generating lookup/Data Detectors context, we don't care about that kind of precision.
        This makes this function ~1000x faster when it hits on a row in the Yahoo Mail message list.

        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::scanForDataDetectedItems):
        Adopt the new rangeExpandedAroundPositionByCharacters, expanding 250 characters
        before and after, which roughly matches what we were usually getting going by line,
        and is a reasonable amount of context for these operations.

2014-10-30  Brady Eidson  <beidson@apple.com>

        IndexedDB is deleting data when a PK is shared amongst two objectStores
        rdar://problem/18479306 and https://bugs.webkit.org/show_bug.cgi?id=137154

        Reviewed by Jer Noble.

        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::v1RecordsTableSchema): Store away the v1 schema for introspection into the database.
        (WebKit::v2RecordsTableSchema): Add utility methods to get the v2 schema with different Table names.
        (WebKit::createOrMigrateRecordsTableIfNecessary): Check to see if the Records table exists with
          the correct schema. If it is the v1 schema, then migrate the data to a new v2 table, drop the v1
          table, then slide the new table into place.
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::ensureValidRecordsTable): Make sure the Records table
          exists and is v2, and then make sure the uniqueness index exists.
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createAndPopulateInitialMetadata): Don’t bother creating
          the Records table here as it will have already been established earlier.
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::getOrEstablishMetadata):
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h:

2014-10-30  Beth Dakin  <bdakin@apple.com>

        Implement action menus for text
        https://bugs.webkit.org/show_bug.cgi?id=138220
        -and corresponding-
        rdar://problem/18742297

        Reviewed by Tim Horton.

        Two new types of actions for the two text actions.
        * Shared/API/c/WKActionMenuItemTypes.h:

        One new type of menu.
        * Shared/API/c/WKActionMenuTypes.h:

        Pass willOpenMenu on to the WKActionMenuController.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView willOpenMenu:withEvent:]):

        Two new WebPageProxy functions that will pass messages along to the web process.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::selectLookupTextAtLocation):
        * UIProcess/WebPageProxy.h:

        At willOpenMenu time, text menus should select text so that it is clear what the 
        menu actions will apply to.
        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:

        Menu items for text menus.
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        (-[WKActionMenuController _defaultMenuItemsForText]):
        (-[WKActionMenuController _copyText:]):
        (-[WKActionMenuController _lookupText:]):
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        (imageForResource:name::if):

        New messages to the web process.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

        Re-factor performDictionaryLookupAtLocation() to re-use the code that finds the 
        Range for the dictionary lookup. That code now lives in 
        rangeForDictionaryLookupAtHitTestResult() and can be used by 
        performDictionaryLookupAtLocation() and our new function 
        selectLookupTextAtLocation().
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::rangeForDictionaryLookupAtHitTestResult):
        (WebKit::WebPage::performDictionaryLookupAtLocation):

        Since the action menu text is always selected, when the lookup action is chosen, 
        we can just lookup the current selection.
        (WebKit::WebPage::performDictionaryLookupOfCurrentSelection):

        Uses the new function rangeForDictionaryLookupAtHitTestResult() to get a lookup 
        range and then select it.
        (WebKit::WebPage::selectLookupTextAtLocation):

2014-10-30  Dan Bernstein  <mitz@apple.com>

        When a client certificate is rejected, Safari says the website didn’t accept the certificate “unknown” instead of naming the certificate
        https://bugs.webkit.org/show_bug.cgi?id=138216

        Reviewed by Alexey Proskuryakov.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::typeFromCFTypeRef): Remove no-longer-necessary platform guards around SecIdentityRef.
        (IPC::encode): Ditto.
        (IPC::decode): Ditto.
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData): If NSErrorClientCertificateChainKey
        is present in the error’s userInfo dictionary, assert that it’s an array of identities and
        certificates, and include it in the filtered dictionary.

2014-10-29  Hunseop Jeong  <hs85.jeong@samsung.com>

        [CoordinatedGraphics] Use modern for-loops
        https://bugs.webkit.org/show_bug.cgi?id=138168

        Reviewed by Andreas Kling.

        No new tests as there is no change in functionality.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp: Use a modern for loop.
        (WebCore::CoordinatedBackingStore::texture):
        (WebCore::CoordinatedBackingStore::paintTilesToTextureMapper):
        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp: Use a modern for loop.
        (WebKit::CoordinatedDrawingAreaProxy::incorporateUpdate):
        * UIProcess/CoordinatedGraphics/CoordinatedGraphicsScene.cpp: Use a modern for loop.
        (WebCore::CoordinatedGraphicsScene::setLayerChildrenIfNeeded):
        (WebCore::CoordinatedGraphicsScene::createLayers): changed the name of argument to be equal with deleteLayer(). 
        (WebCore::CoordinatedGraphicsScene::deleteLayers):
        (WebCore::CoordinatedGraphicsScene::createTilesIfNeeded):
        (WebCore::CoordinatedGraphicsScene::removeTilesIfNeeded):
        (WebCore::CoordinatedGraphicsScene::updateTilesIfNeeded):
        (WebCore::CoordinatedGraphicsScene::syncUpdateAtlases):
        (WebCore::CoordinatedGraphicsScene::syncImageBackings):
        (WebCore::CoordinatedGraphicsScene::commitSceneState):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp: Use a modern for loop.
        (WebKit::shouldPaintBoundsRect):
        (WebKit::CoordinatedDrawingArea::display):

2014-10-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r175349.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::didRemoveItem): Use PLATFORM(COCOA) for setSnapshot().

2014-10-29  Tim Horton  <timothy_horton@apple.com>

        Null deref under performActionMenuHitTestAtLocation
        https://bugs.webkit.org/show_bug.cgi?id=138197
        <rdar://problem/18817803>

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::scanForDataDetectedItems):
        Null-check the expanded range.

2014-10-28  Ada Chan  <adachan@apple.com>

        Implement WKPageSetMuted(bool).
        https://bugs.webkit.org/show_bug.cgi?id=138158

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMuted):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMuted):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setMuted):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-10-29  Anders Carlsson  <andersca@apple.com>

        Clear ViewSnapshots when back/forward list items are removed from their list
        https://bugs.webkit.org/show_bug.cgi?id=138188
        <rdar://problem/18817001>

        Reviewed by Tim Horton.

        Ideally we should remove the WebBackForwardListItem objects as well, but this is a somewhat safer fix.

        Change all the "remove item" codepaths to call WebBackForwardList::didRemoveItem and have it clear out the snapshot.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::pageClosed):
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::removeAllItems):
        (WebKit::WebBackForwardList::clear):
        (WebKit::WebBackForwardList::didRemoveItem):
        * UIProcess/WebBackForwardList.h:

2014-10-29  Tim Horton  <timothy_horton@apple.com>

        Hide the 'Add to Photos' item if it isn't available
        https://bugs.webkit.org/show_bug.cgi?id=138182
        <rdar://problem/18814999>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForImage]):
        (-[WKActionMenuController _canAddImageToPhotos]):
        (-[WKActionMenuController _addImageToPhotos:]):
        Factor _canAddImageToPhotos out of _addImageToPhotos:, and use it in
        _defaultMenuItemsForImage to avoid including the menu item in the first place.

2014-10-29  Tim Horton  <timothy_horton@apple.com>

        Rename WebPageProxy::activeActionMenuHitTestResult to lastMouseMoveHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=138137
        <rdar://problem/18798257>

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::lastMouseMoveHitTestResult):
        (WebKit::WebPageProxy::activeActionMenuHitTestResult): Deleted.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForLink]):
        (-[WKActionMenuController _openURLFromActionMenu:]):
        (-[WKActionMenuController _addToReadingListFromActionMenu:]):
        (-[WKActionMenuController _quickLookURLFromActionMenu:]):
        (-[WKActionMenuController _saveImageToDownloads:]):
        (imageForResource:name::if):
        (-[WKActionMenuController _updateActionMenuItems]):
        Rename to the more accurate and general name.

2014-10-29  Tim Horton  <timothy_horton@apple.com>

        Implement action menus for data detected items
        https://bugs.webkit.org/show_bug.cgi?id=138178
        <rdar://problem/18709436>

        Reviewed by Anders Carlsson.

        * Shared/API/c/WKActionMenuTypes.h:
        Add a new type.

        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::Data):
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h:
        (WebKit::WebHitTestResult::isTextNode):
        Determine, store, encode, and decode whether or not the hit node is a text node.

        * Shared/mac/ActionMenuHitTestResult.h:
        * Shared/mac/ActionMenuHitTestResult.mm: Renamed from Source/WebKit2/Shared/mac/ActionMenuHitTestResult.cpp.
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):
        Make ActionMenuHitTestResult an Obj-C++ file.
        Store, encode, and decode (securely!) a DDActionContext and FloatRect
        representing the bounding box of the data detected item, if any.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):
        (-[WKView willOpenMenu:withEvent:]): Deleted.
        Stop using willOpenMenu; we'll use NSMenuDelegate's menuNeedsUpdate: instead.
        Hook up WKActionMenuController as our action menu's delegate.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        Call _updateActionMenuItems *after* we've adjusted _state, so that it
        can depend on the value being correct.

        (-[WKActionMenuController willOpenMenu:withEvent:]):
        (-[WKActionMenuController didPerformActionMenuHitTest:]):
        Move menu updating to menuNeedsUpdate for more accurate timing.

        (_updateActionMenuItems):
        When building the menu, if we have a text node that is not a link,
        and hit a data detected item, retrieve the menu from the DDActionContext.
        If we have nothing, make sure to reset _type, and if the final hit-test
        is still pending, build a menu with a dummy item.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performActionMenuHitTestAtLocation): Moved to WebPageMac.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::rangeExpandedAroundPosition):
        Factor this out of performDictionaryLookupAtLocation.

        (WebKit::WebPage::performDictionaryLookupAtLocation):
        Make use of rangeExpandedAroundPosition.

        (WebKit::scanForDataDetectedItems):
        Expand to four lines of context around the hit point.
        Convert that range to plain text, and feed it to DataDetectors.
        Find the result that intersects the hit point, and make a DDActionContext
        for it. Also, store the bounding box of the first quad of the detected
        text, to provide to Data Detectors as a hint for UI placement.

        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        If the hit node is a text node, call scanForDataDetectedItems and
        store the resultant DDActionContext and bounding rect on our
        ActionMenuHitTestResult for transfer to the UI process.

2014-10-29  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] iPad: Occasional <select> crashes attempting to scroll to non-existing row 0 in viewWillAppear
        https://bugs.webkit.org/show_bug.cgi?id=138165

        Reviewed by David Kilzer.

        This is a speculative fix for a crash attempting to scroll to a row in a
        select picker on iPad. In these cases we are trying to scroll to the first
        row of the first section, but no such row appears to exist. I was unable
        to reproduce the issue, but if it is happening we should be able to protect
        safely protect against crashing.

        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController viewWillAppear:]):
        Protect against trying to scroll to a section/row that does not exist
        by pre-checking that the section/row is valid.

2014-10-28  Ting-Wei Lan  <lantw44@gmail.com>

        Cast std::chrono::duration.count() to int64_t in ArgumentCoder
        https://bugs.webkit.org/show_bug.cgi?id=136981

        Reviewed by Alexey Proskuryakov.

        Explicitly cast the return value of std::chrono::duration.count() to
        a fixed-size interger type, which prevents compilation error when
        the return value type matches neither int32_t nor int64_t.

        * Platform/IPC/ArgumentCoders.h:

2014-10-28  Jer Noble  <jer.noble@apple.com>

        [EME] Pass location for media key storage through from WebKit/WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=137120

        Reviewed by Anders Carlsson.

        Allow the location for media key storage to be passed into the WebProcess from the UIProcess
        through the WebContextConfiguraiton struct.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Add mediaKeysStorageDirectory.
        (WebKit::WebProcessCreationParameters::decode): Ditto.
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCopyMediaKeysStorageDirectory): Added getter.
        (WKContextConfigurationSetMediaKeysStorageDirectory): Added setter.
        * UIProcess/API/C/WKContextConfigurationRef.h:
        * UIProcess/API/C/WKOriginDataManager.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _initWithConfiguration:]): Provide a default location.
        * UIProcess/APIContextConfiguration.cpp:
        (API::ContextConfiguration::webContextConfiguration): Set mediaKeysStorageDirectory.
        * UIProcess/APIContextConfiguration.h:
        (API::ContextConfiguration::mediaKeysStorageDirectory): Added getter.
        (API::ContextConfiguration::setMediaKeysStorageDirectory): Added setter.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::applyPlatformSpecificConfigurationDefaults): Apply mediaKeysStorageDirectory.
        (WebKit::WebContext::WebContext): Initialize m_mediaKeysStorageDirectory.
        (WebKit::WebContext::createNewWebProcess): Create a sandbox extension handle for mediaKeysStorageDirectory.
        * UIProcess/WebContext.h:
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultMediaKeysStorageDirectory): Return a default location.
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultMediaKeysStorageDirectory): Ditto.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultMediaKeysStorageDirectory): Return an overridable default location.
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp: Added.
        (WebKit::WebMediaKeyStorageManager::initialize): Pull the mediaKeysStorageDirectory out of configuration.
        (WebKit::WebMediaKeyStorageManager::supplementName): Return a configuration name.
        (WebKit::WebMediaKeyStorageManager::mediaKeyStorageDirectoryForOrigin): Return the
            correct storage directory based on the SecureOrigin.
        (WebKit::WebMediaKeyStorageManager::getMediaKeyOrigins): Return the origins within the
            storage directory.
        (WebKit::removeAllMediaKeyStorageForOriginPath): Static, remove contents and directory at path.
        (WebKit::WebMediaKeyStorageManager::deleteMediaKeyEntriesForOrigin): Use
            removeAllMediaKeyStorageForOriginPath to remove origin data.
        (WebKit::WebMediaKeyStorageManager::deleteMediaKeyEntriesModifiedBetweenDates): Ditto.
        (WebKit::WebMediaKeyStorageManager::deleteAllMediaKeyEntries): Ditto.
        * WebProcess/MediaCache/WebMediaKeyStorageManager.h: Added.
        (WebKit::WebMediaKeyStorageManager::WebMediaKeyStorageManager): Default constructor.
        (WebKit::WebMediaKeyStorageManager::~WebMediaKeyStorageManager): Default virtual destructor.
        (WebKit::WebMediaKeyStorageManager::mediaKeyStorageDirectory): Simple accessor.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Add WebMediaKeyStorageManager as a supplement.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Create a sandbox extension from the sandbox extension handle.

        Add new source files to project(s).

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
        (WebKit::WebMediaKeyStorageManager::getMediaKeyOrigins):
        (WebKit::removeAllMediaKeyStorageForOriginPath):

        Drive-by fix: references to VoidCallback are ambiguous, since the same name is re-used in multiple namespaces.
        Make references to WebCore::VoidCallback explicit where the entire WebCore (and other) namespaces are pulled in.

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::startRequest):
        (WebKit::NotificationPermissionRequestManager::didReceiveNotificationPermissionDecision):
        * WebProcess/WebCoreSupport/WebNotificationClient.cpp:
        (WebKit::WebNotificationClient::requestPermission):

2014-10-28  Jeremy Jones  <jeremyj@apple.com>

        Add optimized fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=138044

        Reviewed by Anders Carlsson.

        Enable different types of fullscreen video behavior.
        Add an enum parameter to enterVideoFullscreenForVideoElement for alternate types of fullscreen.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h: Add fullscreenType parameter
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: ditto
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): ditto
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::enterVideoFullscreenForVideoElement): ditto
        * WebProcess/WebCoreSupport/WebChromeClient.h: ditto
        * WebProcess/ios/WebVideoFullscreenManager.h: ditto
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::enterVideoFullscreenForVideoElement): ditto
        (WebKit::WebVideoFullscreenManager::didCleanupFullscreen): ditto

2014-10-28  Dan Bernstein  <mitz@apple.com>

        Added a Radar reference to a comment.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<Credential>::encodePlatformData):

2014-10-28  Dan Bernstein  <mitz@apple.com>

        [Cocoa] REGERESSION (r171801): Client certificate authentication is failing
        https://bugs.webkit.org/show_bug.cgi?id=138144

        Reviewed by Alexey Proskuryakov.

        NSURLCredential’s implementation of NSSecureCoding fails to encode identity-based
        credentials properly. Work around that by encoding the identity, certificate, and
        persistence individually.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<Credential>::encodePlatformData):
        (IPC::ArgumentCoder<Credential>::decodePlatformData):

2014-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] iPhone should not allow selecting <optgroup> in <select multiple>
        https://bugs.webkit.org/show_bug.cgi?id=137991

        Reviewed by Darin Adler.

        We seem to be getting the delegate when we are not supposed to.
        Workaround the issue as best we can by reseting the styles
        for the group's content view and not changing selections.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKMultipleSelectPicker pickerView:row:column:checked:]):

2014-10-28  Tim Horton  <timothy_horton@apple.com>

        Remove an inaccurate comment in WKActionMenuController
        https://bugs.webkit.org/show_bug.cgi?id=138135

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForLink]):
        The comment is wrong; the separator is there for spacing, not just as a workaround.

2014-10-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update OptionsGTK.cmake and NEWS for 2.7.1 release.

        * gtk/NEWS: Add release notes for 2.7.1.

2014-10-28  Dan Bernstein  <mitz@apple.com>

        [Mac] OS X Mavericks build broken with public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138108

        Reviewed by Mark Rowe.

        * Shared/API/Cocoa/WKFoundation.h: Only define the NSEventModifierFlags type when using a
        version of the OS X SDK that doesn’t define it.

2014-10-27  Conrad Shultz  <conrad_shultz@apple.com>

        NSSharingService protocol conformance should be internal to WKActionMenuController
        https://bugs.webkit.org/show_bug.cgi?id=138112

        Reviewed by Tim Horton.

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:
        Move protocol conformance from the interface to a class extension.

2014-10-27  Enrica Casucci  <enrica@apple.com>

        WebContent crash in WebKit::WebPage::expandedRangeFromHandle.
        https://bugs.webkit.org/show_bug.cgi?id=138023
        rdar://problem/18787412

        Reviewed by Ryosuke Niwa.

        We must change that we have a valid currentRange before trying
        to expand or contract.

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

2014-10-27  Alexey Proskuryakov  <ap@apple.com>

        http/tests/cookies/third-party-cookie-relaxing.html is flaky on bots
        https://bugs.webkit.org/show_bug.cgi?id=138098

        Reviewed by Anders Carlsson.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:
        Update for the new name of testing session. Memory regions are now of the form
        "WebKit Test-<pid>-0".

2014-10-27  Chris Dumez  <cdumez@apple.com>

        Use separate HashMaps for common and uncommon headers in HTTPHeaderMap
        https://bugs.webkit.org/show_bug.cgi?id=138079

        Reviewed by Anders Carlsson.

        Update the WK2 IPC HTTPHeaderMap serialization / deserialization code
        to leverage the fact that HTTPHeaderMap now stores common HTTP headers
        and uncommon one in separate HashMaps. This speeds up deserialization
        as we no longer need to call findHTTPHeaderName() for every decoded
        header. We already know if the header is a common one or not, and if
        it is then we already have a HTTPHeaderName type instead of a String.

        I see that we spend ~40% less time in HTTPHeaderMap decoding when
        loading http://flickr.com/explore, while the encoding takes about
        the same amount of time as before.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<HTTPHeaderMap>::encode):
        (IPC::ArgumentCoder<HTTPHeaderMap>::decode):

2014-10-24  Benjamin Poulain  <bpoulain@apple.com>

        Fix the iOS build

        * Configurations/WebKit.xcconfig:

2014-10-24  Beth Dakin  <bdakin@apple.com>

        _actionMenuItemsForHitTestResult should also take a type indicating what the menu 
        was built for
        https://bugs.webkit.org/show_bug.cgi?id=138063

        Reviewed by Dan Bernstein.

        New type enum that can be used by clients.
        * Shared/API/c/WKActionMenuTypes.h: Added.

        Remove the old SPI and add the new.
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _actionMenuItemsForHitTestResult:withType:defaultActionMenuItems:]):
        (-[WKView _actionMenuItemsForHitTestResult:defaultActionMenuItems:]): Deleted.

        Now keep an ivar for the type.
        * UIProcess/mac/WKActionMenuController.h:

        Create a category for the old SPI so that we can still call it if clients have 
        implemented it.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController initWithPage:view:]):
        (-[WKActionMenuController didCloseMenu:withEvent:]):
        (imageForResource:name::if):
        (-[WKActionMenuController _updateActionMenuItems]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-10-24  Tim Horton  <timothy_horton@apple.com>

        Share sheet doesn't attach to the window
        https://bugs.webkit.org/show_bug.cgi?id=138062
        <rdar://problem/18767397>

        Reviewed by Beth Dakin.

        * UIProcess/mac/WKActionMenuController.h:
        WKActionMenuController is now a NSSharingService{Picker}Delegate.

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItemsForImage]):
        Set us up as the NSSharingServicePicker delegate.

        (-[WKActionMenuController sharingServicePicker:delegateForSharingService:]):
        Set us up as the NSSharingService delegate.

        (-[WKActionMenuController sharingService:sourceWindowForShareItems:sharingContentScope:]):
        Return the appropriate window to attach to.

2014-10-24  Jer Noble  <jer.noble@apple.com>

        Abstractify WebOriginDataManager to support arbitrary ChildProcess supplements.
        https://bugs.webkit.org/show_bug.cgi?id=137993

        Reviewed by Brady Eidson.

        To allow different ChildProcess subclasses to handle listing and deletion of origin
        data, make WebOriginDataManager more generic by having a supplement implement the
        details, leaving WebOriginDataManager to deal with cross-process messaging.

        De-virtualize AsyncTask, allowing a task to be created by passing in a
        function<void()>, rather than an object, method, and arguments.

        * Shared/AsyncTask.h:
        (WebKit::AsyncTask::AsyncTask):
        (WebKit::AsyncTask::performTask):
        (WebKit::AsyncTask::~AsyncTask): Deleted.

        Add a new virtual base class, to be implemented by various ChildProcesses, which
        WebOriginDataManager will use to implement listing and deletion requests.

        * WebProcess/OriginData/WebOriginDataManager.h:
        * WebProcess/OriginData/WebOriginDataManagerSupplement.h: Added.
        (WebKit::WebOriginDataManagerSupplement::WebOriginDataManagerSupplement):
        (WebKit::WebOriginDataManagerSupplement::~WebOriginDataManagerSupplement):
        (WebKit::WebOriginDataManagerSupplement::getOrigins):
        (WebKit::WebOriginDataManagerSupplement::deleteEntriesForOrigin):
        (WebKit::WebOriginDataManagerSupplement::deleteEntriesModifiedBetweenDates):
        (WebKit::WebOriginDataManagerSupplement::deleteAllEntries):
        * WebKit2.xcodeproj/project.pbxproj:

        WebOriginDataManager doesn't need to be a ChildSupplement. Remove the DatabaseProcess-
        specific implementations for its message handlers and replace with clean, generic calls
        to its supplement. Because these supplements may want to respond to the request
        asynchronously, pass a completion function in to be called by the supplement once its
        work is complete.

        * WebProcess/OriginData/WebOriginDataManager.cpp:
        (WebKit::WebOriginDataManager::WebOriginDataManager):
        (WebKit::WebOriginDataManager::getOrigins):
        (WebKit::WebOriginDataManager::deleteEntriesForOrigin):
        (WebKit::WebOriginDataManager::deleteEntriesModifiedBetweenDates):
        (WebKit::WebOriginDataManager::deleteAllEntries):
        (WebKit::WebOriginDataManager::supplementName): Deleted.

        DatabaseProcess already uses WebOriginDataManager, so it will be the first process
        to fall under the heel of the new regime. DatabaseProcess will subclass
        WebOriginDataManagerSupplement, and pass itself in twice to the WebOriginDataManager
        constructor. Create a lambda-based AsyncTask for each request, and call the completion
        function when each request is complete.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::DatabaseProcess):
        (WebKit::DatabaseProcess::getIndexedDatabaseOrigins):
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesForOrigin):
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesModifiedBetweenDates):
        (WebKit::DatabaseProcess::deleteAllIndexedDatabaseEntries):
        (WebKit::DatabaseProcess::getOrigins):
        (WebKit::DatabaseProcess::deleteEntriesForOrigin):
        (WebKit::DatabaseProcess::deleteEntriesModifiedBetweenDates):
        (WebKit::DatabaseProcess::deleteAllEntries):
        (WebKit::DatabaseProcess::doGetIndexedDatabaseOrigins): Deleted.
        (WebKit::DatabaseProcess::doDeleteIndexedDatabaseEntriesForOrigin): Deleted.
        (WebKit::DatabaseProcess::doDeleteIndexedDatabaseEntriesModifiedBetweenDates): Deleted.
        (WebKit::DatabaseProcess::doDeleteAllIndexedDatabaseEntries): Deleted.
        * DatabaseProcess/DatabaseProcess.h:

2014-10-24  Beth Dakin  <bdakin@apple.com>

        Very large images crash in action menu code
        https://bugs.webkit.org/show_bug.cgi?id=138059
        -and corresponding-
        rdar://problem/18767859

        Reviewed by Tim Horton.

        If the HitTestResult failed to create and image, then don’t go for the image 
        action menu.
        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController _defaultMenuItems]):

        ShareableBitmap::createShareable() can fail. The result needs to be null-checked.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):

2014-10-24  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:

2014-10-24  Tim Horton  <timothy_horton@apple.com>

        Blindly try to fix all the builds.

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:

2014-10-24  Timothy Horton  <timothy_horton@apple.com>

        Blindly try to fix all the builds.

        * UIProcess/mac/WKActionMenuController.h:

2014-10-24  Timothy Horton  <timothy_horton@apple.com>

        Blindly try to fix the 32-bit build.

        * UIProcess/mac/WKActionMenuController.h:
        * UIProcess/mac/WKActionMenuController.mm:

2014-10-24  Tim Horton  <timothy_horton@apple.com>

        [Mac][WebKit2] Move action menu code into its own file
        https://bugs.webkit.org/show_bug.cgi?id=138034
        <rdar://problem/18758758>

        * UIProcess/mac/WKActionMenuController.mm:
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        (-[WKActionMenuController _addImageToPhotos:]):
        Review comments that were not previously addressed.

2014-10-24  Tim Horton  <timothy_horton@apple.com>

        [Mac][WebKit2] Move action menu code into its own file
        https://bugs.webkit.org/show_bug.cgi?id=138034
        <rdar://problem/18758758>

        Reviewed by Dan Bernstein.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):
        Make a WKActionMenuController if needed.

        (-[WKView prepareForMenu:withEvent:]):
        (-[WKView willOpenMenu:withEvent:]):
        (-[WKView didCloseMenu:withEvent:]):
        (-[WKView _didPerformActionMenuHitTest:]):
        Forward these to WKActionMenuController.

        (-[WKView _openURLFromActionMenu:]): Deleted.
        (-[WKView _addToReadingListFromActionMenu:]): Deleted.
        (-[WKView _quickLookURLFromActionMenu:]): Deleted.
        (-[WKView _createActionMenuItemForTag:]): Deleted.
        (webKitBundleImageNamed): Deleted.
        (-[WKView _copyImage:]): Deleted.
        (-[WKView _saveImageToDownloads:]): Deleted.
        (temporaryPhotosDirectoryPath): Deleted.
        (pathToPhotoOnDisk): Deleted.
        (-[WKView _addImageToPhotos:]): Deleted.
        (-[WKView _defaultMenuItemsForImage]): Deleted.
        (-[WKView _defaultMenuItems]): Deleted.
        (-[WKView _updateActionMenu]): Deleted.
        Moved to WKActionMenuController.

        * UIProcess/mac/WKActionMenuController.h: Added.
        * UIProcess/mac/WKActionMenuController.mm: Added.
        (-[WKActionMenuController initWithPage:view:]):
        (-[WKActionMenuController prepareForMenu:withEvent:]):
        (-[WKActionMenuController willOpenMenu:withEvent:]):
        (-[WKActionMenuController didCloseMenu:withEvent:]):
        (-[WKActionMenuController didPerformActionMenuHitTest:]):
        (-[WKActionMenuController _defaultMenuItemsForLink]):
        (-[WKActionMenuController _openURLFromActionMenu:]):
        (-[WKActionMenuController _addToReadingListFromActionMenu:]):
        (-[WKActionMenuController _quickLookURLFromActionMenu:]):
        (-[WKActionMenuController _defaultMenuItemsForImage]):
        (-[WKActionMenuController _copyImage:]):
        (-[WKActionMenuController _saveImageToDownloads:]):
        (temporaryPhotosDirectoryPath):
        (pathToPhotoOnDisk):
        (-[WKActionMenuController _addImageToPhotos:]):
        (-[WKActionMenuController _createActionMenuItemForTag:]):
        (webKitBundleImageNamed):
        (imageForResource:name::if):
        (-[WKActionMenuController _updateActionMenuItems]):
        Moved from WKView.

        * WebKit2.xcodeproj/project.pbxproj:

2014-10-24  Marcos Chavarría Teijeiro  <chavarria1991@gmail.com>

        [GTK] Implement is_selected method on WebKitHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=137110

        Reviewed by Tim Horton.

        Expose CONTEXT_SELECTION for WebKitHitTestResult.

        * Shared/WebHitTestResult.cpp: Add is_selected field and getter for this field.
        (WebKit::WebHitTestResult::Data::Data):
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h:
        (WebKit::WebHitTestResult::isSelected):
        * UIProcess/API/gtk/WebKitHitTestResult.cpp: Add WEBKIT_HIT_TEST_RESULT_CONTEXT_SELECTION context and method to check it.
        (webkitHitTestResultCreate):
        (webkitHitTestResultCompare):
        (webkit_hit_test_result_context_is_selection):
        * UIProcess/API/gtk/WebKitHitTestResult.h:
        * UIProcess/API/gtk/WebKitWebView.cpp: Modify context-menu callback to set the new context option.
        (webkitWebViewPopulateContextMenu):
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add documentation about new function.

2014-10-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Cairo] Remove GTK dependency of WidgetBackingStoreGtkX11
        https://bugs.webkit.org/show_bug.cgi?id=138004

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/BackingStore.h: Rename m_backingStore as m_backend,
        since it's a bit confusing that a BackingStore class has a
        m_backingStore member and WidgetBackingStore has been renamed as
        BackingStoreBackendCairo.
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::createBackend): Helper function to create
        the BackingStore backend depending on the platform.
        (WebKit::BackingStore::paint): Use m_backend instead of m_backingStore.
        (WebKit::BackingStore::incorporateUpdate): Ditto.
        (WebKit::BackingStore::scroll): Ditto.
        (WebKit::createBackingStoreForGTK): Deleted.

2014-10-23  Benjamin Poulain  <bpoulain@apple.com>

        Fix a bad find-and-replace in r175153

        Looks like I messed up the commit on landing.

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

2014-10-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS WK2] If a page has the exact same VisibleContentRect as the page before, its VisibleContentRectUpdate can be ignored
        https://bugs.webkit.org/show_bug.cgi?id=138031
        rdar://problem/18739335

        Reviewed by Simon Fraser.

        Since any VisibleContentRectUpdate is costly for the WebProcess, we avoid sending updates
        if none of the important parameters have changed (scale and geometry).

        One unintended side effect is that the update of a page can be blocked if the parameters
        of the previous page were identical.

        What happen is this:
        1) Page [A] sends its content rect update as needed. WebPageProxy saves the last update
           in m_lastVisibleContentRectUpdate and use that value to avoid useless updates.
        2) Page [B] load after page [A] and have the exact VisibleContentRect. When receiving the first
           layer tree commit after didCommitLoadForFrame, WKWebView sends its VisibleContentRect
           to WebPageProxy to synchronize the state of the WebProcess with what is on screen.
        3) Since the two VisibleContentRect update has the same value as the ones of page [A], WebPageProxy
           discards the update. The WebProcess has its initialization viewport and is not udpated until
           a major parameter changes (scale or position).

        In rdar://problem/18739335, the problem is the similar but with a different failure point:
        1) Everything above happened already.
        2) The layer tree transaction has a scrolling request. This is processed by WKWebView.
        3) Since the scrolling position is invalid, the request is ignored and we send the last
           VisibleContentRect to the WebProcess with WebPageProxy::resendLastVisibleContentRects().
        4) Since the VisibleContentRect was never updated after didCommitLoadForFrame, the one we send
           is for the previous page, which the web process correctly ignores.

        This patch solves the problem by nuking the cached m_lastVisibleContentRectUpdate before
        any valid VisibleContentRectUpdate for a new page.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):

2014-10-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide a way to have alternate inspector agents
        https://bugs.webkit.org/show_bug.cgi?id=137901

        Reviewed by Brian Burg.

        * Configurations/FeatureDefines.xcconfig:

2014-10-23  Tim Horton  <timothy_horton@apple.com>

        Add some SPI headers for NSExtension and NSSharingService{Picker}
        https://bugs.webkit.org/show_bug.cgi?id=138027

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        * UIProcess/mac/ServicesController.mm:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        Replace redefinitions with SPI header #imports.

2014-10-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS WK2] Make sure any dynamic viewport update schedules a layer tree commit
        https://bugs.webkit.org/show_bug.cgi?id=138021

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        Sometimes, the clients can do a dynamic viewport update but only change the minimum
        layout size (see rdar://problem/18755250).

        When that happens, it is possible to do the full state update without ever scheduling
        a layer tree commit. For example, if the new minimum layout height is only a few pixels
        smaller than the old value and the layout of the page is equal or larger than the old value,
        the layout is done without any side effect to the content (assuming a viewport configuration
        based on width).

        The contract with the client is that the next layer tree commit after a dynamic viewport update
        carries all the valid parameters for the new viewport size. Since the new layout never scheduled
        a layer tree commit, the UIProcess is just waiting for one, discarding all input.

        This patch solves the issue by explicitely scheduling a layer flush after updating all the layout
        and view parameters to their final values. In most cases, this makes no difference since a layer
        tree commit was already scheduled. In the rare cases where nothing was scheduled, scheduling
        the layer tree commit ensure we unlock the UIProcess.

2014-10-23  Ryosuke Niwa  <rniwa@webkit.org>

        WebContent crash in WebKit::WebPage::expandedRangeFromHandle
        https://bugs.webkit.org/show_bug.cgi?id=138023

        Reviewed by Enrica Casucci.

        The crashes are caused by rangeForBlockAtPoint returning a null Range.
        Exit early or continue if a range is null in various places.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::expandedRangeFromHandle): Continue looking for another point if the range returned by
        rangeForBlockAtPoint is null.
        (WebKit::WebPage::contractedRangeFromHandle): Ditto.
        (WebKit::WebPage::computeExpandAndShrinkThresholdsForHandle): Removed the FIXME now that Enrica has
        verified that this early exit added in r173788 is correct.

2014-10-23  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] iPhone unselecting items in <select multiple> shows incorrect values selected
        https://bugs.webkit.org/show_bug.cgi?id=137989

        Reviewed by Alexey Proskuryakov.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKMultipleSelectPicker pickerView:row:column:checked:]):
        The second argument is "allowsMultipleSelection" and should only be set
        when we are making a selection in a <select multiple>.

2014-10-23  Tim Horton  <timothy_horton@apple.com>

        Assertion failures in ImageKit soft linking
        https://bugs.webkit.org/show_bug.cgi?id=138009

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        Soft-link ImageKit correctly.
        ImageKit is inside the Quartz umbrella framework.

2014-10-23  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the build after <http://trac.webkit.org/changeset/175079>
        (https://bugs.webkit.org/show_bug.cgi?id=137995)

        Rubber-stamped by Anders Carlsson.

        Remove PageClientImpl::didPerformActionMenuHitTest() for iOS.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didPerformActionMenuHitTest): Deleted.

2014-10-23  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Fix build problem after r175098
        https://bugs.webkit.org/show_bug.cgi?id=138002

        Reviewed by Gyuyoung Kim.

        Add ECORE_X dependency to avoid linking problems while building unit tests.

        * PlatformEfl.cmake:

2014-10-23  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Set proper default value for WebPageAccessibilityObject
        https://bugs.webkit.org/show_bug.cgi?id=137951

        Reviewed by Csaba Osztrogonác.

        Initial value for WebPageAccessibilityObject should be nullptr.

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

2014-10-23  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Introduce EFL Accessibility in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=137819

        Reviewed by Gyuyoung Kim.

        EFL Accessibility provides an API that is used to notify clients that certain
        Accessibility events occur. Utilizing it makes WebKit-EFL coherent with EFL native
        accessibility approach.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/EwkView.h:
        (EwkView::webAccessibility):
        * UIProcess/API/efl/WebAccessibility.cpp: Added.
        (WebKit::WebAccessibility::WebAccessibility):
        (WebKit::WebAccessibility::~WebAccessibility):
        (WebKit::WebAccessibility::eventHandler):
        (WebKit::WebAccessibility::executeGestureAction):
        (WebKit::WebAccessibility::activate):
        (WebKit::WebAccessibility::read):
        (WebKit::WebAccessibility::readNext):
        (WebKit::WebAccessibility::readPrev):
        (WebKit::WebAccessibility::up):
        (WebKit::WebAccessibility::down):
        (WebKit::WebAccessibility::scroll):
        (WebKit::WebAccessibility::mouse):
        (WebKit::WebAccessibility::enable):
        (WebKit::WebAccessibility::disable):
        * UIProcess/API/efl/WebAccessibility.h: Added.
        (WebKit::WebAccessibility::activateAction):
        (WebKit::WebAccessibility::nextAction):
        (WebKit::WebAccessibility::prevAction):
        (WebKit::WebAccessibility::readAction):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_accessibility_action_activate_get):
        (ewk_view_accessibility_action_next_get):
        (ewk_view_accessibility_action_prev_get):
        (ewk_view_accessibility_action_read_by_point_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_accessibility.cpp: Added.
        (EWK2Accessibility::xwindow):
        (TEST_F):
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::accessibilityObjectReadByPoint):
        (WebKit::WebPageProxy::accessibilityObjectReadPrevious):
        (WebKit::WebPageProxy::accessibilityObjectReadNext):

2014-10-22  Benjamin Poulain  <bpoulain@apple.com>

        [iOS WK2] Protect WKWebView dynamic viewport change against empty sizes
        https://bugs.webkit.org/show_bug.cgi?id=137988
        rdar://problem/17785162

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        The algorithm behind dynamic size update finds the best content area to put in the viewport
        after a viewport change. If an initial size or a target size is empty, it is impossible to
        compute a reasonable area to keep in the view. We end up handling NaN scales
        and/or sizes and CoreAnimation raises an exception when applying that value.

        This patch add early exits when that occurs and fallback to the common code.

        On Input, things are easy. If any of the initial values is empty, we just execute the updateBlock
        without attempting any of the dynamic behaviors.

        For the target values, things are trickier. We do not know what the values are going to be before we execute
        the block. But once we executed the block, we have already skipped all the setters that call the web process.

        To handle that, every value is set manually on WebPageProxy. This is a bit unfortunate because the setters
        get yet another entry point.

2014-10-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        EFL and GTK ports have broken since r175075
        https://bugs.webkit.org/show_bug.cgi?id=137995

        Unreviewed, EFL and GTK ports build fix.

        Need to use PLATFORM(MAC) guard for ActionMenuHitTest functions.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::removeNavigationGestureSnapshot):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-10-22  Tim Horton  <timothy_horton@apple.com>

        Add action menu support for images
        https://bugs.webkit.org/show_bug.cgi?id=137987
        <rdar://problem/18717767>

        Reviewed by Anders Carlsson, Sam Weinig, and Beth Dakin.

        * Resources/AddImageToPhotos.pdf: Added.
        * Resources/CopyImage.pdf: Added.
        * Resources/SaveImageToDownloads.pdf: Added.
        * Resources/ShareImage.pdf: Added.
        Add some temporary artwork.

        * Scripts/webkit/messages.py:
        (struct_or_class):
        ActionMenuHitTestResult is a struct.

        * Shared/API/c/WKActionMenuItemTypes.h:
        Add new items for image menus.

        * Shared/mac/ActionMenuHitTestResult.cpp:
        (WebKit::ActionMenuHitTestResult::encode):
        (WebKit::ActionMenuHitTestResult::decode):
        For now, pass the hit image data across to the UI process as a ShareableBitmap.

        * Shared/mac/ActionMenuHitTestResult.h:

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _createActionMenuItemForTag:]):
        Refactor action menu item creation into a single function, so that
        callers can share code and be much simpler.

        (webKitBundleImageNamed):
        Add a helper to acquire an image from the WebKit2 bundle.

        (-[WKView _copyImage:]):
        (-[WKView _saveImageToDownloads:]):
        (temporaryPhotosDirectoryPath):
        (pathToPhotoOnDisk):
        (-[WKView _addImageToPhotos:]):
        Add rudimentary implementations of image actions.

        (-[WKView _defaultMenuItemsForImage]):
        Support the image menu, plus a submenu acquired from NSSharingServicePicker
        for the Share menu.

        (-[WKView _defaultMenuItems]):
        Call _defaultMenuItemsForImage if needed.

        (-[WKView _updateActionMenu]):
        Refactor _updateActionMenu out of prepareForMenu:withEvent:.

        (-[WKView prepareForMenu:withEvent:]):
        Ask the Web process to re-hit-test under the location that the menu
        will appear. Mark the menu as pending.

        (-[WKView _didPerformActionMenuHitTest:]):
        When we get the hit test reply, record the result for future use.

        (-[WKView willOpenMenu:withEvent:]):
        If we got a hit test reply, rebuild the menu immediately. If not, wait
        up to 500ms for the reply to come in. This eventually needs to be
        cancellable if the menu is rejected in the interim.

        (-[WKView didCloseMenu:withEvent:]):
        Clear all state when the menu closes.

        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performActionMenuHitTestAtLocation):
        (WebKit::WebPageProxy::didPerformActionMenuHitTest):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformActionMenuHitTest):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Plumb didPerformActionMenuHitTest back from WebPageProxy to WKView.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performActionMenuHitTestAtLocation):
        Hit test at the given location, recording the image data if there is any,
        and return the result to the UI process.

        * WebKit2.xcodeproj/project.pbxproj:
        Add the PDFs.

2014-10-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove WidgetBackingStoreCairo::create() factory function
        https://bugs.webkit.org/show_bug.cgi?id=137943

        Reviewed by Darin Adler.

        WidgetBackingStoreCairo::create() can be replaced by std::make_unique<>.
        Thus this patch removes it, then use std::make_unique<>|std::unique_ptr<>.

        * UIProcess/BackingStore.h:
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::createBackingStoreForGTK):
        (WebKit::BackingStore::incorporateUpdate):

2014-10-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove TextCheckerEnchant::create() factory function
        https://bugs.webkit.org/show_bug.cgi?id=137944

        Reviewed by Darin Adler.

        TextCheckerEnchant::create() can be replaced by std::make_unique<> and std::unique_ptr<>.

        * UIProcess/API/gtk/WebKitTextChecker.cpp:
        (WebKitTextChecker::WebKitTextChecker):
        * UIProcess/API/gtk/WebKitTextChecker.h:
        * UIProcess/efl/TextCheckerClientEfl.cpp:
        (TextCheckerClientEfl::TextCheckerClientEfl):
        * UIProcess/efl/TextCheckerClientEfl.h:

2014-10-22  Antti Koivisto  <antti@apple.com>

        Revert fix for REGRESSION (r173356): Safari can't install a profile, gets 'Download Failed error
        (https://bugs.webkit.org/show_bug.cgi?id=137493)

        Turns out the root cause was a bug in MIME type sniffing, https://bugs.webkit.org/show_bug.cgi?id=137855

        Remove the workaround.

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::startWithHandle):
        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::startWithHandle):

2014-10-22  Beth Dakin  <bdakin@apple.com>

        Remove action menu web preference
        https://bugs.webkit.org/show_bug.cgi?id=137975

        Reviewed by Tim Horton.

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetActionMenuSupportEnabled): Deleted.
        (WKPreferencesGetActionMenuSupportEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):

2014-10-22  Chris Dumez  <cdumez@apple.com>

        [Mac][WK2] Fix applicationIsSafari() detection
        https://bugs.webkit.org/show_bug.cgi?id=137893

        Reviewed by Alexey Proskuryakov.

        Provide an implementation for FrameLoaderClient's new
        needsQuickLookResourceCachingQuirks(), which accesses the flag stored
        on the WebProcess, which is initialized upon WebProcess creation.

        QuickLookMac::computeNeedsQuickLookResourceCachingQuirks() is called
        on UIProcess side so that it works reliably and the flag is passed as
        parameter when constructing the WebProcess.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::needsQuickLookResourceCachingQuirks):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::needsQuickLookResourceCachingQuirks):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ debug build after r175046.

        Remove invalid ASSERT.

        * UIProcess/gtk/InputMethodFilter.cpp:
        (WebKit::InputMethodFilter::setCursorRect):

2014-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GtkInputMethodFilter from Platform to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=137884

        Reviewed by Gustavo Noronha Silva.

        Merge WebViewBaseInputMethodFilter and GtkInputMethodFilter into a
        single class InputMethodFilter. The code is mostly the same, but
        instead of having a setWebView method only to get the WebPageProxy,
        it has a setPage method that passes the WebPageProxy. The GtkIMContext
        client window is set by the WebView when it's realized/unrealized.

        * PlatformGTK.cmake:
        * Shared/NativeWebKeyboardEvent.h:
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseRealize):
        (webkitWebViewBaseUnrealize):
        (webkit_web_view_base_class_init):
        (webkitWebViewBaseCreateWebPage):
        (webkitWebViewBaseEnterFullScreen): Deleted.
        * UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp: Removed.
        * UIProcess/API/gtk/WebViewBaseInputMethodFilter.h: Removed.
        * UIProcess/gtk/InputMethodFilter.cpp: Added.
        (WebKit::InputMethodFilter::handleCommitCallback):
        (WebKit::InputMethodFilter::handlePreeditStartCallback):
        (WebKit::InputMethodFilter::handlePreeditChangedCallback):
        (WebKit::InputMethodFilter::handlePreeditEndCallback):
        (WebKit::InputMethodFilter::InputMethodFilter):
        (WebKit::InputMethodFilter::~InputMethodFilter):
        (WebKit::InputMethodFilter::setEnabled):
        (WebKit::InputMethodFilter::setCursorRect):
        (WebKit::InputMethodFilter::handleKeyboardEvent):
        (WebKit::InputMethodFilter::handleKeyboardEventWithCompositionResults):
        (WebKit::InputMethodFilter::filterKeyEvent):
        (WebKit::InputMethodFilter::confirmComposition):
        (WebKit::InputMethodFilter::updatePreedit):
        (WebKit::InputMethodFilter::notifyFocusedIn):
        (WebKit::InputMethodFilter::notifyFocusedOut):
        (WebKit::InputMethodFilter::notifyMouseButtonPress):
        (WebKit::InputMethodFilter::confirmCurrentComposition):
        (WebKit::InputMethodFilter::cancelContextComposition):
        (WebKit::InputMethodFilter::sendCompositionAndPreeditWithFakeKeyEvents):
        (WebKit::InputMethodFilter::handleCommit):
        (WebKit::InputMethodFilter::handlePreeditStart):
        (WebKit::InputMethodFilter::handlePreeditChanged):
        (WebKit::InputMethodFilter::handlePreeditEnd):
        (WebKit::InputMethodFilter::logHandleKeyboardEventForTesting):
        (WebKit::InputMethodFilter::logHandleKeyboardEventWithCompositionResultsForTesting):
        (WebKit::InputMethodFilter::logConfirmCompositionForTesting):
        (WebKit::InputMethodFilter::logSetPreeditForTesting):
        * UIProcess/gtk/InputMethodFilter.h: Added.
        (WebKit::InputMethodFilter::context):
        (WebKit::InputMethodFilter::setPage):
        (WebKit::InputMethodFilter::setTestingMode):
        (WebKit::InputMethodFilter::events):

2014-10-21  Tim Horton  <timothy_horton@apple.com>

        Quick Look preview bubble has unnecessary controls
        https://bugs.webkit.org/show_bug.cgi?id=137940
        <rdar://problem/18731860>

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _quickLookURLFromActionMenu:]):
        Temporarily use more SPI to allow us to hide the preview bubble's controls.

2014-10-21  Jeff Miller  <jeffm@apple.com>

        Remove const from WKURLRequestRef parameter to WKContextDownloadURLRequest()
        https://bugs.webkit.org/show_bug.cgi?id=137928

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextDownloadURLRequest):
        * UIProcess/API/C/WKContext.h:

2014-10-21  Anders Carlsson  <andersca@apple.com>

        WKRemoteObjectCoder should handle floats
        https://bugs.webkit.org/show_bug.cgi?id=137926
        <rdar://problem/18695126>

        Reviewed by Beth Dakin.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (encodeInvocation):
        (-[WKRemoteObjectEncoder encodeFloat:forKey:]):
        (decodeInvocationArguments):
        (-[WKRemoteObjectDecoder decodeFloatForKey:]):

2014-10-21  Jeff Miller  <jeffm@apple.com>

        WKContext needs to provide an API to resume a download
        https://bugs.webkit.org/show_bug.cgi?id=137507

        Reviewed by Darin Adler.

        This patch adds WKContextResumeDownload(), which is only supported on the Mac, and requires the
        resume data from WKDownloadGetResumeData().

        We have to create a sandbox extension for the partially downloaded file in the UI process so the
        network or web process can resume writing to it.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::resumeDownload):
        Added, calls through to DownloadManager::resumeDownload().

        * NetworkProcess/NetworkProcess.h:
        Added resumeDownload().

        * NetworkProcess/NetworkProcess.messages.in:
        Added ResumeDownload message.

        * Shared/Downloads/Download.h:
        Added resume().

        * Shared/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::resumeDownload):
        Added. The URL being downloaded is part of the opaque resumeData, so we can't specify it when the
        Download is constructed.

        * Shared/Downloads/DownloadManager.h:
        Added resumeDownload().

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::resume):
        Added, not implemented on this platform.

        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::resume):
        Added. Consumes the sandbox extension, resumes the download, and sets m_request after the
        NSURLDownload has been created. Note that we already have code to revoke the sandbox extension when
        the download is finished, canceled, or fails.

        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::resume):
        Added, not implemented on this platform.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextResumeDownload):
        Added.

        * UIProcess/API/C/WKContext.h:
        Added WKContextResumeDownload().

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::resumeDownload):
        Added. Creates a sandbox extension for the existing file and includes it in the message to the
        network or web process.

        * UIProcess/WebContext.h:
        Added resumeDownload().

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::resumeDownload):
        Added, calls through to DownloadManager::resumeDownload().

        * WebProcess/WebProcess.h:
        Added resumeDownload().

        * WebProcess/WebProcess.messages.in:
        Added ResumeDownload message.

2014-10-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        Change the default TLS errors policy to WEBKIT_TLS_ERRORS_POLICY_FAIL
        https://bugs.webkit.org/show_bug.cgi?id=137832

        Reviewed by Carlos Garcia Campos.

        Too many general-purpose browsers that really need this policy
        are not selecting it, so let's do so for them.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (createDefaultWebContext):

2014-10-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Disable SSLv3
        https://bugs.webkit.org/show_bug.cgi?id=137859

        Reviewed by Carlos Garcia Campos.

        Set G_TLS_GNUTLS_PRIORITY if unset.

        * NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp:
        (main):
        * WebProcess/EntryPoint/unix/WebProcessMain.cpp:
        (main):

2014-10-20  Chris Dumez  <cdumez@apple.com>

        ResourceRequest deserialization unnecessarily calls partitionName() on encoded cache partition
        https://bugs.webkit.org/show_bug.cgi?id=137797

        Reviewed by Darin Adler.

        This patch adds a |needsValidation| argument to
        ResourceRequest::setCachePartition() setter so that the caller can
        indicate that the partition name is valid (because it was already
        processed by partitionName() before). Use this new argument in
        ArgumentCoder<ResourceRequest>::decode() to spent a bit less time
        deserializing resource requests.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::decode):

2014-10-20  Beth Dakin  <bdakin@apple.com>

        Action menu items should have tags
        https://bugs.webkit.org/show_bug.cgi?id=137898

        Reviewed by Anders Carlsson.

        * Shared/API/c/WKActionMenuItemTypes.h: Added.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _defaultMenuItemsForLink]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-10-20  Beth Dakin  <bdakin@apple.com>

        Add support for action menus
        https://bugs.webkit.org/show_bug.cgi?id=137891
        rdar://problem/18451638
        rdar://problem/18694470

        Reviewed by Anders Carlsson.

        Temporary artwork needed for menu item.
        * Resources/OpenInNewWindowTemplate.pdf: Added.
        * WebKit2.xcodeproj/project.pbxproj:

        Add a preference that defaults to false for action menu support.
        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetActionMenuSupportEnabled):
        (WKPreferencesGetActionMenuSupportEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

        New SPI. WebKit clients can implement this method to customize the action menu.
        * UIProcess/API/Cocoa/WKViewPrivate.h:

        Create the action menu if it is supported.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):

        Methods to implement the default menu actions.
        (-[WKView _openURLFromActionMenu:]):
        (-[WKView _addToReadingListFromActionMenu:]):
        (-[WKView _quickLookURLFromActionMenu:]):

        Add action menus support for links. Populate the menu at the right time.
        (-[WKView _defaultMenuItemsForLink]):
        (-[WKView _defaultMenuItems]):
        (-[WKView prepareForMenu:withEvent:]):
        (-[WKView _actionMenuItemsForHitTestResult:defaultActionMenuItems:]):

        New member variable caches the HitTestResult on mouse move.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::mouseDidMoveOverElement):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::activeActionMenuHitTestResult):

2014-10-20  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Delay and white area when Web Inspector crashes
        https://bugs.webkit.org/show_bug.cgi?id=137230

        Reviewed by Anders Carlsson.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::processDidCrash): Added.
        (WebKit::WebInspectorProxy::eagerlyCreateInspectorPage): Hook up loader client.

2014-10-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Generate all Inspector domains together in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=137748

        Reviewed by Brian Burg.

        * PlatformGTK.cmake:

2014-10-19  Antti Koivisto  <antti@apple.com>

        Avoid unnecessary NSURLResponse construction for QuickLook on iOS
        https://bugs.webkit.org/show_bug.cgi?id=137876

        Reviewed by Andy Estes.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse):

            Switch to the modified QuickLookHandle interface that does not need NSURLResponse.

2014-10-16  Andy Estes  <aestes@apple.com>

        [iOS] Capture WKActionSheetAssistant's interaction with WKContentView in a @protocol
        https://bugs.webkit.org/show_bug.cgi?id=137792

        Reviewed by Tim Horton.

        WKPDFView would like to use WKActionSheetAssistant to show an action sheet when long-pressing a link, but it
        can't so long as WKActionSheetAssistant is tightly coupled to WKContentView. Resolve this by factoring
        WKActionSheetAssistant's interaction with WKContentView into a new protocol called
        WKActionSheetAssistantDelegate and having WKContentView conform to this protocol.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction elementActionWithTitle:actionHandler:]): Changed instances of WKContentView * to id <WKActionSheetAssistantDelegate>.
        (+[_WKElementAction elementActionWithType:customTitle:]): Ditto.
        (-[_WKElementAction _runActionWithElementInfo:delegate:]): Ditto.
        (copyElement): Deleted.
        (saveImage): Deleted.
        (-[_WKElementAction _runActionWithElementInfo:view:]): Deleted.
        * UIProcess/API/Cocoa/_WKElementActionInternal.h:
        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet init]): Renamed from initWithView: since WKActionSheet no longer needs to know about a view.
        (-[WKActionSheet _didRotateAndLayout]): Called -[WKActionSheetDelegate updatePositionInformation].
        (-[WKActionSheet initWithView:]): Deleted.
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant delegate]): Added a getter for the delegate property.
        (-[WKActionSheetAssistant setDelegate:]): Added a setter for the delegate property.
        (-[WKActionSheetAssistant initWithView:]): Changed argument type from WKContentView * to UIView *.
        (-[WKActionSheetAssistant initialPresentationRectInHostViewForSheet]): Returned CGRectZero if there is no delegate.
        Otherwise, retrieved positionInformation from the delegate.
        (-[WKActionSheetAssistant presentationRectInHostViewForSheet]): Ditto.
        (-[WKActionSheetAssistant updatePositionInformation]): Called -[WKActionSheetAssistantDelegate updatePositionInformation].
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]): Returned early if there is no delegate.
        Otherwise, retrieved positionInformation from the delegate.
        (-[WKActionSheetAssistant showImageSheet]): Ditto.
        (-[WKActionSheetAssistant showLinkSheet]): Ditto.
        (-[WKActionSheetAssistant showDataDetectorsSheet]): Ditto.
        (-[WKActionSheetAssistant cleanupSheet]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]): Installed self as WKActionSheetAssistant's delegate.
        (-[WKContentView updatePositionInformation]): Renamed from _updatePositionInformation.
        (-[WKContentView performAction:]): Renamed from _performAction:.
        (-[WKContentView openElementAtLocation:]): Called _attemptClickAtLocation:.
        (-[WKContentView actionsForElement:defaultActions:]): Called API::UIClient::actionsForElement().
        (-[WKContentView startInteractionWithElement:]): Called WebPageProxy::startInteractionWithElementAtPosition().
        (-[WKContentView stopInteraction]): Called WebPageProxy::stopInteraction().
        (-[WKContentView _updatePositionInformation]): Deleted.
        (-[WKContentView _performAction:]): Deleted.

2014-10-20  Carlos Garnacho  <carlosg@gnome.org>

        [GTK] Improve zooming gesture positioning
        https://bugs.webkit.org/show_bug.cgi?id=137822

        Reviewed by Carlos Garcia Campos.

        * UIProcess/WebPageProxy.h:
        * UIProcess/gtk/GestureController.cpp:
        (WebKit::GestureController::ZoomGesture::center):
        (WebKit::GestureController::ZoomGesture::begin):
        (WebKit::GestureController::ZoomGesture::handleZoom):
        (WebKit::GestureController::ZoomGesture::scaleChanged): Calculate
        the proper view coordinates for the current offset/scale, based
        on the initial gesture center point in document coordinates, and
        the current center/scale.
        * UIProcess/gtk/GestureController.h:
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getCenterForZoomGesture): Added. Synchronous
        call to retrieve the zoom gesture anchor point, in document coordinates.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Added stub.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::getCenterForZoomGesture): Added. Getter for the
        translated coordinates used as the anchor point of the zoom gesture.

2014-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove the factory method from DragAndDropHandler
        https://bugs.webkit.org/show_bug.cgi?id=137872

        Reviewed by Sergio Villar Senin.

        Make the constructor public and use std::make_unique instead.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDragAndDropHandler):
        * UIProcess/gtk/DragAndDropHandler.cpp:
        (WebKit::DragAndDropHandler::create): Deleted.
        * UIProcess/gtk/DragAndDropHandler.h:

2014-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add initial gestures support
        https://bugs.webkit.org/show_bug.cgi?id=137812

        Reviewed by Sergio Villar Senin.

        Now that GTK+ has support for gestures, we can use it to handle
        touch events and allow to scroll, zoom and tap with the fingers.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithTouchEvent): When the touch event
        hasn't been handled by the web process pass it to the
        GestureController and only fallback to pointer emulation when the
        GestureController doesn't handle the event.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseTouchEvent): If the GestureController is
        currently processing gestures is because the START touch event was
        not handled by the web process, so pass any successive touch
        events to the GestureController directly.
        (webkitWebViewBaseGestureController): Create the GestureController
        on demand and return a reference.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/GestureController.cpp: Added.
        (WebKit::GestureController::create): Create a GestureController.
        (WebKit::GestureController::GestureController): Initialize the
        Gesture memebers.
        (WebKit::GestureController::handleEvent): Pass the event to the gestures.
        (WebKit::GestureController::isProcessingGestures): Whether
        Gestures are active.
        (WebKit::GestureController::Gesture::Gesture): Base class for gestures.
        (WebKit::GestureController::Gesture::isActive): Whether the
        gesture is active.
        (WebKit::GestureController::Gesture::handleEvent): Pass the event
        to the GtkGesture to process it.
        (WebKit::GestureController::DragGesture::handleDrag): Send a wheel
        event corresponding to the drag gesture to the web process.
        (WebKit::GestureController::DragGesture::handleTap): Send move,
        press and release events corresponding to a tap gesture to the web process.
        (WebKit::GestureController::DragGesture::begin): Start a drag
        gesture and schedule a timer to discard tap gesture in case of
        long press.
        (WebKit::GestureController::DragGesture::update): If the actual
        drag hasn't started yet, check the drag threshold to decide
        whether to start the drag or not. Otherwise call handleDrag() to
        send the appropriate events to the web process.
        (WebKit::GestureController::DragGesture::end): If the drag gesture
        finishes and the drag didn't happen (it wasn't a long press and
        drag threshold was not reached), call handleTap() to emulate a
        click event.
        (WebKit::GestureController::DragGesture::DragGesture): Initialize
        the GtkGestureDrag.
        (WebKit::GestureController::ZoomGesture::begin): Save the current
        page scale factor and the center point of the gesture.
        (WebKit::GestureController::ZoomGesture::scaleChanged): Schedule a
        page scale change in an idle for the given scale value.
        (WebKit::GestureController::ZoomGesture::ZoomGesture): Initialize
        the GtkGestureZoom.
        * UIProcess/gtk/GestureController.h: Added.

2014-10-19  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for all remaining RenderObject subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137845

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for all remaining RenderObject subclasses and 
        clean up the surrounding code.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginProcessCrashed):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):

2014-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GtkDragAndDropHelper from Platform to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=137422

        Reviewed by Martin Robinson.

        WebKitWebViewBase is currently the only user of
        GtkDragAndDropHelper, that was added to share the code with
        WebKit1. Move all the drag and drop logic to a new class
        DragAndDropHandler.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::startDrag):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseConstructed):
        (webkitWebViewBaseDragDataGet):
        (webkitWebViewBaseDragEnd):
        (webkitWebViewBaseDragDataReceived):
        (webkitWebViewBaseDragMotion):
        (webkitWebViewBaseDragLeave):
        (webkitWebViewBaseDragDrop):
        (webkitWebViewBaseDragAndDropHandler):
        (dragExitedCallback): Deleted.
        (webkitWebViewBaseStartDrag): Deleted.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/gtk/DragAndDropHandler.cpp: Added.
        (WebKit::DragAndDropHandler::create):
        (WebKit::DragAndDropHandler::DragAndDropHandler):
        (WebKit::DragAndDropHandler::DroppingContext::DroppingContext):
        (WebKit::dragOperationToGdkDragActions):
        (WebKit::dragOperationToSingleGdkDragAction):
        (WebKit::gdkDragActionToDragOperation):
        (WebKit::DragAndDropHandler::startDrag):
        (WebKit::DragAndDropHandler::fillDragData):
        (WebKit::DragAndDropHandler::finishDrag):
        (WebKit::DragAndDropHandler::dataObjectForDropData):
        (WebKit::DragAndDropHandler::dragEntered):
        (WebKit::DragAndDropHandler::requestDragData):
        (WebKit::DragAndDropHandler::dragMotion):
        (WebKit::DragAndDropHandler::dragLeave):
        (WebKit::DragAndDropHandler::drop):
        * UIProcess/gtk/DragAndDropHandler.h: Added.

2014-10-18  Dan Bernstein  <mitz@apple.com>

        WorkQueue dispatches functions but isn’t a FunctionDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=137853

        Reviewed by Anders Carlsson.

        * Platform/WorkQueue.h: Changed to inherit from FunctionDispatcher.

2014-10-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Improve documentation of webkit_web_view_get_tls_info()
        https://bugs.webkit.org/show_bug.cgi?id=137852

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebView.cpp:

2014-10-17  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=137804

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for RenderBox and clean up the surrounding
        code.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        (WebKit::WebPage::plugInIsPrimarySize):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary):

2014-10-16  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Turn off font autosizing for iOS WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=137806

        Reviewed by Sam Weinig.
        
        Confusingly, WKPreferencesSetTextAutosizingEnabled() does nothing on iOS.
        Instead, we have to add WKPreferencesSetMinimumZoomFontSize() and set it to 0
        to disable font autosizing.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMinimumZoomFontSize):
        (WKPreferencesGetMinimumZoomFontSize):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2014-10-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] REGRESSION(r173929): It broke the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=137522

        Reviewed by Csaba Osztrogonác.

        r173929 let web inspector use a separate web process. Besides it changed that the inspector is shown
        as docking mode by default. However EFL port doesn't support to show web inspector as docking window yet.
        This patch is to show web inspector on EFL new window as before. Docking mode should be implemented by
        upcoming patch.

        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformAttach):

2014-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Add API to GMainLoopSource to schedule sources after a delay in microseconds
        https://bugs.webkit.org/show_bug.cgi?id=137782

        Reviewed by Sergio Villar Senin.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::layerFlushTimerFired): Use microseconds
        instead of milliseconds.

2014-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move touch events handling from Platform to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=137735

        Reviewed by Sergio Villar Senin.

        GtkTouchContextHelper was only used by WebKitWebViewBase, since
        it's the only one that can create touch events. The code has been
        simplified by processing the events in the view, and the native
        touch events are now created with the native event and touch points.

        * Shared/NativeWebTouchEvent.h:
        (WebKit::NativeWebTouchEvent::touchContext): Deleted.
        * Shared/gtk/NativeWebTouchEventGtk.cpp:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent): Pass touch
        points instead of touch context to WebEventFactory::createWebTouchEvent().
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent): Create the
        WebTouchEvent for the given native event and points.
        (WebKit::touchPhaseFromEvents): Deleted.
        (WebKit::appendTouchEvent): Deleted.
        * Shared/gtk/WebEventFactory.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (appendTouchEvent): Helper function to create a
        WebPlatformTouchPoint for the given native event and add it to the
        list of touch points.
        (webkitWebViewBaseGetTouchPointForEvent): Build the touch point
        list for the event.
        (webkitWebViewBaseTouchEvent): Process the touch event.
        (webkitWebViewBaseDragDataReceived): Deleted.

2014-10-16  Pascal Jacquemart  <p.jacquemart@samsung.com>

        Removing CUSTOM_PROTOCOLS guard
        https://bugs.webkit.org/show_bug.cgi?id=137741

        Reviewed by Benjamin Poulain.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        * Shared/Network/CustomProtocols/Cocoa/CustomProtocolManagerCocoa.mm:
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/Network/CustomProtocols/CustomProtocolManager.messages.in:
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.cpp:
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerImpl.h:
        * Shared/Network/CustomProtocols/soup/CustomProtocolManagerSoup.cpp:
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/soup/WKAPICastSoup.h:
        * UIProcess/API/C/soup/WKSoupCustomProtocolRequestManager.cpp:
        (WKSoupCustomProtocolRequestManagerGetTypeID):
        (WKSoupCustomProtocolRequestManagerSetClient):
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.messages.in:
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        * UIProcess/Network/CustomProtocols/soup/CustomProtocolManagerProxySoup.cpp:
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp:
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.h:
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManagerClient.cpp:
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManagerClient.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::unregisterGlobalURLSchemeAsHavingCustomProtocolHandlers):
        (WebKit::WebContext::unregisterSchemeForCustomProtocol):
        * UIProcess/WebContext.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformInitializeNetworkProcess):
        * WebKit2Prefix.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericSendAsync):
        (webkitSoupRequestGenericSendFinish):
        * WebProcess/soup/WebKitSoupRequestGeneric.h:

2014-10-16  Simon Fraser  <simon.fraser@apple.com>

        Crash under RemoteLayerTreeHost::getLayer() when closing a tab
        https://bugs.webkit.org/show_bug.cgi?id=137796
        rdar://problem/18547565

        Reviewed by Tim Horton.
        
        CA can call our animation delegate after the RemoteLayerTreeHost has been
        destroyed. CAAnimation retains its delegate, so it's safe for us to null out
        the WKAnimationDelegate's pointer to the RemoteLayerTreeHost when tearing down
        the RemoteLayerTreeHost.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::~RemoteLayerTreeHost):
        (WebKit::RemoteLayerTreeHost::animationDidEnd):
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (-[WKAnimationDelegate invalidate]):
        (-[WKAnimationDelegate animationDidStart:]):
        (-[WKAnimationDelegate animationDidStop:finished:]):

2014-10-16  Tim Horton  <timothy_horton@apple.com>

        Implement selection services menu for Legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=137582
        <rdar://problem/18604241>

        Reviewed by Brady Eidson.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]):
        Add a note that we should transition to using replaceSelectionWithAttributedString.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleSelectionServiceClick):
        Allow editor services in editable-but-not-rich-text areas, just like in WebKit1.

2014-10-16  Tim Horton  <timothy_horton@apple.com>

        Various crashes in ViewGestureControllerIOS when closing a tab while a swipe gesture is in progress
        https://bugs.webkit.org/show_bug.cgi?id=137770
        <rdar://problem/17916459>

        Reviewed by Dan Bernstein.

        When tearing down a WKWebView in the middle of a swipe gesture, a variety of
        UI process crashes were observed. First, two uses of potentially deleted objects
        (the WebBackForwardListItem and ViewGestureController), which were fixed by
        extending the object's lifetime and checking for its liveness, respectively.
        Second, a potential null-deref of DrawingArea if the timing of endSwipeGesture
        vs. page teardown was such that DrawingArea was null but everything else was in line.
        Lastly, another case of messaging a potentially deleted object (specifically,
        the _UIViewControllerTransitionContext's animator) in a callback from CA, which
        was fixed by nulling out the animator (and a few other properties) when tearing
        down the ViewGestureController.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (-[WKSwipeTransitionController invalidate]):
        Clear the soon-to-be-invalid ViewGestureController pointer.

        (WebKit::ViewGestureController::~ViewGestureController):
        Call [WKSwipeTransitionController invalidate] upon destruction.
        Clear our transition context's interactor and animator, and inform it that
        the transition is not in flight. This avoids a crash when calling back
        to the already-destroyed animator later.

        (WebKit::ViewGestureController::beginSwipeGesture):
        Keep a reference to the target WebBackForwardListItem; this avoids
        it being deleted between here and the transition completion block firing.

        Look up the ViewGestureController by pageID, just like we do in endSwipeGesture,
        to avoid situations where the callback fires after the WKWebView/ViewGestureController
        have gone away.

        Hold on to our _UIViewControllerOneToOneTransitionContext, so that we can do the
        aforementioned clearing upon deallocation.

        (WebKit::ViewGestureController::endSwipeGesture):
        Null check the DrawingArea. If it is null, instead of doing our normal delayed logic
        for swipe snapshot teardown, just put things back together immediately.

        (WebKit::ViewGestureController::removeSwipeSnapshot):
        Clear m_swipeTransitionContext.

2014-10-16  Antti Koivisto  <antti@apple.com>

        REGRESSION (r173356): Downloading a disk image appends ".txt" to it
        https://bugs.webkit.org/show_bug.cgi?id=137493
        <rdar://problem/18321947>

        Reviewed by Alexey Proskuryakov.

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::startWithHandle):
        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::startWithHandle):

            It appears that the synthesized NS/CFURLResponse fails to serialize the suggested filename correctly
            unless it has been accessed first.

2014-10-15  Dan Bernstein  <mitz@apple.com>

        [Cocoa] "Plug-in will handle load" error isn't declared in the modern API
        https://bugs.webkit.org/show_bug.cgi?id=137747

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKError.mm: Define _WKLegacyErrorDomain.
        * UIProcess/API/Cocoa/WKErrorInternal.h: Changed to import WKErrorPrivate.h.
        * UIProcess/API/Cocoa/WKErrorPrivate.h: Added. Declares _WKLegacyErrorDomain
        and _WKLegacyErrorPlugInWillHandleLoad.
        * WebKit2.xcodeproj/project.pbxproj: Added new private header.

2014-10-15  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for TransformOperation subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137731

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for TransformOperation subclasses and clean
        up the surrounding code.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<TransformOperations>::encode):

2014-10-15  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Allow some Kerberos related paths in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=137666
        rdar://problem/17965010

        Reviewed by Darin Adler.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2014-10-15  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Allow plug-ins to read managed preferences
        https://bugs.webkit.org/show_bug.cgi?id=137665
        <rdar://problem/18255601>

        Reviewed by Darin Adler.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2014-10-14  Joonghun Park  <jh718.park@samsung.com>

        [WK2][EFL] Fix the problem that threads created by a DispatchQueueEfl are not destroyed
        even after the DispatchQueueEfl has been destructed
        https://bugs.webkit.org/show_bug.cgi?id=137195

        Reviewed by Gyuyoung Kim.

        Linux and Unix System's pthreads are created in joinable state by default.
        If threads aren't destructed explicitly, it will be still live
        until process which created the thread is dead.
        Besides it may cause out of capacity range of thread creation in a process.
        It is one of hidden defects.
        This patch calls detachThread() to detach thread immediately after it is created.
        So the thread can be destroyed as soon as the thread's ThreadContext::function()
        returns.

        * Platform/efl/DispatchQueueEfl.cpp:
        (DispatchQueue::ThreadContext::start):

2014-10-14  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for PlatformCAAnimation subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137722

        Reviewed by Simon Fraser.

        Use is<>() / downcast<>() for PlatformCAAnimation subclasses and clean
        up the surrounding code.

        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::copy):
        (WebKit::PlatformCAAnimationRemote::copyTimingFunctionFrom):
        (WebKit::PlatformCAAnimationRemote::copyFromValueFrom):
        (WebKit::PlatformCAAnimationRemote::copyToValueFrom):
        (WebKit::PlatformCAAnimationRemote::copyValuesFrom):
        (WebKit::PlatformCAAnimationRemote::copyKeyTimesFrom):
        (WebKit::PlatformCAAnimationRemote::copyTimingFunctionsFrom):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::addAnimationForKey):
        (WebKit::PlatformCALayerRemote::animationStarted):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):

2014-10-14  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r165356): Issues with Japanese text input
        https://bugs.webkit.org/show_bug.cgi?id=137719
        rdar://problem/18431952
        rdar://problem/18483741

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::didChangeSelection):
        In sync code path, ensure consistent message delivery order by adding
        a DispatchMessageEvenWhenWaitingForSyncReply flag. This way, delayed
        EditorStateChanged messages won't confuse UI process.

2014-10-14  Anders Carlsson  <andersca@apple.com>

        Hide the find indicator when starting a swipe
        https://bugs.webkit.org/show_bug.cgi?id=137711

        Reviewed by Tim Horton.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::navigationGestureDidBegin):

2014-10-14  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderImage
        https://bugs.webkit.org/show_bug.cgi?id=137683

        Reviewed by Mihnea Ovidenie.

        Use is<>() / downcast<>() for RenderImage.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::cachedImage):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performActionOnElement):

2014-10-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][CMake] Non-ninja build is broken since r174422
        https://bugs.webkit.org/show_bug.cgi?id=137656

        Reviewed by Philippe Normand.

        Make WebKit2-forwarding-headers depend only on static,
        non-generated sources.

        * CMakeLists.txt:
        * PlatformGTK.cmake:

2014-10-13  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for PlatformCALayer subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137661

        Reviewed by Simon Fraser.

        Use is<>() / downcast<>() for PlatformCALayer subclasses and clean up 
        the surrounding code.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::~PlatformCALayerRemote):
        (WebKit::PlatformCALayerRemote::updateClonedLayerProperties):
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        (WebKit::PlatformCALayerRemote::setSublayers):
        (WebKit::PlatformCALayerRemote::appendSublayer):
        (WebKit::PlatformCALayerRemote::insertSublayer):
        (WebKit::PlatformCALayerRemote::replaceSublayer):
        (WebKit::PlatformCALayerRemote::adoptSublayers):
        (WebKit::PlatformCALayerRemote::setMask):
        (WebKit::PlatformCALayerRemote::copyFiltersFrom):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::buildTransaction):

2014-10-13  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Filter / FilterOperation subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137644

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for Filter / FilterOperation subclasses.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<WebCore::FilterOperations>::encode):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FilterOperation>::encode):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):

2014-10-12  Sergio Villar Senin  <svillar@igalia.com>

        [SOUP] [WK2] WebProcess and NetworkProcess initialization clears cache contents
        https://bugs.webkit.org/show_bug.cgi?id=137489

        Reviewed by Carlos Garcia Campos.

        Temporarily set the SoupCache's maximum size to a huge value
        before calling soup_cache_load() so that the cache is not shrinked
        to the default value.

        * NetworkProcess/soup/NetworkProcessSoup.cpp:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-10-12  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Introduce EWebKit_Extension
        https://bugs.webkit.org/show_bug.cgi?id=134921

        Reviewed by Gyuyoung Kim.

        EWebKit2 does not provide the functionality to extend WebProcess.
        Although there is ewk_context_new_with_injected_bundle_path() in ewebkit2 APIs,
        application developers can not make bundle object without touching WK APIs
        which ewebkit2 does not expose.

        This patch introduces EWebKit_Extension, basic structure for the extension of WebProcess.

        * PlatformEfl.cmake:
        Added files for the EWebKit_Extension and install them properly.
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (bundlePathForExtension):
        (EwkContext::create):
        (EwkContext::getInjectedBundleInitializationUserData):
        (EwkContext::setMessageFromInjectedBundleCallback):
        (ewk_context_new_with_extensions_path):
        Deleted because ewebkit2 does not have a way to make injected bundle.
        Instead, Ewk_Extension will cover the same functionalities.
        (ewk_context_new_with_injected_bundle_path): Deleted.
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext::extensionsPath):
        * UIProcess/API/efl/tests/InjectedBundle/injected_bundle_sample.cpp: Removed.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp:
        (EWK2UnitTest::EWK2UnitTestEnvironment::extensionSample):
        (EWK2UnitTest::EWK2UnitTestEnvironment::injectedBundleSample): Renamed injectedBundleSample to extensionSample.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        * UIProcess/API/efl/tests/extensions/extension_sample.cpp: Copied from Source/WebKit2/UIProcess/API/efl/tests/InjectedBundle/injected_bundle_sample.cpp.
        * UIProcess/API/efl/tests/test_ewk2_context.cpp: Renamed ewk_context_new_with_injected_bundle_path to ewk_context_new_with_extensions_path.
        (TEST_F):
        * WebProcess/InjectedBundle/API/efl/EWebKit_Extension.h: Added.
        * WebProcess/InjectedBundle/API/efl/ewk_extension.cpp: Added.
        (EwkExtension::append):
        (EwkExtension::remove):
        (ewk_extension_client_add):
        (ewk_extension_client_del):
        * WebProcess/InjectedBundle/API/efl/ewk_extension.h: Added.
        * WebProcess/InjectedBundle/API/efl/ewk_extension_private.h: Added.
        (EwkExtension::EwkExtension):
        (EwkExtension::~EwkExtension):
        * WebProcess/efl/ExtensionManagerEfl.cpp: Added.
        (WebKit::ExtensionManagerEfl::shared):
        (WebKit::ExtensionManagerEfl::ExtensionManagerEfl):
        (WebKit::ExtensionManagerEfl::initialize):
        * WebProcess/efl/ExtensionManagerEfl.h: Added.
        * WebProcess/efl/WebInjectedBundleMainEfl.cpp: Added.
        (WKBundleInitialize):
        * efl/ewebkit2-extension.pc.in: Added.

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Image subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137625

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for Image subclasses.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginSnapshotTimerFired):

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for GraphicsLayer subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137595

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for GraphicsLayer subclasses and clean up the
        surrounding code.

        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::layerForTransientZoom):
        (WebKit::TiledCoreAnimationDrawingArea::shadowLayerForTransientZoom):

2014-10-10  Pascal Jacquemart  <p.jacquemart@samsung.com>

        Fix debug build on EFL after r174584
        https://bugs.webkit.org/show_bug.cgi?id=137613

        Reviewed by Christophe Dumez.

        * UIProcess/efl/RequestManagerClientEfl.cpp:
        (WebKit::RequestManagerClientEfl::RequestManagerClientEfl):

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBoxModelObject
        https://bugs.webkit.org/show_bug.cgi?id=137587

        Reviewed by Mihnea Ovidenie.

        Use is<>() / downcast<>() for RenderBoxModelObject and clean up the
        surrounding code.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::renderer):
        (WebKit::PluginView::invalidateRect):

2014-10-10  Pascal Jacquemart  <p.jacquemart@samsung.com>

        [SOUP] Remove custom URI schemes implementation
        https://bugs.webkit.org/show_bug.cgi?id=128169

        Reviewed by Carlos Garcia Campos.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/C/soup/WKAPICastSoup.h:
        * UIProcess/API/C/soup/WKContextSoup.cpp: Removed.
        * UIProcess/API/C/soup/WKSoupRequestManager.cpp: Removed.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveURIRequest): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/soup/WebSoupRequestManagerClient.cpp: Removed.
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp: Removed.
        * UIProcess/soup/WebSoupRequestManagerProxy.messages.in: Removed.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericSendAsync):
        (webkitSoupRequestGenericSendFinish):
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/soup/WebSoupRequestManager.cpp: Removed.
        * WebProcess/soup/WebSoupRequestManager.messages.in: Removed.

2014-10-09  Dean Jackson  <dino@apple.com>

        Remove ENABLE_CSS3_CONDITIONAL_RULES
        https://bugs.webkit.org/show_bug.cgi?id=137571

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2014-10-09  Tim Horton  <timothy_horton@apple.com>

        Move ServicesOverlayController to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=137416
        <rdar://problem/18546283>

        Reviewed by Anders Carlsson.

        * Platform/Logging.h:
        Move Services logging channel to WebCore.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::handleTelephoneNumberClick):
        (WebKit::WebChromeClient::handleSelectionServiceClick):
        (WebKit::WebChromeClient::hasRelevantSelectionServices):
        Implement services-related ChromeClient callbacks.
        Clicks are forwarded to WebPageMac where they do what they used to;
        hasRelevantSelectionServices is implemented as it was when it lived
        inside ServicesOverlayController.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectedTelephoneNumberRangesChanged): Deleted.
        (WebKit::WebEditorClient::selectionRectsDidChange): Deleted.
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        Remove WebEditorClient overrides for now-removed functions.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::updatePreferences):
        Forward serviceControlsEnabled setting to WebCore.

        (WebKit::WebPage::servicesOverlayController): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::serviceControlsEnabled): Deleted.

2014-10-09  Andy Estes  <aestes@apple.com>

        [iOS] Crash in CFURLDownloadClient.didFail if the download has a null resumeData
        https://bugs.webkit.org/show_bug.cgi?id=137551

        Reviewed by David Kilzer.

        CFDataGetBytePtr() and CFDataGetLength() crash if passed a null value.

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::setUpDownloadClient):

2014-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [X11] Plugin process crashes in NetscapePlugin::platformPostInitialize()
        https://bugs.webkit.org/show_bug.cgi?id=137426

        Reviewed by Darin Adler.

        For some reason flash crashes when NPP_GetValue is called with
        NPPVpluginCancelSrcStream, but only in windowed mode. Not calling
        NPP_GetValue and unconditionally loading the source URL in the
        browser fixes the crash and plugins work normally. We can handle
        this particular case with a new quirk.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::determineQuirks): Add
        DoNotCancelSrcStreamInWindowedMode quirk if it's flash plugin.
        * Shared/Plugins/PluginQuirks.h: Add
        DoNotCancelSrcStreamInWindowedMode quirk.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::shouldLoadSrcURL): Return early if plugin
        is windowed and DoNotCancelSrcStreamInWindowedMode quirk is present.

2014-10-09  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Widget subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137549

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for Widget subclasses and clean up the
        surrounding code.

        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::WebRenderObject):

2014-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use the PageLoadState observer also to monitor title and estimated load progress
        https://bugs.webkit.org/show_bug.cgi?id=136997

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView): Remove implementation of
        didReceiveTitleForFrame, didStartProgress, didChangeProgress and
        didFinishProgress.
        (didReceiveTitleForFrame): Deleted.
        (didChangeProgress): Deleted.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_estimated_load_progress): Return the value
        directly from the PageLoadState object, since we don't need to
        cache the value anymore.
        (webkitWebViewSetTitle): Deleted.
        (webkitWebViewSetEstimatedLoadProgress): Deleted.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:

2014-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Race condition with WebKitWebView:is-loading after starting page load
        https://bugs.webkit.org/show_bug.cgi?id=136692

        Reviewed by Gustavo Noronha Silva.

        Use PageLoadState::Observer to update both is-loading and uri
        properties, instead of manually update them. This ensures that our
        web view is always in sync with the WebPageProxy so that
        webkit_web_view_is_loading() returns true right after requesting
        any load. We still need to manually set the is-loading property
        only in the case where we delay the emission of the load-changed
        signals when waiting for the main resource. The bahaviour is a bit
        different but still consistent with what our API documentation says.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView): Remove
        didSameDocumentNavigationForFrame implementation, since we are
        already notified about the URL change by the PageLoadState::Observer.
        (didSameDocumentNavigationForFrame): Deleted.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewSetIsLoading): No longer update the URI when
        changing the is-loading property.
        (webkitWebViewConstructed): Crate a PageLoadStateObserver and add
        it to the PageLoadState.
        (webkitWebViewDispose): Remove the PageLoadStateObserver from the PageLoadState.
        (webkitWebViewEmitLoadChanged): Add isDelayedEvent parameter to
        update the is-loading property accordingly when emitting the
        delayed events.
        (webkitWebViewEmitDelayedLoadEvents): Pass true as isDelayedEvent
        parameter of webkitWebViewEmitLoadChanged().
        (webkitWebViewLoadChanged): Pass false as isDelayedEvent parameter
        of webkitWebViewEmitLoadChanged().
        (webkitWebViewLoadFailed):
        (webkitWebViewLoadFailedWithTLSErrors):
        (webkitWebViewUpdateURI): Deleted.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:

2014-10-08  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBlock objects
        https://bugs.webkit.org/show_bug.cgi?id=137512

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for RenderBlock objects and clean up the 
        surrounding code.

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

2014-10-08  Ada Chan  <adachan@apple.com>

        Implement WKPageIsPlayingAudio().
        https://bugs.webkit.org/show_bug.cgi?id=137048

        Reviewed by Darin Adler.

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

2014-10-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][CoordinatedGraphics] All EFL layout tests are broken since r174231
        https://bugs.webkit.org/show_bug.cgi?id=137443

        Reviewed by Zoltan Herczeg.

        EFL layout test and MiniBrowser have broken since r174231. r174231 was to move PageOverlay implementation
        from WebKit2 to WebCore with lazy initializing of PageOverlayController. It caused all EFL layout tests
        crash and build break. To restore EFL layout test, this patch sets viewOverlayRootLayer through
        attachViewOverlayGraphicsLayer() as mac port's one in r174231.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::attachViewOverlayGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::updateRootLayers):
        (WebKit::CoordinatedLayerTreeHost::setViewOverlayRootLayer):
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2014-10-08  Commit Queue  <commit-queue@webkit.org>

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

        It broke EFL layout test totally (Requested by gyuyoung on
        #webkit).

        Reverted changeset:

        "[EFL] Introduce EWebKit_Extension"
        https://bugs.webkit.org/show_bug.cgi?id=134921
        http://trac.webkit.org/changeset/174335

2014-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make forwarding headers generation depend on source code
        https://bugs.webkit.org/show_bug.cgi?id=137394

        Reviewed by Philippe Normand.

        Only run generate-forwarding-headers.pl when source code changes
        and use a different target for the symlinks.

        * PlatformGTK.cmake:

2014-10-07  Pascal Jacquemart  <p.jacquemart@samsung.com>

        [EFL] Enable custom URI schemes with CustomProtocols
        https://bugs.webkit.org/show_bug.cgi?id=128177

        Reviewed by Gyuyoung Kim.

        Fixing ewk_context_url_scheme_register() ewebkit2 API
        rely on r162449 - CustomProtocols implementation from Carlos Garcia Campos

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (EwkUrlSchemeRequest::EwkUrlSchemeRequest):
        (EwkUrlSchemeRequest::finish):
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        (EwkUrlSchemeRequest::create):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp:
        * UIProcess/efl/RequestManagerClientEfl.cpp:
        (WebKit::RequestManagerClientEfl::RequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::startLoading):
        (WebKit::RequestManagerClientEfl::stopLoading):
        (WebKit::RequestManagerClientEfl::registerURLSchemeHandler):
        (WebKit::EwkUrlSchemeHandler::EwkUrlSchemeHandler): Deleted.
        (WebKit::RequestManagerClientEfl::didReceiveURIRequest): Deleted.
        * UIProcess/efl/RequestManagerClientEfl.h:
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/soup/WebContextSoup.cpp:
        (WebKit::WebContext::platformInitializeNetworkProcess):

2014-10-07  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove WKPageCreateSnapshotOfVisibleContent API.
        https://bugs.webkit.org/show_bug.cgi?id=66979

        Reviewed by Darin Adler.

        After the landing of the first patch of webkit.org/b/66979,
        WKPageCreateSnapshotOfVisibleContent API has been neglected for years.
        Currently, this is not used anywhere and does not break the nightlies.
        So we can remove this.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCreateSnapshotOfVisibleContent): Deleted.
        * UIProcess/API/C/WKPagePrivate.h:

2014-10-07  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove WKPageSetInvalidMessageFunction.
        https://bugs.webkit.org/show_bug.cgi?id=137509

        Reviewed by Benjamin Poulain.

        According to the FIXME comment in WKPageSetInvalidMessageFunction,
        we can remove this function when doing so won't break the nightlies.
        Currently, this is not used anywhere and does not break the nightlies.
        So we can remove this.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetInvalidMessageFunction): Deleted.
        * UIProcess/API/C/WKPagePrivate.h:

2014-10-07  Christophe Dumez  <cdumez@apple.com>

        [WK2] Use is<>() / downcast<>() for DrawingArea subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137497

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for DrawingArea subclasses.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::synchronizeDynamicViewportUpdate):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:

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

        Roll-over Changelogs.

        * ChangeLog-2014-10-07: Copied from Source/WebKit2/ChangeLog.

== Rolled over to ChangeLog-2014-10-07 ==
