2013-10-12  Alexey Proskuryakov  <ap@apple.com>

        Add a feature define for SubtleCrypto
        https://bugs.webkit.org/show_bug.cgi?id=122683

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2013-09-27  Jessica Pease  <jessica_n_pease@apple.com>

        Replace static cast ASSERTs with ASSERT_WITH_SECURITY_IMPLICATION
        https://bugs.webkit.org/show_bug.cgi?id=120803

        Reviewed by Andreas Kling.

        No new tests because we're just changing assertions.

        * Shared/Plugins/NPObjectProxy.h:
        (WebKit::NPObjectProxy::toNPObjectProxy):
        * WebProcess/Plugins/Netscape/NPJSObject.h:
        (WebKit::NPJSObject::toNPJSObject):

2013-09-06  Jessica Pease  <jessica_n_pease@apple.com>

        Replace bounds checking ASSERTs with ASSERT_WITH_SECURITY_IMPLICATION
        https://bugs.webkit.org/show_bug.cgi?id=120893

        Reviewed by Darin Adler.

        * Shared/Plugins/PluginQuirks.h:
        (WebKit::PluginQuirks::add):

2013-10-12  Darin Adler  <darin@apple.com>

        Use unique_ptr instead of delete in a few places
        https://bugs.webkit.org/show_bug.cgi?id=122639

        Reviewed by Anders Carlsson.

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::privateBrowsingStorageSession): Use NeverDestroyed and unique_ptr.
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession): Use std::move.

        * Shared/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload): Use std::move. Also add instead of set.
        (WebKit::DownloadManager::convertHandleToDownload): Ditto.
        (WebKit::DownloadManager::downloadFinished): Don't delete.

        * Shared/Downloads/DownloadManager.h: Changed m_downloads to hold unique_ptr instead
        of raw pointers.

        * Shared/SandboxExtension.h: Use std::unique_ptr for m_data.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::HandleArray::HandleArray): Don't initialize m_data to 0.
        (WebKit::SandboxExtension::HandleArray::~HandleArray): Don't delete m_data.
        (WebKit::SandboxExtension::HandleArray::allocate): Use make_unique to allocate m_data.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::privateSession): Use NeverDestroyed and unique_ptr.
        (WebKit::identifierBase): Use NeverDestroyed.
        (WebKit::WebFrameNetworkingContext::setPrivateBrowsingStorageSessionIdentifierBase):
        Updated to use the above.
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Ditto.
        (WebKit::WebFrameNetworkingContext::destroyPrivateBrowsingSession): Ditto.
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Ditto.
        (WebKit::WebFrameNetworkingContext::storageSession): Ditto.

        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::privateSession):
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::destroyPrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        (WebKit::WebFrameNetworkingContext::webFrameLoaderClient):
        More of the same.

2013-10-11  Timothy Hatcher  <timothy@apple.com>

        Remove preference support for picking the old Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=122655

        Reviewed by Alexey Proskuryakov.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::WebInspector):
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/mac/WebInspectorMac.mm:
        (WebKit::WebInspector::localizedStringsURL):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformPreferencesDidChange):

2013-10-11  Brady Eidson  <beidson@apple.com>

        Lay the groundwork for a multi-process aware Indexed DB implementation in WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=122675

        Reviewed by Alexey Proskuryakov.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/IndexedDB/WebIDBFactoryBackend.cpp: Added.
        (WebKit::WebIDBFactoryBackend::WebIDBFactoryBackend):
        (WebKit::WebIDBFactoryBackend::~WebIDBFactoryBackend):
        (WebKit::WebIDBFactoryBackend::getDatabaseNames):
        (WebKit::WebIDBFactoryBackend::open):
        (WebKit::WebIDBFactoryBackend::deleteDatabase):
        * WebProcess/IndexedDB/WebIDBFactoryBackend.h: Added.
        (WebKit::WebIDBFactoryBackend::create):

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createIDBFactoryBackend): Return a WebIDBFactoryBackend.

2013-10-11  Anders Carlsson  <andersca@apple.com>

        Remove ENABLE(GESTURE_EVENTS) from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=122673

        Reviewed by Ryosuke Niwa.

        * Shared/WebEvent.h:
        * Shared/WebEventConversion.cpp:
        * Shared/WebEventConversion.h:
        * Shared/WebGestureEvent.cpp: Removed.
        * Shared/mac/WebEventFactory.h:
        * Shared/mac/WebEventFactory.mm:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/EventDispatcher.cpp:
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:

2013-10-11  Adam Roben  <aroben@webkit.org>

        Confusing CGImageRef memory management in ImageBuffer::copyImage
        https://bugs.webkit.org/show_bug.cgi?id=122605

        Reviewed by Simon Fraser.

        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createImage): BitmapImage::create now
        retains the passed-in CGImage, so we don't need to dance around it
        anymore. Also changed to use nullptr instead of 0 while I was in here.

2013-10-10  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Separate dispatch context from WorkQueue.
        https://bugs.webkit.org/show_bug.cgi?id=115332

        Reviewed by Anders Carlsson.

        Refactor WorkQueue to prevent dangling workqueue access.

        Previously, the WorkQueue class had all context about dispatch.
        WorkQueue had dispatch item queue and socket event handler,
        and those were accessed on the work queue thread through WorkQueue
        instance.

        With reference countable WorkQueue concept, this implementation
        complicates handling workqueue ref-counting and causes dangling
        workqueue access problem.

        To make it easy to handle WorkQueue reference count and to prevent
        dangling access problem, DispatchQueue class is added to handle
        dispatch tasks, and the WorkQueue instance and DispatchQueue thread
        will have the reference count of the DispatchQueue instance to prevent
        dangling access.

        * Platform/WorkQueue.h:
        * Platform/efl/DispatchQueueEfl.cpp: Added.
        (DispatchQueue::ThreadContext::start):
        (DispatchQueue::ThreadContext::ThreadContext):
        (DispatchQueue::ThreadContext::function):
        (DispatchQueue::create):
        (DispatchQueue::DispatchQueue):
        (DispatchQueue::~DispatchQueue):
        (DispatchQueue::dispatch):
        (DispatchQueue::stopThread):
        (DispatchQueue::setSocketEventHandler):
        (DispatchQueue::clearSocketEventHandler):
        (DispatchQueue::performWork):
        (DispatchQueue::performTimerWork):
        (DispatchQueue::performFileDescriptorWork):
        (DispatchQueue::insertTimerWorkItem):
        (DispatchQueue::dispatchQueueThread):
        (DispatchQueue::wakeUpThread):
        (DispatchQueue::getNextTimeOut):
        * Platform/efl/DispatchQueueEfl.h: Added.
        * Platform/efl/DispatchQueueWorkItemEfl.h: Added.
        (WorkItem::create):
        (WorkItem::dispatch):
        (WorkItem::WorkItem):
        (TimerWorkItem::create):
        (TimerWorkItem::expirationTimeSeconds):
        (TimerWorkItem::hasExpired):
        (TimerWorkItem::TimerWorkItem):
        * Platform/efl/WorkQueueEfl.cpp:
        (WorkQueue::platformInitialize):
        (WorkQueue::platformInvalidate):
        (WorkQueue::registerSocketEventHandler):
        (WorkQueue::unregisterSocketEventHandler):
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfterDelay):
        * PlatformEfl.cmake:

2013-10-10  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2][Soup] Add platform specific stubs for NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=110115

        Reviewed by Carlos Garcia Campos.

        Original patch by Balazs Kelemen <kbalazs@webkit.org> and Kwang Yul Seo  <skyul@company100.net>.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * NetworkProcess/gtk/NetworkProcessSoup.cpp: Added.
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        (WebKit::NetworkProcess::platformSetCacheModel):
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost):
        Stubs.
        (WebKit::NetworkProcess::clearCacheForAllOrigins):
        (WebKit::NetworkProcess::platformTerminate):
        * NetworkProcess/soup/NetworkResourceLoadSchedulerSoup.cpp: Added.
        (WebKit::NetworkResourceLoadScheduler::platformInitializeMaximumHTTPConnectionCountPerHost):
        Added platform default based on the comment in ResourceRequestSoup.cpp.
        * UIProcess/Network/soup/NetworkProcessProxySoup.cpp: Added.
        (WebKit::NetworkProcessProxy::platformGetLaunchOptions):
        Stub.
        * UIProcess/soup/WebContextSoup.cpp: Added.
        (WebKit::WebContext::platformInitializeNetworkProcess):
        Stub.

2013-10-10  Beth Dakin  <bdakin@apple.com>

        Scrollbars are updated on the main thread rather than the scrolling thread 
        (causing scroll bars not to appear/update quickly in some cases)
        https://bugs.webkit.org/show_bug.cgi?id=122585
        -and corresponding-
        <rdar://problem/10710775>

        Reviewed by Simon Fraser.

        New pure virtual function.
        * WebProcess/Plugins/PDF/PDFPlugin.h:

2013-10-10  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] Port RemoteNetworkingContext for Soup
        https://bugs.webkit.org/show_bug.cgi?id=110097

        Reviewed by Darin Adler.

        Original patch by Balazs Kelemen <kbalazs@webkit.org> and Kwang Yul Seo <skyul@company100.net>.

        This should be a cross-platform interface so I lifted the header from
        the mac directory. Removed mac specific arguments from constructor,
        added setters instead. Moved platform things behind ifdefs and added
        Soup specific bits.

        The following things were fixed by Csaba Osztrogonác:
        - solved conflicts in project.pbxproj
        - removed the change in the non-existent SyncNetworkResourceLoader.cpp
        - marked RemoteNetworkingContext class as FINAL
        - reordered the members for platform specific initialization
        - added initializers to m_needsSiteSpecificQuirks and m_localFileContentSniffingEnabled members on PLATFORM(MAC)

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        * NetworkProcess/RemoteNetworkingContext.h: Renamed from Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.h.
        (WebKit::RemoteNetworkingContext::create):
        (WebKit::RemoteNetworkingContext::RemoteNetworkingContext):
        (WebKit::RemoteNetworkingContext::setNeedsSiteSpecificQuirks):
        (WebKit::RemoteNetworkingContext::setLocalFileContentSniffingEnabled):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp: Added.
        (WebKit::RemoteNetworkingContext::~RemoteNetworkingContext):
        (WebKit::RemoteNetworkingContext::isValid):
        (WebKit::RemoteNetworkingContext::initiatingPageID):
        (WebKit::RemoteNetworkingContext::setPrivateBrowsingStorageSessionIdentifierBase):
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::RemoteNetworkingContext::destroyPrivateBrowsingSession):
        (WebKit::RemoteNetworkingContext::storageSession):
        (WebKit::RemoteNetworkingContext::privateBrowsingSession):
        * WebKit2.xcodeproj/project.pbxproj:

2013-10-10  Sergio Correia  <sergio.correia@openbossa.org>

        Convert some OwnPtr/PassOwnPtr in CoordinatedGraphics code to std::unique_ptr's
        https://bugs.webkit.org/show_bug.cgi?id=122614

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2013-10-10  Csaba Osztrogonác  <ossy@webkit.org>

        generate-message-receiver.py can't handle nested #ifs
        https://bugs.webkit.org/show_bug.cgi?id=121877

        Reviewed by Alexey Proskuryakov.

        * Scripts/webkit2/parser.py:
        (parse): Exit early until proper fix instead of generating buggy output.

2013-10-10  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/13341666> WebKit should always build against an SDK.

        Have all projects default to building against the OS X Internal SDK for the Production
        configuration. For the Debug and Release configurations, look for UseInternalSDK.xcconfig
        to determine whether the OS X Internal SDK should be used. If not, use the normal OS X SDK.

        Reviewed by Dan Bernstein.

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

2013-10-10  Ralph Thomas  <ralpht@gmail.com>

        [CoordinatedGraphics][CSS Shaders] marshal color and matrix custom filter parameters
        https://bugs.webkit.org/show_bug.cgi?id=117904

        Correctly encode and decode the "matrix" and "color" custom filter parameter types.
        No port currently enables this code, however with this change the relevant layout tests now pass when enabled in EFL.
        Reviewed by Noam Rosenthal.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2013-10-10  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/13871522> WebKit2 fails to build with C++ 98 conformance changes

        Reviewed by Andreas Kling.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::resolveSymlinksInPath): strrchr returns a const char* when passed one.
        Update the type of the local variable to accommodate that.

2013-10-10  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix for non Mac platforms with enabled NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=121793

        Reviewed by Anders Carlsson.

        * Shared/ShareableResource.cpp:
        * Shared/ShareableResource.h:
        * Shared/WebResourceBuffer.cpp:
        * Shared/WebResourceBuffer.h:
        * WebKit2Prefix.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:
        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

2013-10-09  Sergio Correia  <sergio.correia@openbossa.org>

        Set view to active in ViewClientEfl after WebProcess has relaunched
        https://bugs.webkit.org/show_bug.cgi?id=118650

        Reviewed by Noam Rosenthal.

        Once WebProcess relaunches, the underlying scene from the view is recreated
        and is not active by default, which means it will be in `background'. In
        practice, from that point on we are going to get a blank screen, unless we
        set it to active.

        In the normal flow, the view is set to active during its initialization; this
        patch sets it to active also in ViewClientEfl, in the webProcessDidRelaunch
        callback.

        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::webProcessDidRelaunch): Added WKViewSetIsActive call.

2013-10-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157157.
        http://trac.webkit.org/changeset/157157
        https://bugs.webkit.org/show_bug.cgi?id=122547

        Caused crashes on several bots including gtk, mac-wk2 lion and
        mountain lion (Requested by kov on #webkit).

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::registerNPObject):
        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        * Shared/Plugins/NPRemoteObjectMap.h:

2013-10-08  Darin Adler  <darin@apple.com>

        Remove use of deleteAllValues in NPRemoteObjectMap::pluginDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=122496

        Reviewed by Andreas Kling.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::registerNPObject): Don't call release when puttin objects
        into the map.
        (WebKit::NPRemoteObjectMap::pluginDestroyed): Instead of making an array of receivers
        and deleting them all, remove all of the receivers from the map, which will take care
        of deleting them. Also change the other loop to use a similar coding style.

        * Shared/Plugins/NPRemoteObjectMap.h: Change the value type of m_registeredNPObjects
        to be unique_ptr instead of a raw pointer.

2013-10-08  Anders Carlsson  <andersca@apple.com>

        WebProcess crash on SAP WebCycle web app
        https://bugs.webkit.org/show_bug.cgi?id=122520
        <rdar://problem/15030605>

        Reviewed by Darin Adler.

        Stop trying to use RunLoop to manage the top-level run loop and just have the child process and their
        delegate subclasses start and stop the run loops. This fixes a bug with showModalDialog where we would
        unintentionally call -[NSApp stop] when closing a modal dialog.
        
        This also lets us move all knowledge of NSApplication from RunLoop. (Both the web process and plug-in process
        need to use -[NSApp run] and -[NSApp stop:]).

        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        (WebKit::PluginProcessMainDelegate::doPreInitializationWork):
        Remove call to RunLoop::setUseApplicationRunLoopOnMainRunLoop. Add a startRunLoop override that calls
        -[NSApp run].

        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (PluginServiceInitializer):
        Remove call to RunLoop::setUseApplicationRunLoopOnMainRunLoop.

        * PluginProcess/PluginProcess.h:
        Add stopRunLoop() override on Mac.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::stopRunLoop):
        Call -[NSApp stop:] and tickle the event system.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::stopRunLoop):
        Add default implementation that just calls RunLoop::main()->stop().

        (WebKit::ChildProcess::terminate):
        Call stopRunLoop().

        * Shared/ChildProcess.h:
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.h:
        Add startRunLoop member function and call it instead of RunLoop::run().

        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.mm:
        (WebKit::ChildProcessMainDelegate::startRunLoop):
        Call RunLoop::run().

        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        (WebKit::WebContentProcessMainDelegate::doPreInitializationWork):
        Remove call to RunLoop::setUseApplicationRunLoopOnMainRunLoop.
        Add startRunLoop override that calls -[NSApp run].
        
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):
        Remove call to RunLoop::setUseApplicationRunLoopOnMainRunLoop.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didClose):
        Call stopRunLoop().

        * WebProcess/WebProcess.h:
        Add stopRunLoop override.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::stopRunLoop):
        Call -[NSApp stop:] and tickle the event system.

2013-10-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157090.
        http://trac.webkit.org/changeset/157090
        https://bugs.webkit.org/show_bug.cgi?id=122504

        Caused crashes in many plug-in tests (Requested by ap on
        #webkit).

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::registerNPObject):
        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        * Shared/Plugins/NPRemoteObjectMap.h:

2013-10-08  Darin Adler  <darin@apple.com>

        Remove use of deleteAllValues in NPRemoteObjectMap::pluginDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=122496

        Reviewed by Andreas Kling.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::registerNPObject): Don't call release when putting objects
        into the map.
        (WebKit::NPRemoteObjectMap::pluginDestroyed): Instead of making an array of receivers
        and deleting them all, remove all of the receivers from the map, which will take care
        of deleting them. Also change the other loop to use a similar coding style.

        * Shared/Plugins/NPRemoteObjectMap.h: Change the value type of m_registeredNPObjects
        to be unique_ptr instead of a raw pointer.

2013-10-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reduce duplicated code in WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=122230

        Reviewed by Darin Adler.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): move duplicate code to resetState and call it.
        (WebKit::WebPageProxy::resetState): new private method for code that is shared between
        close and resetStateAfterProcessExited.
        (WebKit::WebPageProxy::resetStateAfterProcessExited): move duplicate code to resetState
        and call it.
        * UIProcess/WebPageProxy.h:

2013-10-07  Sam Weinig  <sam@webkit.org>

        CTTE: Use references in and around DragController
        https://bugs.webkit.org/show_bug.cgi?id=122427

        Reviewed by Andreas Kling.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDragDataReceived):
        (webkitWebViewBaseDragMotion):
        (dragExitedCallback):
        (webkitWebViewBaseDragDrop):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView draggingEntered:]):
        (-[WKView draggingUpdated:]):
        (-[WKView draggingExited:]):
        (-[WKView performDragOperation:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dragEntered):
        (WebKit::WebPageProxy::dragUpdated):
        (WebKit::WebPageProxy::dragExited):
        (WebKit::WebPageProxy::performDrag):
        (WebKit::WebPageProxy::performDragControllerAction):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::willPerformDragDestinationAction):
        (WebKit::WebDragClient::willPerformDragSourceAction):
        (WebKit::WebDragClient::actionMaskForDrag):
        (WebKit::WebDragClient::dragSourceActionMaskForPoint):
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag):
        (WebKit::cachedImage):
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):

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

        Animated images are not restarted when page visibility changes
        https://bugs.webkit.org/show_bug.cgi?id=122464
        <rdar://problem/14293474>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::resumePainting):
        This is on Page now.

2013-10-05  Anders Carlsson  <andersca@apple.com>

        Try to fix the GTK+ build.

        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::platformInitialize):

2013-10-05  Anders Carlsson  <andersca@apple.com>

        Remove createOwned
        https://bugs.webkit.org/show_bug.cgi?id=122388

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setFindIndicator:fadeOut:animate:]):
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlayCreate):

2013-10-05  Darin Adler  <darin@apple.com>

        Remove COMPILER_SUPPORTS(CXX_RVALUE_REFERENCES) since it's required now
        https://bugs.webkit.org/show_bug.cgi?id=122387

        Reviewed by Anders Carlsson.

        * UIProcess/API/cpp/WKRetainPtr.h: Take out conditionals.

2013-10-05  Darin Adler  <darin@apple.com>

        Cut down on use of String::number
        https://bugs.webkit.org/show_bug.cgi?id=122382

        Reviewed by Anders Carlsson.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::dumpChangedLayers): Use StringBuilder::appendNumber.

2013-10-05  Anders Carlsson  <andersca@apple.com>

        Fix cut and paste errors.

        * Configurations/WebKit2.xcconfig:

2013-10-05  Anders Carlsson  <andersca@apple.com>

        Add the rest of the std::function weak symbols in an attempt to fix the Lion build.

        * Configurations/WebKit2.xcconfig:

2013-10-05  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the Lion build.

        * Configurations/WebKit2.xcconfig:

2013-10-05  Anders Carlsson  <andersca@apple.com>

        Attempt to fix the Lion build.
        
        * Configurations/WebKit2.xcconfig:
        Try unexporting one of the weak symbols for now. If this succeeds, I'll add the rest.

2013-10-04  Anders Carlsson  <andersca@apple.com>

        FramePolicyFunction should be an std::function
        https://bugs.webkit.org/show_bug.cgi?id=122362

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision):

2013-10-04  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed EFL build fix after r156924

        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::platformInitialize):

2013-10-04  Sam Weinig  <sam@webkit.org>

        Unify rubber-band control
        https://bugs.webkit.org/show_bug.cgi?id=122341

        Reviewed by Tim Horton.

        - Consolidates the two ways we were passing state about whether
          to rubber-band on a particular edge down to one.
        - Adds SPI to control whether you can rubber band on the left
          or right edge.
        - Add a linked-on-or-after check to control whether we use the
          legacy implicit rubber band control based on back/forward.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRubberBandsAtLeft):
        (WKPageSetRubberBandsAtLeft):
        (WKPageRubberBandsAtRight):
        (WKPageSetRubberBandsAtRight):
        (WKPageRubberBandsAtBottom):
        (WKPageSetRubberBandsAtBottom):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::sendWheelEvent):
        (WebKit::WebPageProxy::rubberBandsAtLeft):
        (WebKit::WebPageProxy::setRubberBandsAtLeft):
        (WebKit::WebPageProxy::rubberBandsAtRight):
        (WebKit::WebPageProxy::setRubberBandsAtRight):
        (WebKit::WebPageProxy::rubberBandsAtTop):
        (WebKit::WebPageProxy::setRubberBandsAtTop):
        (WebKit::WebPageProxy::rubberBandsAtBottom):
        (WebKit::WebPageProxy::setRubberBandsAtBottom):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::shouldUseLegacyImplicitRubberBandControl):
        (WebKit::WebPageProxy::platformInitialize):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2013-10-04  Lorenzo Tilve  <ltilve@igalia.com>

        [GTK] Enable text edition UndoOperations support in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=122305

        Reviewed by Carlos Garcia Campos.

        Replaced the notImplemented() function calls for
        the corresponding implementation of the edit operations
        provided by the DefaultUndoController class.

        * GNUmakefile.list.am:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        * UIProcess/API/gtk/PageClientImpl.h:

2013-10-04  Sergio Correia  <sergio.correia@openbossa.org>

        Remove Qt leftovers from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=122317

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::platformInitialize):
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::Connection::readyReadHandler):
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Shared/API/c/WKBase.h:
        * Shared/NativeWebTouchEvent.h:
        * UIProcess/API/C/WebKit2_C.h:
        * UIProcess/BackingStore.h:
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::inspectorUrlForPageID):
        * UIProcess/InspectorServer/WebInspectorServer.h:
        * UIProcess/InspectorServer/WebSocketServer.cpp:
        * UIProcess/InspectorServer/WebSocketServer.h:
        * UIProcess/WebPageProxy.cpp:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::getPluginDisplay):
        (WebKit::x11Screen):
        (WebKit::displayDepth):
        (WebKit::rootWindowID):
        (WebKit::NetscapePlugin::x11HostDisplay):
        (WebKit::NetscapePlugin::platformPostInitializeWindowless):
        (WebKit::NetscapePlugin::platformPaint):

2013-10-03  Mark Rowe  <mrowe@apple.com>

        REGRESSION (r155787): WebKitTestRunner rebuilds from scratch when doing an incremental build

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj: Have unifdef generate its output to a temporary file. If its exit status
        indicates that the content did not change, remove the temporary file. If the content changed, moved the temporary file
        over the destination. This avoids updating the modification date of the file when it has not changed.

2013-10-03  Sam Weinig  <sam@webkit.org>

        Remove shouldRubberBandInDirection from the WKBundlePageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=122309

        Reviewed by Andreas Kling.

        WKBundlePageUIClient's shouldRubberBandInDirection has never worked with
        threaded scrolling, so remove it.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2013-10-03  Sergio Correia  <sergio.correia@openbossa.org>

        Create CoordinatedDrawingArea / CoordinatedDrawingAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=122207

        Reviewed by Anders Carlsson.

        Since Apple are moving away from DrawingAreaImpl, Coordinated Graphics
        should have its own drawing area.

        * CMakeLists.txt: Use CoordinatedDrawingArea and
        CoordinatedDrawingAreaProxy instead of the DrawingAreaImpl /
        DrawingAreaProxyImpl.
        * Shared/DrawingAreaInfo.h: Add DrawingAreaTypeCoordinated.
        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:
        Added, copied from DrawingAreaProxyImpl.cpp.
        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.h: Added,
        copied from DrawingAreaProxyImpl.h.
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::createDrawingAreaProxy): Use CoordinatedDrawingAreaProxy.
        * UIProcess/DrawingAreaProxyImpl.cpp: Remove Coordinated Graphics
        bits.
        * UIProcess/DrawingAreaProxyImpl.h: Ditto.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        Added, copied from DrawingAreaImpl.cpp.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        Added, copied from DrawingAreaImpl.h.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::performScheduledLayerFlush): Use
        CoordinatedDrawingArea.
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create): Handle the DrawingAreaTypeCoordinated
        in the DrawingArea creation code.
        * WebProcess/WebPage/DrawingAreaImpl.cpp: Remove Coordinated Graphics
        bits.
        * WebProcess/WebPage/DrawingAreaImpl.h: Ditto.

2013-10-03  Anders Carlsson  <andersca@apple.com>

        Ignore deprecation warnings
        https://bugs.webkit.org/show_bug.cgi?id=122302

        Reviewed by Mark Rowe.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::globalPoint):
        * UIProcess/API/mac/FindIndicatorWindow.mm:
        (WebKit::FindIndicatorWindow::setFindIndicator):
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::screenToWindow):
        (WebKit::PageClientImpl::windowToScreen):
        * UIProcess/API/mac/WKTextInputWindowController.mm:
        (-[WKTextInputPanel _interpretKeyEvent:usingLegacyCocoaTextInput:string:]):
        (-[WKTextInputPanel _hasMarkedText]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView characterIndexForPoint:]):
        (-[WKView firstRectForCharacterRange:actualRange:]):
        (-[WKView _postFakeMouseMovedEventForFlagsChangedEvent:]):
        (-[WKView _setDragImage:at:linkDrag:]):
        (-[WKView performDictionaryLookupAtCurrentMouseLocation]):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):

2013-10-03  Anders Carlsson  <andersca@apple.com>

        Remove the last remnants of Qt from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=122290

        Reviewed by Andreas Kling.

        * Platform/PlatformProcessIdentifier.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * Shared/Downloads/Download.cpp:
        (WebKit::Download::Download):
        * Shared/Downloads/Download.h:
        * Shared/Downloads/DownloadManager.cpp:
        * Shared/Downloads/DownloadManager.h:
        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        * Shared/LayerTreeContext.h:
        * Shared/NativeWebKeyboardEvent.h:
        * Shared/NativeWebMouseEvent.h:
        * Shared/NativeWebWheelEvent.h:
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h:
        * Shared/ShareableBitmap.h:
        * Shared/WebPreferencesStore.h:
        * UIProcess/Downloads/DownloadProxy.cpp:
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/PageClient.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::download):
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::editorStateChanged):
        (WebKit::WebPageProxy::showPopupMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebPopupMenuProxy.h:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection):
        (WebKit::WebEditorClient::willSetInputMethodState):
        (WebKit::WebEditorClient::supportsGlobalSelection):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldFallBack):
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::didChangeSelectedIndex):
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::editorState):
        (WebKit::WebPage::performDragControllerAction):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * config.h:

2013-10-03  Anders Carlsson  <andersca@apple.com>

        Remove Qt files from WebKit2.

        Rubber-stomped by Andreas Kling.

        * DerivedSources.pri: Removed.
        * PluginProcess.pro: Removed.
        * PluginProcess/qt/PluginControllerProxyQt.cpp: Removed.
        * PluginProcess/qt/PluginProcessMainQt.cpp: Removed.
        * PluginProcess/qt/PluginProcessQt.cpp: Removed.
        * SandboxProcess.pro: Removed.
        * Shared/API/c/qt/WKImageQt.cpp: Removed.
        * Shared/API/c/qt/WKImageQt.h: Removed.
        * Shared/Downloads/qt/DownloadQt.cpp: Removed.
        * Shared/Downloads/qt/QtFileDownloader.cpp: Removed.
        * Shared/Downloads/qt/QtFileDownloader.h: Removed.
        * Shared/qt/ArgumentCodersQt.cpp: Removed.
        * Shared/qt/ArgumentCodersQt.h: Removed.
        * Shared/qt/LayerTreeContextQt.cpp: Removed.
        * Shared/qt/NativeWebKeyboardEventQt.cpp: Removed.
        * Shared/qt/NativeWebMouseEventQt.cpp: Removed.
        * Shared/qt/NativeWebTouchEventQt.cpp: Removed.
        * Shared/qt/NativeWebWheelEventQt.cpp: Removed.
        * Shared/qt/PlatformCertificateInfo.h: Removed.
        * Shared/qt/ProcessExecutablePathQt.cpp: Removed.
        * Shared/qt/QtNetworkReplyData.cpp: Removed.
        * Shared/qt/QtNetworkReplyData.h: Removed.
        * Shared/qt/QtNetworkRequestData.cpp: Removed.
        * Shared/qt/QtNetworkRequestData.h: Removed.
        * Shared/qt/ShareableBitmapQt.cpp: Removed.
        * Shared/qt/WebCoreArgumentCodersQt.cpp: Removed.
        * Shared/qt/WebEventFactoryQt.cpp: Removed.
        * Shared/qt/WebEventFactoryQt.h: Removed.
        * Shared/qt/WebURLRequestQt.cpp: Removed.
        * Shared/qt/WebURLResponseQt.cpp: Removed.
        * Target.pri: Removed.
        * UIProcess/API/C/qt/WKIconDatabaseQt.cpp: Removed.
        * UIProcess/API/C/qt/WKIconDatabaseQt.h: Removed.
        * UIProcess/API/C/qt/WKNativeEvent.h: Removed.
        * UIProcess/API/cpp/qt/WKStringQt.cpp: Removed.
        * UIProcess/API/cpp/qt/WKStringQt.h: Removed.
        * UIProcess/API/cpp/qt/WKURLQt.cpp: Removed.
        * UIProcess/API/cpp/qt/WKURLQt.h: Removed.
        * UIProcess/API/qt/qquicknetworkreply.cpp: Removed.
        * UIProcess/API/qt/qquicknetworkreply_p.h: Removed.
        * UIProcess/API/qt/qquicknetworkrequest.cpp: Removed.
        * UIProcess/API/qt/qquicknetworkrequest_p.h: Removed.
        * UIProcess/API/qt/qquickurlschemedelegate.cpp: Removed.
        * UIProcess/API/qt/qquickurlschemedelegate_p.h: Removed.
        * UIProcess/API/qt/qquickwebpage.cpp: Removed.
        * UIProcess/API/qt/qquickwebpage_p.h: Removed.
        * UIProcess/API/qt/qquickwebpage_p_p.h: Removed.
        * UIProcess/API/qt/qquickwebview.cpp: Removed.
        * UIProcess/API/qt/qquickwebview_p.h: Removed.
        * UIProcess/API/qt/qquickwebview_p_p.h: Removed.
        * UIProcess/API/qt/qtwebsecurityorigin.cpp: Removed.
        * UIProcess/API/qt/qtwebsecurityorigin_p.h: Removed.
        * UIProcess/API/qt/qwebdownloaditem.cpp: Removed.
        * UIProcess/API/qt/qwebdownloaditem_p.h: Removed.
        * UIProcess/API/qt/qwebdownloaditem_p_p.h: Removed.
        * UIProcess/API/qt/qwebiconimageprovider.cpp: Removed.
        * UIProcess/API/qt/qwebiconimageprovider_p.h: Removed.
        * UIProcess/API/qt/qwebkittest.cpp: Removed.
        * UIProcess/API/qt/qwebkittest_p.h: Removed.
        * UIProcess/API/qt/qwebloadrequest.cpp: Removed.
        * UIProcess/API/qt/qwebloadrequest_p.h: Removed.
        * UIProcess/API/qt/qwebnavigationhistory.cpp: Removed.
        * UIProcess/API/qt/qwebnavigationhistory_p.h: Removed.
        * UIProcess/API/qt/qwebnavigationhistory_p_p.h: Removed.
        * UIProcess/API/qt/qwebnavigationrequest.cpp: Removed.
        * UIProcess/API/qt/qwebnavigationrequest_p.h: Removed.
        * UIProcess/API/qt/qwebpermissionrequest.cpp: Removed.
        * UIProcess/API/qt/qwebpermissionrequest_p.h: Removed.
        * UIProcess/API/qt/qwebpreferences.cpp: Removed.
        * UIProcess/API/qt/qwebpreferences_p.h: Removed.
        * UIProcess/API/qt/qwebpreferences_p_p.h: Removed.
        * UIProcess/API/qt/raw/qrawwebview.cpp: Removed.
        * UIProcess/API/qt/raw/qrawwebview_p.h: Removed.
        * UIProcess/API/qt/raw/qrawwebview_p_p.h: Removed.
        * UIProcess/API/qt/tests/bytearraytestdata.cpp: Removed.
        * UIProcess/API/qt/tests/bytearraytestdata.h: Removed.
        * UIProcess/API/qt/tests/html/basic_page.html: Removed.
        * UIProcess/API/qt/tests/html/basic_page2.html: Removed.
        * UIProcess/API/qt/tests/html/bluesquare.html: Removed.
        * UIProcess/API/qt/tests/html/direct-image-compositing.html: Removed.
        * UIProcess/API/qt/tests/html/inputmethod.html: Removed.
        * UIProcess/API/qt/tests/html/redsquare.html: Removed.
        * UIProcess/API/qt/tests/html/resources/qwkview_noBackground1.png: Removed.
        * UIProcess/API/qt/tests/html/resources/qwkview_noBackground3.png: Removed.
        * UIProcess/API/qt/tests/html/resources/qwkview_paint.png: Removed.
        * UIProcess/API/qt/tests/html/resources/simple_image.png: Removed.
        * UIProcess/API/qt/tests/html/scroll.html: Removed.
        * UIProcess/API/qt/tests/inspectorserver/inspectorserver.pro: Removed.
        * UIProcess/API/qt/tests/inspectorserver/tst_inspectorserver.cpp: Removed.
        * UIProcess/API/qt/tests/publicapi/publicapi.pro: Removed.
        * UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp: Removed.
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro: Removed.
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_linkHovered.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_loadHtml.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_navigationRequested.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView.pro: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_applicationScheme.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_colorChooser.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_download.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_evaluateJavaScript.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_findText.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_fitToView.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_geopermission.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_itemSelector.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_javaScriptDialogs.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadFail.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadHtml.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadProgress.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadProgressSignal.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_loadUrl.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_messaging.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_multiFileUpload.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_navigationHistory.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_notification.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_origin.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_preferences.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_properties.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_resize.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_singleFileUpload.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_titleChanged.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_userScripts.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/WebView/tst_wheelEventHandling.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/common/TestWebView.qml: Removed.
        * UIProcess/API/qt/tests/qmltests/common/alert.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/append-document-title.js: Removed.
        * UIProcess/API/qt/tests/qmltests/common/big-user-script.js: Removed.
        * UIProcess/API/qt/tests/qmltests/common/change-document-title.js: Removed.
        * UIProcess/API/qt/tests/qmltests/common/colorChooser.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/confirm.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/download.zip: Removed.
        * UIProcess/API/qt/tests/qmltests/common/evaluatejavascript.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/favicon.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/favicon.png: Removed.
        * UIProcess/API/qt/tests/qmltests/common/favicon2.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/font-preferences.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/geolocation.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/javascript.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/link.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/localStorage.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/messaging.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/multifileupload.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/notification.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/prompt.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/qrctest.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/redirect.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/select.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/selectwithsize.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/singlefileupload.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/small-favicon.png: Removed.
        * UIProcess/API/qt/tests/qmltests/common/test1.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/test2.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/test3.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/test4.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/test5.html: Removed.
        * UIProcess/API/qt/tests/qmltests/common/titleupdate.js: Removed.
        * UIProcess/API/qt/tests/qmltests/qmltests.pro: Removed.
        * UIProcess/API/qt/tests/qmltests/resources.qrc: Removed.
        * UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp: Removed.
        * UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro: Removed.
        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp: Removed.
        * UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro: Removed.
        * UIProcess/API/qt/tests/qrawwebview/tst_qrawwebview.cpp: Removed.
        * UIProcess/API/qt/tests/tests.pri: Removed.
        * UIProcess/API/qt/tests/testwindow.h: Removed.
        * UIProcess/API/qt/tests/util.cpp: Removed.
        * UIProcess/API/qt/tests/util.h: Removed.
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp: Removed.
        * UIProcess/InspectorServer/qt/WebSocketServerQt.cpp: Removed.
        * UIProcess/InspectorServer/qt/WebSocketServerQt.h: Removed.
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp: Removed.
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp: Removed.
        * UIProcess/qt/BackingStoreQt.cpp: Removed.
        * UIProcess/qt/PageViewportControllerClientQt.cpp: Removed.
        * UIProcess/qt/PageViewportControllerClientQt.h: Removed.
        * UIProcess/qt/QtDialogRunner.cpp: Removed.
        * UIProcess/qt/QtDialogRunner.h: Removed.
        * UIProcess/qt/QtDownloadManager.cpp: Removed.
        * UIProcess/qt/QtDownloadManager.h: Removed.
        * UIProcess/qt/QtGestureRecognizer.cpp: Removed.
        * UIProcess/qt/QtGestureRecognizer.h: Removed.
        * UIProcess/qt/QtPageClient.cpp: Removed.
        * UIProcess/qt/QtPageClient.h: Removed.
        * UIProcess/qt/QtPanGestureRecognizer.cpp: Removed.
        * UIProcess/qt/QtPanGestureRecognizer.h: Removed.
        * UIProcess/qt/QtPinchGestureRecognizer.cpp: Removed.
        * UIProcess/qt/QtPinchGestureRecognizer.h: Removed.
        * UIProcess/qt/QtTapGestureRecognizer.cpp: Removed.
        * UIProcess/qt/QtTapGestureRecognizer.h: Removed.
        * UIProcess/qt/QtWebContext.cpp: Removed.
        * UIProcess/qt/QtWebContext.h: Removed.
        * UIProcess/qt/QtWebError.cpp: Removed.
        * UIProcess/qt/QtWebError.h: Removed.
        * UIProcess/qt/QtWebIconDatabaseClient.cpp: Removed.
        * UIProcess/qt/QtWebIconDatabaseClient.h: Removed.
        * UIProcess/qt/QtWebPageEventHandler.cpp: Removed.
        * UIProcess/qt/QtWebPageEventHandler.h: Removed.
        * UIProcess/qt/QtWebPagePolicyClient.cpp: Removed.
        * UIProcess/qt/QtWebPagePolicyClient.h: Removed.
        * UIProcess/qt/QtWebPageSGNode.cpp: Removed.
        * UIProcess/qt/QtWebPageSGNode.h: Removed.
        * UIProcess/qt/QtWebPageUIClient.cpp: Removed.
        * UIProcess/qt/QtWebPageUIClient.h: Removed.
        * UIProcess/qt/TextCheckerQt.cpp: Removed.
        * UIProcess/qt/WebColorPickerQt.cpp: Removed.
        * UIProcess/qt/WebColorPickerQt.h: Removed.
        * UIProcess/qt/WebContextMenuProxyQt.cpp: Removed.
        * UIProcess/qt/WebContextMenuProxyQt.h: Removed.
        * UIProcess/qt/WebContextQt.cpp: Removed.
        * UIProcess/qt/WebFullScreenManagerProxyQt.cpp: Removed.
        * UIProcess/qt/WebGeolocationProviderQt.cpp: Removed.
        * UIProcess/qt/WebGeolocationProviderQt.h: Removed.
        * UIProcess/qt/WebInspectorProxyQt.cpp: Removed.
        * UIProcess/qt/WebPageProxyQt.cpp: Removed.
        * UIProcess/qt/WebPopupMenuProxyQt.cpp: Removed.
        * UIProcess/qt/WebPopupMenuProxyQt.h: Removed.
        * UIProcess/qt/WebPreferencesQt.cpp: Removed.
        * UIProcess/qt/WebProcessProxyQt.cpp: Removed.
        * WebKit2.pri: Removed.
        * WebKit2.pro: Removed.
        * WebProcess.pro: Removed.
        * WebProcess/Cookies/qt/WebCookieManagerQt.cpp: Removed.
        * WebProcess/InjectedBundle/qt/InjectedBundleQt.cpp: Removed.
        * WebProcess/Plugins/Netscape/qt/PluginProxyQt.cpp: Removed.
        * WebProcess/WebCoreSupport/qt/WebContextMenuClientQt.cpp: Removed.
        * WebProcess/WebCoreSupport/qt/WebDragClientQt.cpp: Removed.
        * WebProcess/WebCoreSupport/qt/WebErrorsQt.cpp: Removed.
        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp: Removed.
        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.h: Removed.
        * WebProcess/WebCoreSupport/qt/WebPopupMenuQt.cpp: Removed.
        * WebProcess/WebPage/qt/WebInspectorQt.cpp: Removed.
        * WebProcess/WebPage/qt/WebPageQt.cpp: Removed.
        * WebProcess/qt/QtBuiltinBundle.cpp: Removed.
        * WebProcess/qt/QtBuiltinBundle.h: Removed.
        * WebProcess/qt/QtBuiltinBundlePage.cpp: Removed.
        * WebProcess/qt/QtBuiltinBundlePage.h: Removed.
        * WebProcess/qt/QtNetworkAccessManager.cpp: Removed.
        * WebProcess/qt/QtNetworkAccessManager.h: Removed.
        * WebProcess/qt/QtNetworkReply.cpp: Removed.
        * WebProcess/qt/QtNetworkReply.h: Removed.
        * WebProcess/qt/SeccompFiltersWebProcessQt.cpp: Removed.
        * WebProcess/qt/SeccompFiltersWebProcessQt.h: Removed.
        * WebProcess/qt/WebProcessMainQt.cpp: Removed.
        * WebProcess/qt/WebProcessQt.cpp: Removed.
        * qt/MainQt.cpp: Removed.
        * qt/PluginMainQt.cpp: Removed.

2013-10-03  Brady Eidson  <beidson@apple.com>

        Move IDBFactoryBackend creation to DatabaseStrategy.
        https://bugs.webkit.org/show_bug.cgi?id=122284

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createIDBFactoryBackend): Fallback to the default for now.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2013-10-03  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed fix of DrawingArea creation on non-Mac platforms after r156793.
        std::make_unique<DrawingAreaImpl>() should be used, as before that revision.

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):

2013-10-02  Anders Carlsson  <andersca@apple.com>

        Remove Qt code from Platform/
        https://bugs.webkit.org/show_bug.cgi?id=122240

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/Connection.h:
        * Platform/Logging.cpp:
        * Platform/Logging.h:
        * Platform/Module.h:
        * Platform/PlatformProcessIdentifier.h:
        * Platform/SharedMemory.h:
        * Platform/WorkQueue.h:
        * Platform/qt/LoggingQt.cpp: Removed.
        * Platform/qt/ModuleQt.cpp: Removed.
        * Platform/qt/WorkQueueQt.cpp: Removed.

2013-10-02  Tim Horton  <timothy_horton@apple.com>

        [mac] Stop using DrawingAreaImpl on PLATFORM(MAC) 
        https://bugs.webkit.org/show_bug.cgi?id=121859
        <rdar://problem/15069359>

        Reviewed by Anders Carlsson.

        The Mac port will now use tiled drawing for all WebKit2 views.

        * Shared/DrawingAreaInfo.h:
        Don't include DrawingAreaTypeImpl as a valid DrawingAreaType on Mac.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        Remove our implementation of drawRect that paints from DrawingAreaImpl's backing store.

        (-[WKView _shouldUseTiledDrawingArea]):
        Removed. Always treated as if it were true, now.

        (-[WKView _createDrawingAreaProxy]):
        Always create a TiledCoreAnimationDrawingAreaProxy now.

        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (-[WKView wantsUpdateLayer]):
        WKView always wants a layer, etc.

        * UIProcess/BackingStore.h:
        Remove Mac-specific BackingStore code, only used for DrawingAreaImpl on Mac.

        * UIProcess/DrawingAreaProxy.h:
        Remove an unneeded include.

        * UIProcess/mac/BackingStoreMac.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        Remove a bunch of files we don't need to build anymore.

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        Never create a DrawingAreaImpl on Mac.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updatePreferences):
        (WebKit::DrawingAreaImpl::resumePainting):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        Remove Mac-specific DrawingAreaImpl code.

        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/mac/LayerTreeHostMac.h: Removed.
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm: Removed.

2013-10-02  Daniel Bates  <dabates@apple.com>

        Fix the Mac WebKit2 build following <http://trac.webkit.org/changeset/139241>
        (https://bugs.webkit.org/show_bug.cgi?id=104197)

        WebContextMac.mm fails to compile when building with network process disabled.

        The constants WebKit2HTTPProxyDefaultsKey and WebKit2HTTPSProxyDefaultsKey,
        defined in WebContextMac.mm, should only be defined when building with the
        network process enabled as these constants are only referenced from
        ENABLE(NETWORK_PROCESS)-guard code.

        * UIProcess/mac/WebContextMac.mm:

2013-10-01  Sam Weinig  <sam@webkit.org>

        CTTE: DOMWrapperWorlds should be passed around by reference
        https://bugs.webkit.org/show_bug.cgi?id=122206

        Reviewed by Andreas Kling.

        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::didClearWindowObjectForFrame):
        (WebKit::InjectedBundlePageLoaderClient::globalObjectIsAvailableForFrame):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.cpp:
        (WebKit::InjectedBundleScriptWorld::getOrCreate):
        (WebKit::InjectedBundleScriptWorld::normalWorld):
        (WebKit::InjectedBundleScriptWorld::coreWorld):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowScriptNPObject):
        (WebKit::PluginView::pluginElementNPObject):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        (WebKit::WebFrameLoaderClient::dispatchGlobalObjectAvailable):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2013-10-01  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/122190> WebKit2 APIs returning CF and NS types should explicitly declare whether they return retained objects.

        This make the APIs easier to use under ARC and can help out the static analyzer.

        Reviewed by Anders Carlsson.

        * Shared/API/c/cf/WKErrorCF.h:
        * Shared/API/c/cf/WKStringCF.h:
        * Shared/API/c/cf/WKURLCF.h:
        * Shared/API/c/cg/WKImageCG.h:
        * Shared/API/c/mac/WKURLRequestNS.h:
        * Shared/API/c/mac/WKURLResponseNS.h:
        * UIProcess/API/C/cg/WKIconDatabaseCG.h:

2013-10-01  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        [Qt][WK2] Fix build after r156688.
        https://bugs.webkit.org/show_bug.cgi?id=122153

        Reviewed by Allan Sandfeld Jensen.

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::createDrawingAreaProxy):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebViewPrivate::createDrawingAreaProxy):
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::createDrawingAreaProxy):
        * UIProcess/qt/QtPageClient.h:
        * WebProcess/WebCoreSupport/qt/WebDragClientQt.cpp:
        (WebKit::convertQPixmapToShareableBitmap):

2013-09-30  Ryuan Choi  <ryuan.choi@samsung.com>

        Build fix for EFL, Qt, Gtk port after r156688
        https://bugs.webkit.org/show_bug.cgi?id=122139

        Reviewed by Anders Carlsson.

        Get rid of more uses of OwnPtr and PassOwnPtr.

        * Shared/API/c/cairo/WKImageCairo.cpp:
        (WKImageCreateFromCairoSurface):
        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateFromQImage):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::createGraphicsContext):
        (WebKit::WebCoordinatedSurface::paintToSurface):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (CoreIPC::encodeImage):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::createDrawingAreaProxy):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::convertCairoSurfaceToShareableBitmap):

2013-09-30  Sam Weinig  <sam@webkit.org>

        Remove support for DOMFileSystem
        https://bugs.webkit.org/show_bug.cgi?id=122137

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2013-09-30  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * NetworkProcess/mac/RemoteNetworkingContext.mm:

2013-09-30  Anders Carlsson  <andersca@apple.com>

        Get rid of more uses of OwnPtr and PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=122136

        Reviewed by Antti Koivisto.

        * NetworkProcess/AsynchronousNetworkLoaderClient.h:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/SynchronousNetworkLoaderClient.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/ArgumentEncoder.h:
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::setImportanceAssertion):
        * Platform/CoreIPC/MessageDecoder.h:
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::receiveSourceEventHandler):
        * Platform/CoreIPC/mac/ImportanceAssertion.h:
        (CoreIPC::ImportanceAssertion::ImportanceAssertion):
        * Platform/mac/LayerHostingContext.h:
        * Platform/mac/LayerHostingContext.mm:
        (WebKit::LayerHostingContext::createForPort):
        (WebKit::LayerHostingContext::createForWindowServer):
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::paint):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::addPluginControllerProxy):
        (WebKit::WebProcessConnection::removePluginControllerProxy):
        (WebKit::WebProcessConnection::createPluginInternal):
        * PluginProcess/WebProcessConnection.h:
        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateFromCGImage):
        * Shared/BlockingResponseMap.h:
        (BlockingResponseMap::waitForResponse):
        (BlockingResponseMap::didReceiveResponse):
        * Shared/Downloads/Download.cpp:
        * Shared/Downloads/Download.h:
        * Shared/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertHandleToDownload):
        * Shared/FileAPI/BlobRegistrationData.cpp:
        (WebKit::BlobRegistrationData::BlobRegistrationData):
        (WebKit::BlobRegistrationData::releaseData):
        (WebKit::BlobRegistrationData::decode):
        * Shared/FileAPI/BlobRegistrationData.h:
        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::registerNPObject):
        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::tryLoad):
        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * Shared/ShareableBitmap.h:
        * Shared/WebURL.h:
        (WebKit::WebURL::create):
        (WebKit::WebURL::WebURL):
        (WebKit::WebURL::parseURLIfNecessary):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::makeCGImageCopy):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):
        (WebKit::webSecItemCopyMatching):
        (WebKit::webSecItemAdd):
        (WebKit::webSecItemUpdate):
        (WebKit::webSecItemDelete):
        (WebKit::SecItemShim::secItemResponse):
        * UIProcess/API/mac/FindIndicatorWindow.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView std::WebKit::]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/BackingStore.cpp:
        * UIProcess/BackingStore.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.mm:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm:
        (WKBundlePageBannerCreateBannerWithCALayer):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::scheduleTimer):
        (WebKit::NetscapePlugin::unscheduleTimer):
        (WebKit::NetscapePlugin::snapshot):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::snapshot):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::paint):
        (WebKit::PluginProxy::update):
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::getFindIndicatorBitmapAndRect):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createWithCoreMainFrame):
        (WebKit::WebFrame::createSubframe):
        (WebKit::WebFrame::create):
        (WebKit::WebFrame::WebFrame):
        * WebProcess/WebPage/WebFrame.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions):
        (WebKit::WebPage::drawRectToImage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:

2013-09-27  Anders Carlsson  <andersca@apple.com>

        Message sending functions should only accept rvalues
        https://bugs.webkit.org/show_bug.cgi?id=122041

        Reviewed by Andreas Kling.

        In order to safely encode move-only types, make all send variants accept rvalues only, except
        for the "send to all processes" ones. For them, copy the message before sending. This ensures that trying
        to send a move-only type in a message will fail to compile.

        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::sendSync):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::send):
        (WebKit::ChildProcessProxy::sendSync):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::sendToNetworkingProcess):
        (WebKit::WebContext::sendToNetworkingProcessRelaunchingIfNecessary):
        (WebKit::WebContext::sendToAllProcesses):
        (WebKit::WebContext::sendToAllProcessesRelaunchingThemIfNecessary):
        (WebKit::WebContext::sendToOneProcess):
        * UIProcess/WebPageGroup.h:
        (WebKit::WebPageGroup::sendToAllProcessesInGroup):

2013-09-30  Benjamin Poulain  <benjamin@webkit.org>

        Remove the code guarded by STYLE_SCOPED
        https://bugs.webkit.org/show_bug.cgi?id=122123

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2013-09-30  Csaba Osztrogonác  <ossy@webkit.org>

        NetworkResourceLoader.messages.in should be ENABLE(NETWORK_PROCESS) guarded
        https://bugs.webkit.org/show_bug.cgi?id=122110

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkResourceLoader.messages.in:

2013-09-30  Mark Rowe  <mrowe@apple.com>

        Fix the build when building against an SDK.

        Xcode helpfully prepends $(SDKROOT) to the paths in FRAMEWORK_SEARCH_PATHS when generating
        the compiler command lines. It can't know to do this for the system framework search paths
        we add manually via OTHER_CFLAGS though, so we need to prefix them with $(SDKROOT) ourself.

        * Configurations/BaseTarget.xcconfig:

2013-09-30  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Fix force_static_libs_as_shared in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121961

        Reviewed by Csaba Osztrogonác.

        Get rid of the unused WebKit2QML library

        * Target.pri:
        * WebKit2.pro:
        * WebKit2QML.pri: Removed.

2013-09-29  Mark Rowe  <mrowe@apple.com>

        Fix the Lion build.

        Ensure that C++ and Objective-C++ files build with the right compiler flags.

        * Configurations/BaseTarget.xcconfig:

2013-09-29  Sam Weinig  <sam@webkit.org>

        Fix the build.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::evaluate):

2013-09-28  Mark Rowe  <mrowe@apple.com>

        Fix some failures with newer versions of clang.

        Some CoreGraphics headers generate warnings under newer versions of clang. Since they're system headers the warnings would
        usually be suppressed, but we're adding the frameworks to the non-system framework search path so they're no longer treated
        as system headers. We address this by removing the system paths from FRAMEWORK_SEARCH_PATHS and using the -iframework compiler
        flag in OTHER_CFLAGS to add the paths to the system framework search path. We have to set OTHER_CFLAGS at the target level
        in order for it to coexist with the ASAN-related OTHER_CFLAGS that's set in DebugRelease.xcconfig.

        Reviewed by Dan Bernstein.

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

2013-09-28  Mark Rowe  <mrowe@apple.com>

        Take Xcode's advice and enable some extra warnings.

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:
        * WebKit2.xcodeproj/project.pbxproj:

2013-09-28  Darin Adler  <darin@apple.com>

        Add Frame::mainFrame and Frame::isMainFrame
        https://bugs.webkit.org/show_bug.cgi?id=122064

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::shouldUseTiledBackingForFrameView):
        Call isMainFrame.

2013-09-27  Anders Carlsson  <andersca@apple.com>

        Message sending functions should only accept rvalues
        https://bugs.webkit.org/show_bug.cgi?id=122041

        Reviewed by Andreas Kling.

        In order to safely encode move-only types, make all send variants accept rvalues only, except
        for the "send to all processes" ones. For them, copy the message before sending. This ensures that trying
        to send a move-only type in a message will fail to compile.

        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::sendSync):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::send):
        (WebKit::ChildProcessProxy::sendSync):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::sendToNetworkingProcess):
        (WebKit::WebContext::sendToNetworkingProcessRelaunchingIfNecessary):
        (WebKit::WebContext::sendToAllProcesses):
        (WebKit::WebContext::sendToAllProcessesRelaunchingThemIfNecessary):
        (WebKit::WebContext::sendToOneProcess):
        * UIProcess/WebPageGroup.h:
        (WebKit::WebPageGroup::sendToAllProcessesInGroup):

2013-09-28  Philippe Normand  <pnormand@igalia.com>

        Unreviewed GTK build fix after r156560.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::paintContents):
        (WebKit::LayerTreeHostGtk::createPageOverlayLayer):
        (WebKit::LayerTreeHostGtk::destroyPageOverlayLayer):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2013-09-28  Mark Rowe  <mrowe@apple.com>

        WebKit2 fails to build with newer versions of clang.

        Reviewed by Anders Carlsson.

        * Shared/VisitedLinkTable.cpp: #if a function that's only used inside an ASSERT.
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm: Remove an unused constant.
        * UIProcess/mac/WKFullScreenWindowController.mm: Ditto.
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm: Ditto.
        * WebProcess/WebPage/FindController.cpp: Ditto.
        * WebProcess/WebPage/WebBackForwardListProxy.cpp: Remove two unused constants.

2013-09-27  Csaba Osztrogonác  <ossy@webkit.org>

        CookieStorageShim should be PLATFORM(MAC) guarded
        https://bugs.webkit.org/show_bug.cgi?id=121423

        Reviewed by Darin Adler.

        Original patch by Kwang Yul Seo <skyul@company100.com>.

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

2013-09-27  Enrica Casucci  <enrica@apple.com>

        Upstream changes to Pasteboard implementation for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=121818

        Reviewed by Benjamin Poulain.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::decodeSharedBuffer):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::writeWebContentToPasteboard):
        (WebKit::WebContext::writeImageToPasteboard):
        (WebKit::WebContext::writeStringToPasteboard):
        (WebKit::WebContext::readStringFromPasteboard):
        (WebKit::WebContext::readURLFromPasteboard):
        (WebKit::WebContext::readBufferFromPasteboard):
        (WebKit::WebContext::getPasteboardItemsCount):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::writeToPasteboard):
        (WebKit::WebPlatformStrategies::getPasteboardItemsCount):
        (WebKit::WebPlatformStrategies::readBufferFromPasteboard):
        (WebKit::WebPlatformStrategies::readURLFromPasteboard):
        (WebKit::WebPlatformStrategies::readStringFromPasteboard):
        (WebKit::WebPlatformStrategies::changeCount):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2013-09-27  Ralph Thomas  <ralpht@gmail.com>

        [WK2][CoordinatedGraphics] fix build after r156560
        https://bugs.webkit.org/show_bug.cgi?id=122028

        Fixing build.

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::paintLayerContents):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2013-09-27  Anders Carlsson  <andersca@apple.com>

        Use std::unique_ptr for GraphicsLayer creation
        https://bugs.webkit.org/show_bug.cgi?id=122020

        Reviewed by Antti Koivisto.

        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::getOrCreateLayer):
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::paintContents):
        (WebKit::LayerTreeHostMac::createPageOverlayLayer):
        (WebKit::LayerTreeHostMac::destroyPageOverlayLayer):
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::createGraphicsLayer):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::paintContents):
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
        (WebKit::TiledCoreAnimationDrawingArea::destroyPageOverlayLayer):

2013-09-27  Beth Dakin  <bdakin@apple.com>

        ScrollbarPainterController should adopt the api to lock overlay scrollbar state
        https://bugs.webkit.org/show_bug.cgi?id=121928

        Reviewed by Sam Weinig.

        This function no longer needs to be implemented by ScrollablArea subclasses.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:

2013-09-27  Andre Moreira Magalhaes   <andre.magalhaes@collabora.co.uk>

        Web Inspector: Make WebKitGTK+ port work with Eclipse chromedevtools plugin
        https://bugs.webkit.org/show_bug.cgi?id=121121

        Reviewed by Gustavo Noronha Silva.

        The chromedevtools plugin (http://code.google.com/p/chromedevtools/) requires a specific
        json format to connect to the webkit inspector.

        The current format is missing some required fields that make the connection with the plugin
        fail.

        The format expected by the plugin is as follows:
          {
           "title": "Foo",
           "url": "http://foo",
           "devtoolsFrontendUrl": "/Main.html?ws=localhost:9222/devtools/page/1",
           "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/1"
          }

        The current format is missing the entries for "devtoolsFrontendUrl" and
        "webSocketDebuggerUrl".

        The plugin also sends an HTTP GET request to http://host:port/json instead of
        http://host:port/pagelist.json when retrieving the pages list.

        This patch fixes the issues by adding support for the missing fields and accepting requests
        for "/json" alongside "/pagelist.json".

        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
        (WebKit::WebInspectorServer::platformResourceForPath):
        Also accept requests for "/json" alongside "pagelist.json".
        (WebKit::WebInspectorServer::buildPageList):
        Add fields required by chromedevtools plugin.

2013-09-26  Darin Adler  <darin@apple.com>

        rename KURL to URL
        https://bugs.webkit.org/show_bug.cgi?id=16214

        Reviewed by Andreas Kling.

        * many files: Renamed, using script.

2013-09-27  Peter Gal  <galpeter@inf.u-szeged.hu>

        Remove unused method parameters from TupleCoder.
        https://bugs.webkit.org/show_bug.cgi?id=122009

        Reviewed by Anders Carlsson.

        In case of TupleCoder<0, Elements...> the parameter
        names for encoder, decoder and tuple are not used.
        By removing the paramter names the unusued paramter
        warning will disappear.

        * Platform/CoreIPC/Arguments.h:

2013-09-06  Jer Noble  <jer.noble@apple.com>

        [Mac] Implement the media controls in JavaScript.
        https://bugs.webkit.org/show_bug.cgi?id=120895

        Reviewed by Dean Jackson.

        Define and turn on ENABLE_MEDIA_CONTROLS_SCRIPT.

        * Configurations/FeatureDefines.xcconfig:

2013-09-27  Darin Adler  <darin@apple.com>

        Add empty MainFrame class
        https://bugs.webkit.org/show_bug.cgi?id=121770

        Reviewed by Andreas Kling.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Storage/StorageAreaMap.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/PageOverlay.cpp:
        * WebProcess/WebPage/WebInspector.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        Include MainFrame.h instead of Frame.h as needed.

2013-09-27  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Fix force_static_libs_as_shared in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121961

        Reviewed by Csaba Osztrogonác.

        Do not add strict ordering for webkit2qml. It is not needed and causes
        Target.pri to be built out of order.

        * WebKit2.pro:

2013-09-26  Anders Carlsson  <andersca@apple.com>

        Remove Windows code
        https://bugs.webkit.org/show_bug.cgi?id=121988

        Reviewed by Antti Koivisto.

        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/win/ConnectionWin.cpp: Removed.
        * Platform/SharedMemory.h:
        * Platform/WorkQueue.h:
        * Platform/win/SharedMemoryWin.cpp: Removed.
        * Platform/win/WorkQueueWin.cpp: Removed.
        * Shared/ChildProcess.cpp:
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::loadPluginsIfNecessary):
        * WebProcess/WebProcess.cpp:

2013-09-26  Anders Carlsson  <andersca@apple.com>

        Stop using PassWeak
        https://bugs.webkit.org/show_bug.cgi?id=121968

        Reviewed by Sam Weinig.

        Update for JavaScriptCore changes.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateJSObject):

2013-09-25  Jer Noble  <jer.noble@apple.com>

        [WK2] Crash at at com.apple.WebKit2: WebKit::VoidCallback::invalidate + 46
        https://bugs.webkit.org/show_bug.cgi?id=121910

        Reviewed by Darin Adler.

        Store a copy of the VoidCallback passed to WKPage, and invalidate the callback
        during dealloc. The VoidCallback class assumes that it will only ever be
        invalidated or invoked once, so change the ASSERTs into an early return.

        * UIProcess/GenericCallback.h:
        (WebKit::VoidCallback::performCallback): Exit early if previously invalidated.
        (WebKit::VoidCallback::invalidate): Ditto.
        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController dealloc]): Invalidate the repaint callback if present.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Ditto & create a new callback.
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]): Clear the callback.

2013-09-26  Tim Horton  <timothy_horton@apple.com>

        Tiled drawing should not imply threaded scrolling
        https://bugs.webkit.org/show_bug.cgi?id=121874
        <rdar://problem/15071494>

        Reviewed by Sam Weinig.

        * Shared/DrawingAreaInfo.h:
        We can have DrawingAreaTypeTiledCoreAnimation without threaded scrolling.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetThreadedScrollingEnabled):
        (WKPreferencesGetThreadedScrollingEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        Add a preference for threaded scrolling.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView WebKit::]):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::create):
        * WebProcess/WebPage/DrawingArea.h:
        Make it so we can use TiledCoreAnimationDrawingArea without ENABLE(THREADED_SCROLLING).

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldUseTiledBackingForFrame):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Override shouldUseTiledBackingForFrame; ask the drawing area if we want a tiled backing for the given frame.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::~WebPage):
        * WebProcess/WebPage/WebPage.h:
        Move attaching and detaching the scrolling tree into WebPage.
        Store whether or not this page is going to use threaded scrolling once, as this
        cannot change through the life of a page.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::~TiledCoreAnimationDrawingArea):
        Move attaching and detaching the scrolling tree into WebPage.

        (WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):
        (WebKit::TiledCoreAnimationDrawingArea::didUninstallPageOverlay):
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        (WebKit::TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition):
        Only do scrolling coordinator work if we have a scrolling coordinator.

        (WebKit::TiledCoreAnimationDrawingArea::shouldUseTiledBackingForFrame):
        TiledCoreAnimationDrawingArea always wants a tiled backing for the main frame.

2013-09-25  Minju Kim  <pmuarteo@gmail.com>

        8 bytes memory leaks in WebProcessMainQt.cpp when proxy is initialized
        https://bugs.webkit.org/show_bug.cgi?id=118515

        Reviewed by Christophe Dumez.

        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::initializeProxy): Handled EnvHttpProxyFactory by using OwnPtr
        to avoid memory leak when it isn't handled by NetworkProxyFactory

2013-09-25  Brady Eidson  <beidson@apple.com>

        Enable the IndexedDB build on Mac, but leave the feature non-functional
        https://bugs.webkit.org/show_bug.cgi?id=121918

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:

2013-09-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r156432.
        http://trac.webkit.org/changeset/156432
        https://bugs.webkit.org/show_bug.cgi?id=121932

        some integer conversion things that need brady to fix
        (Requested by thorton on #webkit).

        * Configurations/FeatureDefines.xcconfig:

2013-09-25  Brady Eidson  <beidson@apple.com>

        Enable the IndexedDB build on Mac, but leave the feature non-functional
        https://bugs.webkit.org/show_bug.cgi?id=121918

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:

2013-09-25  Brent Fulgham  <bfulgham@apple.com>

        Refactor RuntimeEnabledFeatures as a Singleton.
        https://bugs.webkit.org/show_bug.cgi?id=121883.

        Reviewed by Jer Noble.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Use
        Singleton accessor.
        (WebKit::InjectedBundle::setShadowDOMEnabled):
        (WebKit::InjectedBundle::setCSSRegionsEnabled):
        (WebKit::InjectedBundle::setCSSCompositingEnabled):
        (WebKit::InjectedBundle::setSeamlessIFramesEnabled):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Ditto.
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Ditto.

2013-09-25  Brady Eidson  <beidson@apple.com>

        FeatureDefine.xcconfig cleanup (They should all be identical).
        https://bugs.webkit.org/show_bug.cgi?id=121921

        Reviewed by Mark Rowe.

        * Configurations/FeatureDefines.xcconfig:

2013-09-25  Anders Carlsson  <andersca@apple.com>

        Use tuples for encoding IPC messages
        https://bugs.webkit.org/show_bug.cgi?id=121924

        Reviewed by Andreas Kling.

        Yet another step towards getting rid of the Arguments hierarchy.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        (CoreIPC::handleMessageVariadic):
        (CoreIPC::handleMessageDelayed):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        * Scripts/webkit2/messages.py:
        (arguments_type_old):
        (arguments_type):
        (reply_type):
        (decode_type):
        (delayed_reply_type):
        (message_to_struct_declaration):
        * Scripts/webkit2/messages_unittest.py:
        (LoadURL):
        (std):
        (TouchEvent):
        (DidReceivePolicyDecision):
        (Close):
        (PreferencesDidChange):
        (SendDoubleAndFloat):
        (SendInts):
        (CreatePlugin):
        (RunJavaScriptAlert):
        (GetPlugins):
        (GetPluginProcessConnection):
        (TestMultipleAttributes):
        (TestParameterAttributes):
        (TemplateTest):
        (DidCreateWebProcessConnection):
        (InterpretKeyEvent):
        (DeprecatedOperation):
        (ExperimentalOperation):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::send):

2013-09-25  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Fix build with Qt 5.2 QtPosition module
        https://bugs.webkit.org/show_bug.cgi?id=121089

        Reviewed by Simon Hausmann.

        QtLocation -> QtPositioning

        * Target.pri:
        * UIProcess/qt/WebGeolocationProviderQt.cpp:
        * WebKit2.pri:

2013-09-24  Sam Weinig  <sam@webkit.org>

        Remove erroneous reference to libWTF.a in the WebKit2 Xcode project file.

        Rubber-stamped by Alexey Proskuryakov.

        * WebKit2.xcodeproj/project.pbxproj:

2013-09-24  Sam Weinig  <sam@webkit.org>

        Remove the Windows-specific rules from WebKit2's DerivedSources.make, Windows is not supported anymore
        https://bugs.webkit.org/show_bug.cgi?id=121895

        Reviewed by Alexey Proskuryakov.

        * DerivedSources.make:
        Remove Windows-specific rules, and, now that only the Mac is using this file, remove the
        Mac checks.

2013-09-24  Anders Carlsson  <andersca@apple.com>

        Only allow rvalues to be passed as synchronous message replies
        https://bugs.webkit.org/show_bug.cgi?id=121870

        Reviewed by Andreas Kling.

        This lets us get rid of a nasty const cast and is more logical.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        (CoreIPC::MessageSender::sendSync):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::sendSync):

2013-09-24  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix.

        * UIProcess/WebNetworkInfoManagerProxy.h:

2013-09-24  Alexey Proskuryakov  <ap@apple.com>

        Fix Mac build now.
        
        * UIProcess/WebContext.messages.in:

2013-09-24  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r156350.

        It seems that nested ifdefs don't work in messages.in files, so don't use them.

        * UIProcess/WebContext.messages.in:

2013-09-24  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r156354 and r156360.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::processMessage):
        (CoreIPC::Connection::sendOutgoingMessage):

2013-09-24  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r156349.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::processMessage):

2013-09-24  Anders Carlsson  <andersca@apple.com>

        Use std::unique_ptr for decoders as well
        https://bugs.webkit.org/show_bug.cgi?id=121868

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
        (CoreIPC::Connection::SyncMessageState::dispatchMessages):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::sendSyncMessageFromSecondaryThread):
        (CoreIPC::Connection::waitForSyncReply):
        (CoreIPC::Connection::processIncomingSyncReply):
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::enqueueIncomingMessage):
        (CoreIPC::Connection::dispatchMessage):
        (CoreIPC::Connection::dispatchOneMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::sendSync):
        (CoreIPC::Connection::waitForAndDispatchImmediately):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::createMessageDecoder):
        (CoreIPC::Connection::receiveSourceEventHandler):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postSynchronousMessage):

2013-09-24  Anders Carlsson  <andersca@apple.com>

        Move MessageEncoder and ArgumentEncoder to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=121861

        Reviewed by Andreas Kling.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkProcess.h:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::sendSyncReply):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::sendSyncMessageFromSecondaryThread):
        (CoreIPC::Connection::sendOutgoingMessages):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessageDelayed):
        * Platform/CoreIPC/MessageReceiver.h:
        (CoreIPC::MessageReceiver::didReceiveSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        * Platform/CoreIPC/MessageSender.cpp:
        (CoreIPC::MessageSender::sendMessage):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::sendOutgoingMessage):
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * PluginProcess/WebProcessConnection.h:
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::dispatchSyncMessage):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::send):
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::didReceiveSyncMessage):
        * Shared/Plugins/NPRemoteObjectMap.h:
        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::postMessage):
        * UIProcess/Downloads/DownloadProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveSyncMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::dispatchSyncMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebIconDatabase.h:
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveSyncMessage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage):
        * WebProcess/WebProcess.h:

2013-09-24  Anders Carlsson  <andersca@apple.com>

        Remove encoder create functions
        https://bugs.webkit.org/show_bug.cgi?id=121853

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        * Platform/CoreIPC/ArgumentEncoder.h:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC::MessageEncoder::setIsSyncMessage):
        * Platform/CoreIPC/MessageEncoder.h:
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::send):
        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::postMessage):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::postMessageToInjectedBundle):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::EncoderAdapter):
        (WebKit::EncoderAdapter::dataReference):
        (WebKit::EncoderAdapter::encodeBytes):
        (WebKit::EncoderAdapter::encodeBool):
        (WebKit::EncoderAdapter::encodeUInt16):
        (WebKit::EncoderAdapter::encodeUInt32):
        (WebKit::EncoderAdapter::encodeUInt64):
        (WebKit::EncoderAdapter::encodeInt32):
        (WebKit::EncoderAdapter::encodeInt64):
        (WebKit::EncoderAdapter::encodeFloat):
        (WebKit::EncoderAdapter::encodeDouble):
        (WebKit::EncoderAdapter::encodeString):
        * WebProcess/WebPage/EncoderAdapter.h:

2013-09-24  Enrica Casucci  <enrica@apple.com>

        Upstream changes to Pasteboard implementation for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=121818

        Reviewed by Darin Adler.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        (headers_for_type):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::encodeSharedBuffer):
        (CoreIPC::decodeSharedBuffer):
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::writeWebContentToPasteboard):
        (WebKit::WebContext::writeImageToPasteboard):
        (WebKit::WebContext::writeStringToPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::writeToPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2013-09-24  Anders Carlsson  <andersca@apple.com>

        Remove create functions from MessageDecoder and ArgumentDecoder
        https://bugs.webkit.org/show_bug.cgi?id=121850

        Reviewed by Antti Koivisto.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::ArgumentDecoder):
        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::createMessageDecoder):
        * WebProcess/WebPage/DecoderAdapter.cpp:
        (WebKit::DecoderAdapter::DecoderAdapter):
        (WebKit::DecoderAdapter::decodeBytes):
        (WebKit::DecoderAdapter::decodeBool):
        (WebKit::DecoderAdapter::decodeUInt16):
        (WebKit::DecoderAdapter::decodeUInt32):
        (WebKit::DecoderAdapter::decodeUInt64):
        (WebKit::DecoderAdapter::decodeInt32):
        (WebKit::DecoderAdapter::decodeInt64):
        (WebKit::DecoderAdapter::decodeFloat):
        (WebKit::DecoderAdapter::decodeDouble):
        (WebKit::DecoderAdapter::decodeString):
        * WebProcess/WebPage/DecoderAdapter.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::postInjectedBundleMessage):

2013-09-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/14971518> WebKit should build against the Xcode default toolchain when targeting OS X 10.8

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2013-09-24  Lorenzo Tilve  <ltilve@igalia.com>

        [GTK] Fix compilation problems when setting ENABLE_DRAG_SUPPORT = FALSE
        https://bugs.webkit.org/show_bug.cgi?id=121782

        Reviewed by Martin Robinson.

        Disabled drag functions.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkit_web_view_base_class_init):
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:

2013-09-24  Anders Carlsson  <andersca@apple.com>

        Begin adopting std::tuple for IPC decoding
        https://bugs.webkit.org/show_bug.cgi?id=121848

        Reviewed by Sam Weinig.

        This is the first step towards getting rid of the horrible Arguments class hierarchy.

        * Platform/CoreIPC/Arguments.h:
        (CoreIPC::TupleCoder::encode):
        (CoreIPC::TupleCoder::decode):
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        (CoreIPC::handleMessage):
        (CoreIPC::handleMessageVariadic):
        (CoreIPC::handleMessageDelayed):

2013-09-24  ChangSeok Oh  <changseok.oh@collabora.com>

        [EFL] Build failed at ProcessLauncherEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=121826

        Reviewed by Gyuyoung Kim.

        Fixed a build failure with adding socket.h.

        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:

2013-09-23  Patrick Gansterer  <paroga@webkit.org>

        use NOMINMAX instead of #define min min
        https://bugs.webkit.org/show_bug.cgi?id=73563

        Reviewed by Brent Fulgham.

        Use NOMINMAX instead of #define min/max as a cleaner
        way of ensuring that Windows system header files don't
        define min/max as macro in the first place.

        * config.h:

2013-09-23  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][WK2] A plugin dirtyRect within iframe remains after moving to a different page.
        https://bugs.webkit.org/show_bug.cgi?id=121600

        Reviewed by Gustavo Noronha Silva.

        Nowhere to destroy NetscapePlugin::m_platformPluginWidget even after destroying
        an instance of NetscapePlugin. So the created GtkWidget remains visible.

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

2013-09-23  Sam Weinig  <sam@webkit.org>

        Add back the SharedWorkerStrategy to prevent crashing.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createSharedWorkerStrategy):
        (WebKit::WebPlatformStrategies::isAvailable):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2013-09-23  Sam Weinig  <sam@webkit.org>

        SharedWorkerProcess code is dead
        https://bugs.webkit.org/show_bug.cgi?id=121563

        Reviewed by Alexey Proskuryakov.

        Remove SharedWorkerProcess code.

2013-09-23  Patrick Gansterer  <paroga@webkit.org>

        Cleanup CMake files in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121767

        Reviewed by Gyuyoung Kim.

        Sort files and unify style.

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

2013-09-21  Darin Adler  <darin@apple.com>

        Add ExecState::uncheckedArgument and use where possible to shrink a bit
        https://bugs.webkit.org/show_bug.cgi?id=121750

        Reviewed by Andreas Kling.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod): In a loop.
        (WebKit::JSNPObject::callObject): Ditto.
        (WebKit::JSNPObject::callConstructor): Ditto.

2013-09-18  Anders Carlsson  <andersca@apple.com>

        Remove the ENABLE_PLUGIN_PROCESS #define
        https://bugs.webkit.org/show_bug.cgi?id=121569

        Reviewed by Andreas Kling.

        Fold the ENABLE_PLUGIN_PROCESS #define into the NETSCAPE_PLUGIN_API #define since 
        building plug-ins without the plug-in process is not supported.

        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        * PluginProcess/PluginControllerProxy.cpp:
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in:
        * PluginProcess/PluginCreationParameters.cpp:
        * PluginProcess/PluginCreationParameters.h:
        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/PluginProcess.h:
        * PluginProcess/PluginProcess.messages.in:
        * PluginProcess/WebProcessConnection.cpp:
        * PluginProcess/WebProcessConnection.h:
        * PluginProcess/WebProcessConnection.messages.in:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        * PluginProcess/mac/PluginProcessMac.mm:
        * Shared/Plugins/NPIdentifierData.cpp:
        * Shared/Plugins/NPIdentifierData.h:
        * Shared/Plugins/NPObjectMessageReceiver.cpp:
        * Shared/Plugins/NPObjectMessageReceiver.h:
        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        * Shared/Plugins/NPObjectProxy.cpp:
        * Shared/Plugins/NPObjectProxy.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/Plugins/NPRemoteObjectMap.h:
        * Shared/Plugins/NPVariantData.cpp:
        * Shared/Plugins/NPVariantData.h:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getMIMETypesFromPluginBundle):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        * Shared/Plugins/PluginProcessCreationParameters.h:
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::addDYLDEnvironmentAdditions):
        (WebKit::serviceName):
        (WebKit::createProcess):
        * UIProcess/Plugins/PluginProcessManager.cpp:
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::~WebPluginSiteDataManager):
        (WebKit::WebPluginSiteDataManager::invalidate):
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setProcessModel):
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::updateProcessSuppressionStateOfGlobalChildProcesses):
        * WebKit2Prefix.h:
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        * WebProcess/Plugins/PluginProcessConnection.h:
        * WebProcess/Plugins/PluginProcessConnection.messages.in:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/Plugins/PluginProcessConnectionManager.messages.in:
        * WebProcess/Plugins/PluginProxy.cpp:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2013-09-18  Sam Weinig  <sam@webkit.org>

        Replace use of OwnArrayPtr<Foo> with std::unique_ptr<Foo[]> in WebKit and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121568

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::processMessage):
        (CoreIPC::readBytesFromSocket):
        (CoreIPC::Connection::sendOutgoingMessage):
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::feedTouchEvent):
        (EwkView::feedTouchEvents):
        * UIProcess/API/efl/SnapshotImageGL.h:
        * UIProcess/API/efl/ewk_file_chooser_request.cpp:
        (ewk_file_chooser_request_files_choose):
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::createArgsArray):
        (WebKit::ProcessLauncher::launchProcess):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyContextMenuItems):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:

2013-09-18  Anders Carlsson  <andersca@apple.com>

        RefPtrHashMap should work with move only types
        https://bugs.webkit.org/show_bug.cgi?id=121564

        Reviewed by Andreas Kling.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::storageArea):

2013-09-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitScriptWorld not in API documentation
        https://bugs.webkit.org/show_bug.cgi?id=121539

        Reviewed by Philippe Normand.

        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add WebKitScriptWorld.

2013-09-17  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix for !ENABLE(CUSTOM_PROTOCOLS) platforms
        https://bugs.webkit.org/show_bug.cgi?id=121417

        Reviewed by Alexey Proskuryakov.

        Original patch by Balazs Kelemen <kbalazs@webkit.org>.

        * CMakeLists.txt: Add CustomProtocolManagerProxy.messages.in.
        * DerivedSources.pri: Add CustomProtocolManagerProxy.messages.in.
        * GNUmakefile.am: Add CustomProtocolManagerProxy.messages.in.
        * GNUmakefile.list.am: Add CustomProtocolManagerProxyMessages.h and CustomProtocolManagerProxyMessageReceiver.cpp.
        * NetworkProcess/NetworkProcess.cpp: Add the missing ENABLE(CUSTOM_PROTOCOLS) guard.
        (WebKit::NetworkProcess::NetworkProcess):
        * UIProcess/WebProcessProxy.cpp: Remove the unnecessary conditional include.

2013-09-17  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Test /webkit2/WebKitWebInspectorServer/test-open-debugging-session times out after r155714
        https://bugs.webkit.org/show_bug.cgi?id=121383

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/tests/TestInspectorServer.cpp:
        (openRemoteDebuggingSession): use the page contents' to check the remote debugging of the page
        has been successfuly opened, as the title is no longer the same after the switch to the new
        frontend.

2013-09-16  Enrica Casucci  <enrica@apple.com>

        Remove unused function didSetSelectionTypesForPasteboard from EditorClient.
        https://bugs.webkit.org/show_bug.cgi?id=121464

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2013-09-17  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix for !(ENABLE(WEB_ARCHIVE) || ENABLE(MHTML)) platforms
        https://bugs.webkit.org/show_bug.cgi?id=121491

        Reviewed by Darin Adler.

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

2013-09-17  Alberto Garcia  <berto@igalia.com>

        [GTK] Unreviewed make distcheck fix.

        * GNUmakefile.am: include WebProcess/Network/*.in in the tarball,
        it's needed for generating WebResourceLoaderMessage*.{cpp,h}.

2013-09-17  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK][EFL] Add ResourceError::internalError() after r138387
        https://bugs.webkit.org/show_bug.cgi?id=121433

        Reviewed by Christophe Dumez.

        Original patch by Balazs Kelemen <kbalazs@webkit.org>
        and Kwang Yul Seo <skyul@company100.net>

        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp:
        (WebKit::internalError):
        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:
        (WebKit::internalError):

2013-09-17  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        Fix Qt WK2 build after r155888
        https://bugs.webkit.org/show_bug.cgi?id=121471

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::createDrawingAreaProxy):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebViewPrivate::createDrawingAreaProxy):
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::createDrawingAreaProxy):
        * UIProcess/qt/QtPageClient.h:

2013-09-17  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK][EFL] Add NetworkProcess support for ProcessLauncher
        https://bugs.webkit.org/show_bug.cgi?id=121434

        Reviewed by Sam Weinig.

        Original patch by Balazs Kelemen <kbalazs@webkit.org>
        and Kwang Yul Seo <skyul@company100.net>

        * Shared/ProcessExecutablePath.h:
        * Shared/efl/ProcessExecutablePathEfl.cpp:
        (WebKit::executablePathOfNetworkProcess):
        * Shared/gtk/ProcessExecutablePathGtk.cpp:
        (WebKit::executablePathOfNetworkProcess):
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2013-09-17  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix for !USE(PROTECTION_SPACE_AUTH_CALLBACK) platforms
        https://bugs.webkit.org/show_bug.cgi?id=121431

        Reviewed by Alexey Proskuryakov.

        Mising guards added.

        Original patch by Balazs Kelemen <kbalazs@webkit.org>
        and Kwang Yul Seo <skyul@company100.net>

        * NetworkProcess/NetworkResourceLoader.messages.in:
        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

2013-09-17  Csaba Osztrogonác  <ossy@webkit.org>

        WebResourceLoader.messages.in should be ENABLE(NETWORK_PROCESS) guarded
        https://bugs.webkit.org/show_bug.cgi?id=121424

        Reviewed by Alexey Proskuryakov.

        Original patch by Balazs Kelemen <kbalazs@webkit.org>.

        * CMakeLists.txt:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebProcess/Network/WebResourceLoader.messages.in: ENABLE(NETWORK_PROCESS) guard added.

2013-09-16  Manuel Rego Casasnovas  <rego@igalia.com>

        Unreviewed, fixing the GTK WK2 debug build after r155911.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp: Add missing using
        namespace WebCore.

2013-09-16  Sergio Correia  <sergio.correia@openbossa.org>

        Fix EFL build after r155888
        https://bugs.webkit.org/show_bug.cgi?id=121465

        Reviewed by Gyuyoung Kim.

        Update WebView to follow the changes in PageClient in r155888.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::createDrawingAreaProxy): Use createOwned (addded in
        r155407) to return the DrawingAreaProxy from DrawingAreaProxyImpl.
        * UIProcess/CoordinatedGraphics/WebView.h: Update createDrawingAreaProxy()
        signature to match PageClient.h.

2013-09-16  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Make symbol export filter more strict, and disable for dev/test builds
        https://bugs.webkit.org/show_bug.cgi?id=120586

        Reviewed by Martin Robinson.

        * GNUmakefile.am: only use the version script if developer mode is disabled.

2013-09-16  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix after 155905.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::sendOutgoingMessage): use OwnPtr instead of PassOwnPtr.

2013-09-16  Joseph Pecoraro  <pecoraro@apple.com>

        Add RunLoop::isMain and use it in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121459

        Reviewed by Anders Carlsson.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (getIconSurfaceSynchronously):
        (iconDataReadyForPageURLCallback):
        (webkit_favicon_database_get_favicon_uri):
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _delayedResumeAutodisplayTimerFired]):
        (-[WKPrintingView _adjustPrintingMarginsForHeaderAndFooter]):
        (pageDidDrawToImage):
        (pageDidDrawToPDF):
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]):
        (pageDidComputePageRects):
        (-[WKPrintingView _askPageToComputePageRects]):
        (prepareDataForPrintingOnSecondaryThread):
        (-[WKPrintingView knowsPageRange:]):
        (-[WKPrintingView _drawPreview:]):
        (-[WKPrintingView drawRect:]):
        (-[WKPrintingView _drawPageBorderWithSizeOnMainThread:]):
        (-[WKPrintingView drawPageBorderWithSize:]):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::globalPageMap):

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

        Replace more uses of PassOwnPtr with OwnPtr in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121453

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SecondaryThreadPendingSyncReply::SecondaryThreadPendingSyncReply):
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::sendSyncReply):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::sendSyncMessageFromSecondaryThread):
        (CoreIPC::Connection::waitForSyncReply):
        (CoreIPC::Connection::processIncomingSyncReply):
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::enqueueIncomingMessage):
        (CoreIPC::Connection::dispatchMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::PendingSyncReply::PendingSyncReply):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):

2013-09-16  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, fixing the GTK WK2 build after r155888.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/API/gtk/PageClientImpl.h:

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

        Remove some uses of PassOwnPtr in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121443

        Reviewed by Andreas Kling.

        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        * UIProcess/API/mac/FindIndicatorWindow.h:
        * UIProcess/API/mac/FindIndicatorWindow.mm:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView WebKit::]):
        (-[WKView _setFindIndicator:fadeOut:animate:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (PageOverlayClientImpl::PageOverlayClientImpl):
        (WKBundlePageOverlayCreate):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::createWebEvent):
        * WebProcess/Plugins/PluginView.h:

2013-09-16  Andre Moreira Magalhaes   <andre.magalhaes@collabora.co.uk>

        Web Inspector: Do not try to parse incomplete HTTP requests
        https://bugs.webkit.org/show_bug.cgi?id=121123

        Reviewed by Carlos Garcia Campos.

        Update to incorporate additional review suggestions.

        * UIProcess/API/gtk/tests/TestInspectorServer.cpp:
        (sendIncompleteRequest):
        Fix memory leaks, change test timeout from 2 seconds to 1 second,
        use "0" instead of "NULL" and use g_assert_no_error when checking
        for GError.

2013-09-16  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Implement pan and flick gesture.
        https://bugs.webkit.org/show_bug.cgi?id=107101

        Reviewed by Gyuyoung Kim.

        Implement pan gesture to scroll page by movement of point and stop
        scrolling smoothly using ease-in-out-quad algorithm after touched
        point is removed from the screen.

        Use Ecore_Animator in order to process movement once per each framing
        time slot instead of processing all movement.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::scrollBy):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/GestureRecognizer.cpp:
        (WebKit::GestureHandler::view):
        (WebKit::GestureHandler::GestureHandler):
        (WebKit::GestureHandler::~GestureHandler):
        (WebKit::GestureHandler::reset):
        (WebKit::GestureHandler::panAnimatorCallback):
        (WebKit::GestureHandler::handlePanStarted):
        (WebKit::GestureHandler::handlePan):
        (WebKit::GestureHandler::handlePanFinished):
        (WebKit::GestureHandler::flickAnimatorCallback):
        (WebKit::GestureHandler::handleFlick):
        (WebKit::GestureRecognizer::noGesture):
        (WebKit::GestureRecognizer::reset):
        * UIProcess/efl/EasingCurves.cpp: Added.
        (WebKit::easeInOutQuad):
        * UIProcess/efl/EasingCurves.h: Added.

2013-09-16  Wojciech Bielawski  <w.bielawski@samsung.com>

        [WKTR] WebKitTestRunner's eventSender.contextClick() returns objects without implemented click() method.
        https://bugs.webkit.org/show_bug.cgi?id=98410

        Reviewed by Darin Adler.

        Add API required to implement click() method for context menu entry, used by WebkitTestRunner::EventSender.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageClickMenuItem):
        (WKBundlePageCopyContextMenuItemTitle):
        (WKBundlePageGetContextMenuItems):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2013-09-15  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed make distcheck fix.

        * GNUmakefile.list.am:

2013-09-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] The web inspector is not rendered when docked in WebKit2 when AC is used
        https://bugs.webkit.org/show_bug.cgi?id=121381

        Reviewed by Martin Robinson.

        When accelerated compositing results are rendered we return early
        from webkitWebViewBaseDraw and other WebView children are not
        drawn. We need to chain up the draw signal handler, so that the
        GtkContainer propagates the draw to all its children.

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

2013-09-14  Dan Bernstein  <mitz@apple.com>

        Remove non-Apple cruft from the installed WKBase.h
        https://bugs.webkit.org/show_bug.cgi?id=121370

        Reviewed by Darin Adler.

        * Configurations/WebKit2.xcconfig: Set INSTALLHDRS_SCRIPT_PHASE to YES.
        * WebKit2.xcodeproj/project.pbxproj: Added a script build phase that runs unifdef on
        the installed WKBase.h with __APPLE__ defined and various BUILDING_* and WTF_USE_* symbols
        undefined.

2013-09-14  Dan Bernstein  <mitz@apple.com>

        Build fix after r155770.

        * UIProcess/API/mac/WKViewPrivate.h: Added WKBase.h import.

2013-09-14  Dan Bernstein  <mitz@apple.com>

        [mac] Public header WKBase.h imports a private header, WKBaseMac.h
        https://bugs.webkit.org/show_bug.cgi?id=121216

        Reviewed by Darin Adler.

        * Shared/API/c/WKBase.h: Moved definitions of enums and WK_EXPORT and WK_INLINE macros
        out of this files.
        * Shared/API/c/WKDeclarationSpecifiers.h: Copied from Source/WebKit2/Shared/API/c/WKBase.h.
        Contains definitions of WK_EXPORT and WK_INLINE.
        * Shared/API/c/WKSharedAPICast.h: Added #includes.
        * Shared/API/c/WKUserContentInjectedFrames.h: Copied from Source/WebKit2/Shared/API/c/WKBase.h.
        Contains enum definition.
        * Shared/API/c/WKUserScriptInjectionTime.h: Copied from Source/WebKit2/Shared/API/c/WKBase.h.
        Contains enum definition.
        * UIProcess/API/C/WKPageGroup.h: Added #includes.
        * UIProcess/API/mac/WKBrowsingContextController.h: Removed WKBase.h import from this public
        header, replacing it with WKDeclarationSpecifiers.h import.
        * UIProcess/API/mac/WKBrowsingContextControllerPrivate.h: Added WKBase.h import.
        * UIProcess/API/mac/WKBrowsingContextGroup.h: Removed WKBase.h import from this public
        header, added necessary public imports.
        * UIProcess/API/mac/WKBrowsingContextGroupPrivate.h: Added WKBase.h import.
        * UIProcess/API/mac/WKBrowsingContextLoadDelegate.h: Removed WKBase.h import from public
        header.
        * UIProcess/API/mac/WKConnection.h: Ditto. Added WKDeclarationSpecifiers.h import.
        * UIProcess/API/mac/WKConnectionInternal.h: Added WKBase.h import.
        * UIProcess/API/mac/WKProcessGroup.h: Removed WKBase.h import from public header, added
        WKDeclarationSpecifiers.h import.
        * UIProcess/API/mac/WKProcessGroupPrivate.h: Added WKBase.h import.
        * UIProcess/API/mac/WKView.h: Removed WKBase.h import from public header, added
        WKDeclarationSpecifiers.h import.
        * WebKit2.xcodeproj/project.pbxproj: Added new public header files, made WKBase.h private.
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h: Removed WKBase.h import from public header,
        added WKDeclarationSpecifiers.h import.
        * WebProcess/InjectedBundle/API/mac/WKDOMNodePrivate.h: Added WKBase.h import.
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h: Removed WKBase.h import from public
        header, added WKDeclarationSpecifiers.h import.
        * WebProcess/InjectedBundle/API/mac/WKDOMRangePrivate.h: Added WKBase.h import.
        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.h: Removed WKBase.h import from public
        header, added WKDeclarationSpecifiers.h import.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h: Ditto.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
        Added WKBase.h import.

2013-09-14  Alberto Garcia  <berto@igalia.com>

        [GTK] WebKitGTK+ is linking against libxslt in too many places
        https://bugs.webkit.org/show_bug.cgi?id=121356

        Reviewed by Martin Robinson.

        Don't use LIBXSLT_CFLAGS when compiling libWebCoreGtk2, no source
        files use libxslt there.

        * GNUmakefile.am:

2013-09-13  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix attempt for WK2 build.

        * WebProcess/Plugins/PluginView.cpp: Changed ScriptState to ExecState.
        (WebKit::PluginView::performJavaScriptURLRequest):

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

        Use nullptr instead of 0 in calls to HashMap::add
        https://bugs.webkit.org/show_bug.cgi?id=121322

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::getOrCreate):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addBackForwardItem):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::webPageGroup):

2013-09-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Move to the new web inspector
        https://bugs.webkit.org/show_bug.cgi?id=120647

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: bundle the remote inspector page list HTML into libwebkit2gtk as a GResource.
        * UIProcess/API/gtk/tests/GNUmakefile.am: no need to set WEBKIT_INSPECTOR_PATH anymore.
        * UIProcess/API/gtk/tests/InspectorTestServer.cpp:
        (main): ditto.
        * UIProcess/API/gtk/tests/TestInspector.cpp:
        (beforeAll): ditto.
        * UIProcess/API/gtk/tests/TestInspectorServer.cpp:
        (testInspectorServerPageList): update paths to the internal resource ones.
        * UIProcess/InspectorServer/WebInspectorServer.h:
        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
        (WebKit::WebInspectorServer::platformResourceForPath): ditto.
        (WebKit::WebInspectorServer::buildPageList): ditto.
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::isMainInspectorPage): factor out checking for the inspector main resource, to make
        the code more readable.
        (WebKit::decidePolicyForNavigationAction): use SchemeRegistry to figure out whether the
        request is for a local resource instead of KURL::isLocalFile() to allow using schemes
        other than file:// for the inspector resources.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL): use the new internal resource URL; since it's now
        static we no longer need to generate and store the string.
        (WebKit::WebInspectorProxy::inspectorBaseURL): ditto.
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        (WebKit::WebInspector::localizedStringsURL): use the new internal resource URL.
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformInitializeWebProcess): register resource as a local scheme.

2013-09-13  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Fix build with namespaced Qt.

        Unreviewed build fix.

        One forward declaration of QUrl was missing proper namespace macros.

        * UIProcess/API/qt/qquickurlschemedelegate_p.h:

2013-09-12  Simon Fraser  <simon.fraser@apple.com>

        Avoid extra scrollbar-related layouts for overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=121267

        Reviewed by Beth Dakin.
        
        view->resize() will call setNeedsLayout() if necessary, and may already have
        done layout, so the extra setNeedsLayout() here was bad.

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

2013-09-12  Andre Moreira Magalhaes   <andre.magalhaes@collabora.co.uk>

        Web Inspector: Do not try to parse incomplete HTTP requests
        https://bugs.webkit.org/show_bug.cgi?id=121123

        Reviewed by Darin Adler.

        When working on a patch for bug #121121 I found an issue with the InspectorServer where it would try
        to parse an HTTP message before receiving the full message and thus fail connecting with the
        chromedevtools plugin.

        What happens is that the WebSocketServerConnection receives buffers on
        WebSocketServerConnection::didReceiveSocketStreamData and calls
        WebSocketServerConnection::readHTTPMessage which then checks if we have a valid request by calling
        HTTPRequest::parseHTTPRequestFromBuffer. If the request is valid it tries to parse the message and
        clears the buffer, otherwise it continues adding data to the internal buffer until we have a valid
        request.

        The problem is that currently HTTPRequest::parseHTTPRequestFromBuffer considers the request as valid
        before receiving the full message. To solve this we should make the method check if the request
        headers end with a blank line otherwise we consider the request as invalid (see also
        http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html).

        * UIProcess/API/gtk/tests/TestInspectorServer.cpp:
        (sendIncompleteRequest):
        (beforeAll):
        Add GTK specific test to check if the inspector server replies to incomplete requests.
        * UIProcess/InspectorServer/HTTPRequest.cpp:
        (WebKit::HTTPRequest::parseHeaders):
        Do not consider request valid if headers didn't end with a blank line.

2013-09-12  Anders Carlsson  <andersca@apple.com>

        SharedBuffer::createNSData should return a RetainPtr<NSData>
        https://bugs.webkit.org/show_bug.cgi?id=121237

        Reviewed by Darin Adler.

        Update for WebCore changes.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView writeSelectionToPasteboard:types:]):
        (-[WKView _setPromisedData:WebCore::withFileName:withExtension:withTitle:withURL:withVisibleURL:withArchive:WebCore::forPasteboard:]):
        (-[WKView namesOfPromisedFilesDroppedAtDestination:]):

2013-09-12  Anders Carlsson  <andersca@apple.com>

        SharedBuffer::createCFData should return RetainPtr<CFDataRef>
        https://bugs.webkit.org/show_bug.cgi?id=121230

        Reviewed by Darin Adler.

        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer):
        * Shared/WebArchiveResource.cpp:
        (WebKit::WebArchiveResource::data):

2013-09-12  Zalan Bujtas  <zalan@apple.com>

        REGRESSION: Inline PDF that are cached fail to appear in iframe.
        https://bugs.webkit.org/show_bug.cgi?id=75449

        Reviewed by Darin Adler.

        Make sure 'frame is from page cache' flag is set for subframes too.

        WebFrameLoaderClient::m_frameCameFromPageCache == true forces plugins
        to be loaded manually. It ensures that the plugin raw data is fetched again
        while the containing frame is being restored from the page cache.
        (Plugins get destroyed when the frame goes to page cache.)

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        This gets called only on the frame where the actual history navigation happens.
        (WebKit::WebFrameLoaderClient::didRestoreFromPageCache):
        This gets called for all the restored frames.

2013-09-11  Simon Fraser  <simon.fraser@apple.com>

        Make sure that layout is up-to-date when moving a WKView into a window, to avoid !needsLayout() assertions in RenderView::paint()
        https://bugs.webkit.org/show_bug.cgi?id=121196

        Reviewed by Tim Horton.
        
        When a WKView was moved into a window, it was possible for us to paint
        without ensuring that layout is up-to-date. Fix this by having
        WebPage::setIsInWindow() update layout if we are moving to a window.

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

2013-09-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Remove Gail dependency from build system for GTK3
        https://bugs.webkit.org/show_bug.cgi?id=119673

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Removed GAIL_LIBS.

2013-09-11  Alberto Garcia  <berto@igalia.com>

        [WK2] [GTK] LayerTreeHostGtk: don't set m_isValid to false if glContext() returns null
        https://bugs.webkit.org/show_bug.cgi?id=120892

        Reviewed by Martin Robinson.

        If the GL context cannot be created then m_isValid is set to false
        during the initialization of LayerTreeHostGtk.

        This is not really necessary since the rest of the code already
        deals with that situation, so it doesn't have any effect other
        than breaking the assertion in invalidate().

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

2013-09-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r154899.
        http://trac.webkit.org/changeset/154899
        https://bugs.webkit.org/show_bug.cgi?id=121162

        It didn't fix the problem and broke other unit tests
        (Requested by KaL on #webkit).

        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::resizeView):

2013-09-11  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        WTF::OwnPtr should behave similarly with the rest of WTF smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=120773

        Reviewed by Anders Carlsson.

        Before the change OwnPtr could take either the pointer type or the pointed-to type, which was bad
        for the following reasons:
        - It distinguished OwnPtr behaviour from other WTF smart pointer classes behaviour (so it was confusing for the Client).
        - It was potential error-prone as it actually modified the type given by the Client in opaque way.

        * UIProcess/API/efl/ewk_database_manager.cpp:
        (getDatabaseOriginsCallback):
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (getStorageOriginsCallback):

2013-09-11  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix.

        * GNUmakefile.list.am: Duplicated NetscapePluginModuleNone.cpp & NetscapePluginNone.cpp.
        They cause build breaks of multiple definitions when targeting wayland build.

2013-09-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate more HTML type checks and casting
        https://bugs.webkit.org/show_bug.cgi?id=121080

        Reviewed by Andreas Kling.

        Clean-up remained functions of HTML elements using auto-generated isFooElement(),
        and replace toFooElement() with ELEMENT_TYPE_CASTS() macro.

        Besides this patch clean-up unnecessary checks which are being supported by
        auto-generated isFooElement().

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::containsAnyFormControls):

2013-09-10  Marcelo Morais  <m.morais@samsung.com>

        [EFL] WebInspector: Move to new webinspector
        https://bugs.webkit.org/show_bug.cgi?id=119559

        Reviewed by Gyuyoung Kim.

        Loading the new Web Inspector page instead of the old inspector.
        Co-Author: Andre Loureiro <andre.vl@samsung.com>

        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL):

2013-09-10  Sergio Villar Senin  <svillar@igalia.com>

        [WK2][GTK] Frequent crashes when showing context menus in Debug builds
        https://bugs.webkit.org/show_bug.cgi?id=121099

        Reviewed by Carlos Garcia Campos.

        Disconnect signal handlers when destroying the context menu proxy
        object. This avoids use-after-free crashes when opening several
        context menus in a row.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::WebContextMenuProxyGtk::append):
        (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk):
        * UIProcess/gtk/WebContextMenuProxyGtk.h:

2013-09-10  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] make use of qtHaveModule() 
        https://bugs.webkit.org/show_bug.cgi?id=121090

        Reviewed by Jocelyn Turcotte.
        Patch by Oswald Buddenhagen <oswald.buddenhagen@digia.com>

        Use qtHaveModule instead of our own haveQtModule.

        * WebProcess.pro:

2013-09-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] /webkit2/WebKitWebView/default-menu fails when GtkSettings:gtk-show-input-method-menu is disabled
        https://bugs.webkit.org/show_bug.cgi?id=121088

        Reviewed by Xan Lopez.

        * UIProcess/API/gtk/tests/TestContextMenu.cpp: Always check
        Unicode submenu is present in default context menu for editable
        content.

2013-09-09  Dean Jackson  <dino@apple.com>

        [WebGL] Allow multithreaded OpenGL contexts
        https://bugs.webkit.org/show_bug.cgi?id=121062

        Reviewed by Simon Fraser.

        Expose a new preference "multithreadedWebGLEnabled".

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetMultithreadedWebGLEnabled):
        (WKPreferencesGetMultithreadedWebGLEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * mac/WebKit2.order:

2013-09-09  Dean Jackson  <dino@apple.com>

        Enable WebGL for OS X nightlies
        https://bugs.webkit.org/show_bug.cgi?id=121040

        Reviewed by Beth Dakin.

        * Shared/WebPreferencesStore.h: Set initial value to true.

2013-09-08  Anders Carlsson  <andersca@apple.com>

        Begin moving off of TypeTraits.h
        https://bugs.webkit.org/show_bug.cgi?id=121006

        Reviewed by Darin Adler.

        Convert uses of WTF type traits to STL type traits.

        * Platform/CoreIPC/ArgumentCoder.h:
        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/ArgumentEncoder.h:
        * Platform/CoreIPC/Arguments.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toImpl):

2013-09-09  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix.

        * GNUmakefile.list.am: Typo - left-over \ from a copy/paste, most likely.

2013-09-09  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] Cancel the current active WebKitAuthenticationRequest on load failed
        https://bugs.webkit.org/show_bug.cgi?id=120350

        Reviewed by Carlos Garcia Campos.

        The default dialog does not get closed and the authentication is not cancelled
        if loading fails or is stopped on a page which requires HTTP authentication.

        This patch cancels the authentication request on load failed
        and adds new authentication cancelled signal in WebKitAuthenticationRequest
        to allow the application handling of authentication UI.

        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (authenticationCancelled):
        (webkitAuthenticationDialogInitialize):
        (webkitAuthenticationDialogDispose):
        (webkitAuthenticationDialogNew):
        * UIProcess/API/gtk/WebKitAuthenticationDialog.h:
        * UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:
        (webkit_authentication_request_class_init):
        (webkit_authentication_request_cancel):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewAuthenticate):
        (webkitWebViewLoadFailed):
        (webkitWebViewHandleAuthenticationChallenge):
        (webkitWebViewCancelAuthenticationRequest):
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewAuthenticationLoadCancelled):
        (beforeAll):

2013-09-09  Brian Holt  <brian.holt@samsung.com>

        [GTK][WK2] Update ContextMenu Download API
        https://bugs.webkit.org/show_bug.cgi?id=120763

        Reviewed by Carlos Garcia Campos.

        Mark the new Download items in the Context Menu with the Since
        tag, and include a unit test for Context Menu audio.

        * UIProcess/API/gtk/WebKitContextMenuActions.h:
        * UIProcess/API/gtk/tests/TestContextMenu.cpp:
        (testContextMenuDefaultMenu):

2013-09-08  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [wk2] REGRESSION (r154673): PDF scrolling moves very slowly
        https://bugs.webkit.org/show_bug.cgi?id=120542

        Reviewed by Tim Horton.

        Handle 'wheel' events in addition to 'mousewheel'. This fixes
        PDF scrolling.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEvent):

2013-09-08  Anders Carlsson  <andersca@apple.com>

        Move WTF::notFound to Vector.h and delete NotFound.h
        https://bugs.webkit.org/show_bug.cgi?id=120990

        Reviewed by Sam Weinig.

        * Shared/EditorState.h:

2013-09-07  Anders Carlsson  <andersca@apple.com>

        Get rid of PassOwnArrayPtr
        https://bugs.webkit.org/show_bug.cgi?id=120964

        Reviewed by Andreas Kling.

        Remove unneeded includes.

        * Shared/ImmutableArray.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:

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

        Range::ownerDocument should return Document&
        https://bugs.webkit.org/show_bug.cgi?id=120908

        Reviewed by Andreas Kling.

        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange textRects]):

2013-09-05  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE] Add c++0x into CXX_FLAGS as a default
        https://bugs.webkit.org/show_bug.cgi?id=120812

        Unreviewed build fix for EFL ports.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h: Added constexpr for in-class initialization.
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp: Added space between strings.
        (EWK2UnitTest::EWK2UnitTestEnvironment::defaultTestPageUrl):
        (EWK2UnitTest::EWK2UnitTestEnvironment::defaultTheme):
        (EWK2UnitTest::EWK2UnitTestEnvironment::urlForResource):

2013-09-05  Alexey Proskuryakov  <ap@apple.com>

        WKFullScreenWindowController extends lifetime of WKView, deleting it at a wrong time
        https://bugs.webkit.org/show_bug.cgi?id=120792
        <rdar://problem/14884666>

        Reviewed by Jer Noble.

        * UIProcess/API/mac/WKView.mm: (-[WKView fullScreenWindowController]):
        Use a newly minted initializer for the controller.

        * UIProcess/mac/WKFullScreenWindowController.h: Removed unused web view accessors.
        Changed the class to take web view at initialization time.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:]): Initialize the controller
        inone step.
        (-[WKFullScreenWindowController dealloc]): WebView is now a raw pointer, no need
        to zero it.
        (-[WKFullScreenWindowController close]): Make sure to not leave a dangling WKView
        pointer (this method is indirectly but inevitably called when WKView is deallocated).

2013-09-05  Anders Carlsson  <andersca@apple.com>

        Replace uses of CLANG_PRAGMA with #pragma

        Rubber-stamped by Andreas Kling.

        This file is only compiled by clang anyway.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::load):

2013-09-05  Anders Carlsson  <andersca@apple.com>

        GCAssertions.h should use STL type traits and static_assert
        https://bugs.webkit.org/show_bug.cgi?id=120785

        Reviewed by Andreas Kling.

        Update for JavaScriptCore changes.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:

2013-09-05  Alberto Garcia  <berto@igalia.com>

        [WK2] [GTK] Remove the test to disable AC under Wayland from WebKitWebViewGroup
        https://bugs.webkit.org/show_bug.cgi?id=120762

        Reviewed by Gustavo Noronha Silva.

        The code to disable AC under Wayland is not run if we're using
        WebKitTestRunner, so it would be better to move it to
        WebKitWebViewBase.

        However it's not really necessary to do that, instead it's much
        simpler to disable accelerated compositing in all cases unless we
        know we can support it.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseUpdatePreferences):
        * UIProcess/API/gtk/WebKitWebViewGroup.cpp:
        (webkitWebViewGroupAttachSettingsToPageGroup):

2013-09-04  Alberto Garcia  <berto@igalia.com>

        [WK2][GTK] ASSERTION in WebKit::LayerTreeHostGtk::invalidate
        https://bugs.webkit.org/show_bug.cgi?id=117733

        Reviewed by Martin Robinson.

        If the GL context cannot be created then an invalid
        LayerTreeHostGtk object will be returned.

        This patch disables accelerated compositing if the system doesn't
        support it.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewUpdateSettings):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseUpdatePreferences):
        (webkitWebViewBaseCreateWebPage):
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

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

        Unreviewed, rolling out r154989.
        http://trac.webkit.org/changeset/154989
        https://bugs.webkit.org/show_bug.cgi?id=120678

        This patch might broke apps using webkitgtk not from the main
        thread (Requested by msanchez on #webkit).

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRunAsModal):
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):

2013-09-04  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add support for the Wayland build target
        https://bugs.webkit.org/show_bug.cgi?id=120627

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.list.am: Build X11-specific NetscapePluginModule and NetscapePlugin classes if building the X11 target,
        fall back to the generic, empty classes otherwise.
        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::PluginProcessMainUnix): Guard the NetscapePluginModule::scanPlugin() invocation with PLUGIN_ARCHITECTURE(X11),
        it's at the moment specific to the X11 implementation of the Netscape plugins.
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp: Guard PluginProcessProxy::scanPlugin() with PLUGIN_ARCHITECTURE(X11),
        just like it's guarded in the PluginProcessProxy class declaration.
        * UIProcess/cairo/BackingStoreCairo.cpp: Additionally guard <gdk/gdkx.h> and WidgetBackingStoreGtkX11 inclusion and use
        with PLATFORM(X11), this code should only be built when building the X11 target.
        (WebKit::createBackingStoreForGTK):
        * UIProcess/gtk/WebPageProxyGtk.cpp: Guard the createPluginContainer() and windowedPluginGeometryDidChange() methods and their
        helper functions and objects with PLUGIN_ARCHITECTURE(X11), just like they're guarded in the WebPageProxy class declaration.
        * config.h: Only define PLUGIN_ARCHITECTURE_X11 to 1 if we're actually building the X11 target.

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

        REGRESSION (r154967) window resize is very choppy
        https://bugs.webkit.org/show_bug.cgi?id=120653

        Reviewed by Andreas Kling.

        Andreas Kling spotted the bad change.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForMessage): Roll out this incorrect change.
        The code here is not the same as a call to take.

2013-09-03  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] gdk threads deprecated functions calls should be refactored
        https://bugs.webkit.org/show_bug.cgi?id=120070

        Reviewed by Mario Sanchez Prada.

        Removed deprecated functions gdk_threads_leave()/gdk_threads_enter() functions since
        there is no more checks for threads lock in GTK 3.6.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewRunAsModal):
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp:
        (WebKit::WebPopupMenuProxyGtk::showPopupMenu):

2013-09-03  Brian Holt  <brian.holt@samsung.com>

        [GTK] [WK2] TestContextMenu default-menu fails
        https://bugs.webkit.org/show_bug.cgi?id=120459

        Reviewed by Gustavo Noronha Silva.

        Add context menu items for downloading media elements.

        * UIProcess/API/gtk/WebKitContextMenuActions.cpp:
        (webkitContextMenuActionGetActionTag):
        (webkitContextMenuActionGetForContextMenuItem):
        (webkitContextMenuActionGetLabel):
        * UIProcess/API/gtk/WebKitContextMenuActions.h:
        * UIProcess/API/gtk/tests/TestContextMenu.cpp:

2013-09-02  Darin Adler  <darin@apple.com>

        Cut down on double hashing and code needlessly using hash table iterators
        https://bugs.webkit.org/show_bug.cgi?id=120611

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForMessage): Use take instead of find/remove.

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::removePageGroup): Use the return value from remove
        instead of find/remove.

        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
        (WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
        Use take instead of find/remove.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::frameDidFinishLoading): Use take instead of find/remove.
        (WebKit::NetscapePlugin::frameDidFail): Use take instead of find/remove.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem): Use take instead of find/remove.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didFinishCheckingText): Use take instead of get/remove so we
        hash only once.
        (WebKit::WebPage::didCancelCheckingText): Ditto.
        (WebKit::WebPage::stopExtendingIncrementalRenderingSuppression): Use the return
        value from remove instead of contains/remove so we hash only once.

2013-09-02  Darin Adler  <darin@apple.com>

        [Mac] No need for HardAutorelease, which is same as CFBridgingRelease
        https://bugs.webkit.org/show_bug.cgi?id=120569

        Reviewed by Andy Estes.

        * Platform/mac/StringUtilities.mm:
        (WebKit::nsStringFromWebCoreString): Use CFBridgingRelease. Also
        changed condition to be a little cleaner and use a constant string for empty
        strings as well as null strings.

        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (autoreleased): Switched from autorelease to CFBridgingRelease for strings,
        which eliminates a type cast and makes this work under GC, although I don't
        think we should compile WebKit2 for GC.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        Use CFBridgingRelease.

2013-09-02  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r154909): caused many crashes on Qt WK2, EFL WK2
        https://bugs.webkit.org/show_bug.cgi?id=120600

        Reviewed by Andreas Kling.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::decode): keyTime should be double here too.

2013-09-01  Alexey Proskuryakov  <ap@apple.com>

        [WK2][Mac] Drag and drop tests interfere with user's UI
        https://bugs.webkit.org/show_bug.cgi?id=120538

        Reviewed by Dan Bernstein.

        * UIProcess/API/mac/WKView.mm: (-[WKView _setDragImage:at:linkDrag:]): Make it possible
        to override drag initiation in subclasses. It is a bit unfortunate that this exposes
        a deprecated API that we call, but probably not unfortunate enough to invent a new
        scary looking name for the same function, and conditionally call that if implemented
        by subclass.

2013-08-31  Santosh Mahto  <santosh.ma@samsung.com>

        warning: unused parameter point and area in EwkView.cpp:1390
        https://bugs.webkit.org/show_bug.cgi?id=120545

        Reviewed by Darin Adler.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::didFindZoomableArea): Added UNUSED_PARAM.

2013-08-31  Jae Hyun Park  <jae.park@company100.net>

        Remove unused variable in LayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=118950

        Reviewed by Anders Carlsson.

        m_waitingForUIProcess has been renamed to m_isWaitingForRenderer as of
        r152183, and it is a private variable in CoordinatedLayerTreeHost. Thus,
        we don't need m_waitingForUIProcess in LayerTreeHost.

        * WebProcess/WebPage/LayerTreeHost.h:

2013-08-30  Brian Holt  <brian.holt@samsung.com>

        [GTK] [WK2] TestWebKitWebView snapshot fails
        https://bugs.webkit.org/show_bug.cgi?id=120404

        Reviewed by Darin Adler.

        Fixed the snapshot test failure caused by GTK no longer allowing
        widgets to resize.  Instead, resize the WebView by resizing the
        window and waiting for the event to complete asynchronously.

        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::resizeView):

2013-08-30  Csaba Osztrogonác  <ossy@webkit.org>

        Add USE(PROTECTION_SPACE_AUTH_CALLBACK) guards to canAuthenticateAgainstProtectionSpace()
        https://bugs.webkit.org/show_bug.cgi?id=120351

        Reviewed by Darin Adler.

        * NetworkProcess/AsynchronousNetworkLoaderClient.cpp:
        * NetworkProcess/AsynchronousNetworkLoaderClient.h:
        * NetworkProcess/NetworkLoaderClient.h:
        * NetworkProcess/SynchronousNetworkLoaderClient.cpp:
        * NetworkProcess/SynchronousNetworkLoaderClient.h:

2013-08-30  Gabor Abraham  <abrhm@inf.u-szeged.hu>

        Fix, remove unused parameter in UIProcess/WebColorPicker.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=120525

        Reviewed by Darin Adler.

        * UIProcess/WebColorPicker.cpp:
        (WebKit::WebColorPicker::showColorPicker):

2013-08-30  Tamas Czene  <tczene@inf.u-szeged.hu>

        Resolve unused parameter warning in WebPlatformStrategies.cpp
        https://bugs.webkit.org/show_bug.cgi?id=120515

        Reviewed by Darin Adler.

        * WebProcess/WebPage/TapHighlightController.cpp:
        (WebKit::TapHighlightController::drawRect):

2013-08-30  Tamas Czene  <tczene@inf.u-szeged.hu>

        Resolve unused parameter warning in FindController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=120516

        Reviewed by Darin Adler.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):

2013-08-30  Tamas Czene  <tczene@inf.u-szeged.hu>

        Resolve unused parameter warning in WKBundlePageOverlay.cpp
        https://bugs.webkit.org/show_bug.cgi?id=120521

        Reviewed by Andreas Kling.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlayFractionFadedIn):

2013-08-30  Antti Koivisto  <antti@apple.com>

        Remove code behind ENABLE(DIALOG_ELEMENT)
        https://bugs.webkit.org/show_bug.cgi?id=120467

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2013-08-29  Sam Weinig  <sam@webkit.org>

        Add ENABLE gaurds for Promises
        https://bugs.webkit.org/show_bug.cgi?id=120488

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

2013-08-29  Zan Dobersek  <zdobersek@igalia.com>

        [Automake] libWebCoreDOM.la could use a better name
        https://bugs.webkit.org/show_bug.cgi?id=120232

        Reviewed by Martin Robinson.

        * GNUmakefile.am: libWebCoreDOM has a new name - libGObjectDOMBindings.

2013-08-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Download Web Archive of Inspected Page
        https://bugs.webkit.org/show_bug.cgi?id=119774

        Reviewed by Timothy Hatcher.

        Update to support InspectorFrontendHost.save's new base64Encoded
        parameter. It means the incoming content is binary data, not a string.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::save):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformSave):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSave):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformSave):
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformSave):
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::save):
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::save):
        * WebProcess/WebPage/WebInspector.h:

2013-08-29  Brian Holt  <brian.holt@samsung.com>

        [GTK] [WK2] TestWebKitWebView page-visibility fails
        https://bugs.webkit.org/show_bug.cgi?id=120406

        Reviewed by Gustavo Noronha Silva.

        Removed the webkit prefix for document visibility properties.

        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewPageVisibility):

2013-08-28  Chris Curtis  <chris_curtis@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=119548
        Refactoring Exception throws.

        Reviewed by Geoffrey Garen.
        
        Moved setting an exception into the vm, These functions changed to use the new functionality.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::throwInvalidAccessError):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::moveGlobalExceptionToExecState):

2013-08-28  Anders Carlsson  <andersca@apple.com>

        Allow the Flash plug-in to open its preference pane
        https://bugs.webkit.org/show_bug.cgi?id=120431
        <rdar://problem/14857039>

        Reviewed by Andreas Kling.

        Forward the -[NSWorkspace openFile:] call to the UI process and allow opening
        the Flash preference pane (if Flash asks for it).

        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::replacedNSWorkspace_openFile):
        (WebKit::initializeCocoaOverrides):
        (WebKit::PluginProcess::openFile):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::openURL):
        (WebKit::shouldOpenFile):
        (WebKit::PluginProcessProxy::openFile):

2013-08-28  Tamas Czene  <tczene@inf.u-szeged.hu>

        [wk2] Resolve unused parameters in WebPlatformStrategies.cpp
        https://bugs.webkit.org/show_bug.cgi?id=120410

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPluginInfo):
        (WebKit::WebPlatformStrategies::transientLocalStorageNamespace):

2013-08-28  Tamas Czene  <tczene@inf.u-szeged.hu>

        [wk2] Resolve unused parameter warnings in the WebProcess.cpp
        https://bugs.webkit.org/show_bug.cgi?id=120412

        Reviewed by Darin Adler.

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

2013-08-28  Darin Adler  <darin@apple.com>

        Eliminate Pasteboard::generalPasteboard
        https://bugs.webkit.org/show_bug.cgi?id=120392

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection):
        Use createForGlobalSelection instead of generalPasteboard and setSelectionMode.

2013-08-28  Ábrahám Gábor  <abrhm@inf.u-szeged.hu>

        Fix unused variable warning.
        https://bugs.webkit.org/show_bug.cgi?id=120396

        Reviewed by Allan Sandfeld Jensen.

        Fix unused variable compiler warning in PageOverlay.h

        * WebProcess/WebPage/PageOverlay.h:
        (WebKit::PageOverlay::Client::copyAccessibilityAttributeValue):
        (WebKit::PageOverlay::Client::copyAccessibilityAttributeNames):


2013-08-28  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Only set up a RedirectedXCompositeWindow if running under an X11 display
        https://bugs.webkit.org/show_bug.cgi?id=120321

        Reviewed by Gustavo Noronha Silva.

        Only set up the RedirectedXCompositeWindow member of the WebKitWebViewBasePrivate struct
        if we're running under an X11 display. This is now done in the webkitWebViewBaseConstructed
        function rather than the constructor, which is removed.

        This allows for the UIProcess to run in a Wayland environment even when built with accelerated
        compositing enabled. Of course, at the moment there's no support yet for accelerated compositing
        under Wayland, so we fall back to rendering the backing store. No changes are introduced to
        the behavior under X11 - accelerated compositing will be used where possible, if supported.

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

2013-08-28  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Disable accelerated compositing under Wayland
        https://bugs.webkit.org/show_bug.cgi?id=120347

        Reviewed by Martin Robinson.

        Accelerated compositing is not yet supported under the Wayland display protocol,
        so it should be disabled. Since it is enabled by default and the GTK WK2 API does
        not provide any way to change that, it's enough to disable it when attaching the
        WebKitSettings object to the WebPageGroup if running under Wayland.

        * UIProcess/API/gtk/WebKitWebViewGroup.cpp:
        (webkitWebViewGroupAttachSettingsToPageGroup):

2013-08-28  Alexandre Abreu  <alexandre.abreu@canonical.com>

        Add a 'isMainFrame' parameter to QWebNavigationRequest.
        https://bugs.webkit.org/show_bug.cgi?id=118860

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qwebnavigationrequest.cpp:
        (QWebNavigationRequestPrivate::QWebNavigationRequestPrivate):
        (QWebNavigationRequest::QWebNavigationRequest):
        (QWebNavigationRequest::navigationType):
        (QWebNavigationRequest::isMainFrame):
        * UIProcess/API/qt/qwebnavigationrequest_p.h:
        * UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp:
        * UIProcess/qt/QtWebPagePolicyClient.cpp:
        (WebKit::QtWebPagePolicyClient::decidePolicyForNavigationAction):
        * UIProcess/qt/QtWebPagePolicyClient.h:

2013-08-27  Luciano Wolf  <luciano.wolf@openbossa.org>

        100% cpu usage for "transition: opacity" animation
        https://bugs.webkit.org/show_bug.cgi?id=120012

        Reviewed by Noam Rosenthal.

        Schedule animation timer after scheduling a layer flush. This way it
        won't overwrite animation timer with "0", thus avoiding 100% cpu usage.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::scheduleAnimation):

2013-08-27  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2][Soup] Add WebFrameNetworkingContext::webFrameLoaderClient() after r154490
        https://bugs.webkit.org/show_bug.cgi?id=120353

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::webFrameLoaderClient):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:

2013-08-26  Santosh Mahto  <santosh.ma@samsung.com>

        Fixing compilation warning "unused parameter" in WebPageProxy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=120205

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
        Added UNUSED_PARAM to avoid warning.

2013-08-23  Andy Estes  <aestes@apple.com>

        Fix issues found by the Clang Static Analyzer
        https://bugs.webkit.org/show_bug.cgi?id=120230

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (autoreleased): Don't leak CFURLs when in Objective-C GC.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        Don't leak CFStrings when in Objective-C GC.

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

        [WK2] Buildfix for non Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=120294

        Reviewed by Darin Adler.

        * NetworkProcess/AsynchronousNetworkLoaderClient.cpp:
        (WebKit::AsynchronousNetworkLoaderClient::didReceiveBuffer):
        * NetworkProcess/NetworkResourceLoader.h:

2013-08-26  Alexey Proskuryakov  <ap@apple.com>

        [Mac] can-read-in-dragstart-event.html and can-read-in-copy-and-cut-events.html fail
        https://bugs.webkit.org/show_bug.cgi?id=113094

        Reviewed by Darin Adler.

        Return new pasteboard change count from all functions that change it.

        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::pasteboardCopy):
        (WebKit::WebContext::addPasteboardTypes):
        (WebKit::WebContext::setPasteboardTypes):
        (WebKit::WebContext::setPasteboardPathnamesForType):
        (WebKit::WebContext::setPasteboardStringForType):
        (WebKit::WebContext::setPasteboardBufferForType):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::copy):
        (WebKit::WebPlatformStrategies::changeCount):
        (WebKit::WebPlatformStrategies::addTypes):
        (WebKit::WebPlatformStrategies::setTypes):
        (WebKit::WebPlatformStrategies::setBufferForType):
        (WebKit::WebPlatformStrategies::setPathnamesForType):
        (WebKit::WebPlatformStrategies::setStringForType):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2013-08-26  Andreas Kling  <akling@apple.com>

        Unreviewed build fix.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createWithCoreMainFrame):
        (WebKit::WebFrame::createSubframe):

2013-08-26  Pratik Solanki  <psolanki@apple.com>

        PageGroup::groupSettings() should return a reference
        https://bugs.webkit.org/show_bug.cgi?id=120319

        Reviewed by Andreas Kling.

        PageGroup::m_groupSettings is never NULL so we can just return a reference from groupSettings().

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):

2013-08-26  Andreas Kling  <akling@apple.com>

        WebCore: Let Page create the main Frame.
        <https://webkit.org/b/119964>

        Reviewed by Anders Carlsson.

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

            This starts out with a null WebFrame* pointer now.

        (WebKit::WebFrameLoaderClient::setWebFrame):

            WebFrame hooks itself up through this as soon as it's constructed.

        (WebKit::WebFrameLoaderClient::frameLoaderDestroyed):

            Tweak an out-of-date comment. The ref() we're balancing out comes from
            WebFrame::create().

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createWithCoreMainFrame):

            Rewrote createMainFrame() as createWithCoreMainFrame(). The new method wraps
            an existing WebCore::Frame instead of creating a new one.

        (WebKit::WebFrame::createSubframe):

            Merged WebFrame::init() into here since the logic isn't shared with main
            Frame creation anymore.

        (WebKit::WebFrame::create):
        (WebKit::WebFrame::WebFrame):

            Call WebFrameLoaderClient::setWebFrame(this).

        * WebProcess/WebPage/WebFrame.h:

            WebFrame::m_frameLoaderClient is now an OwnPtr rather than an inline member.
            This way it can be created before the WebFrame.

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

            Set up a WebFrameLoaderClient and pass it to the Page constructor along with
            the other PageClients.

2013-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKit2 API for isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=103377

        Reviewed by Anders Carlsson.

        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestWebExtensions.cpp:
        (testWebExtensionWindowObjectCleared):
        (scriptDialogCallback):
        (runJavaScriptInIsolatedWorldFinishedCallback):
        (testWebExtensionIsolatedWorld):
        (beforeAll):
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
        (echoCallback):
        (windowObjectCleared):
        (getWebPage):
        (methodCallCallback):
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.cpp:
        (webkit_frame_get_javascript_context_for_script_world): New public
        method to tget the JavaScript execution context for a given script
        world.
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorld.cpp: Added.
        (scriptWorlds): Global WebKitScriptWorld map.
        (_WebKitScriptWorldPrivate::~_WebKitScriptWorldPrivate):
        (webkitScriptWorldGet): Get the WebKitScriptWorld wrapping the
        given injected bundle script world.
        (webkitScriptWorldGetInjectedBundleScriptWorld): Get the injected
        bundle script world wrapped by the given WebKitScriptWorld.
        (webkitScriptWorldWindowObjectCleared): Emit
        WebKitScriptWorld::window-object-cleared signal.
        (webkitScriptWorldCreate): Create a new WebKitScriptWorld wrapping
        the given injected bundle script world.
        (createDefaultScriptWorld): Create the default WebKitScriptWorld
        wrapping the normal world.
        (webkit_script_world_get_default): Return the default WebKitScriptWorld.
        (webkit_script_world_new): Create a new isolated WebKitScriptWorld.
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorld.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorldPrivate.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (didClearWindowObjectForFrame): Call webkitScriptWorldWindowObjectCleared().
        (webkitWebPageCreate): Add implementation for callback
        didClearWindowObjectForFrame in injected bundle loader client.
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:
        Include WebKitScriptWorld.h.

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WebKit2] Offsets for WKBundlePageLoaderClient in APIClientTraits are wrong
        https://bugs.webkit.org/show_bug.cgi?id=120268

        Reviewed by Anders Carlsson.

        * Shared/APIClientTraits.cpp: Use always the first member of every
        version as the offset of the version.

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add missing initializer for pluginLoadPolicy in WKPageLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=120289

        Reviewed by Philippe Normand.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView): Add initializer for pluginLoadPolicy
        and rename the comment of the previous one as
        pluginLoadPolicy_deprecatedForUseWithV2.

2013-08-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] webkitCredentialGetCredential returns a temporary in g_return_val_if_fail
        https://bugs.webkit.org/show_bug.cgi?id=120287

        Reviewed by Philippe Normand.

        * UIProcess/API/gtk/WebKitCredential.cpp:
        (webkitCredentialGetCredential): Use ASSERT() instead of
        g_return_val_if_fail() since this is a private function.

2013-08-25  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r154565.

        * UIProcess/API/gtk/tests/TestInspector.cpp: Include the Vector header.
        * UIProcess/API/gtk/tests/TestResources.cpp: Ditto.

2013-08-24  Darin Adler  <darin@apple.com>

        Frame::tree should return a reference instead of a pointer
        https://bugs.webkit.org/show_bug.cgi?id=120259

        Reviewed by Andreas Kling.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createFrame):
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::searchWithSpotlight):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::frameWithSelection):
        (WebKit::FindController::rectsForTextMatches):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::init):
        (WebKit::WebFrame::contentsAsString):
        (WebKit::WebFrame::name):
        (WebKit::WebFrame::childFrames):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::clearMainFrameName):
        (WebKit::WebPage::setDrawsBackground):
        (WebKit::WebPage::setDrawsTransparentBackground):
        (WebKit::WebPage::setWindowResizerSize):
        (WebKit::frameWithSelection):
        (WebKit::WebPage::unmarkAllMisspellings):
        (WebKit::WebPage::unmarkAllBadGrammar):
        (WebKit::pageContainsAnyHorizontalScrollbars):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::forceRepaint):
        Use tree(). instead of tree()->.

2013-08-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r154545.
        http://trac.webkit.org/changeset/154545
        https://bugs.webkit.org/show_bug.cgi?id=120252

        Broke WebKit2 API tests (Requested by andersca on #webkit).

        * GNUmakefile.list.am:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestWebExtensions.cpp:
        (beforeAll):
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
        (methodCallCallback):
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.cpp:
        (webkit_frame_get_javascript_global_context):
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorld.cpp: Removed.
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorld.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorldPrivate.h: Removed.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitWebPageCreate):
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:

2013-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKit2 API for isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=103377

        Reviewed by Anders Carlsson.

        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestWebExtensions.cpp:
        (testWebExtensionWindowObjectCleared):
        (scriptDialogCallback):
        (runJavaScriptInIsolatedWorldFinishedCallback):
        (testWebExtensionIsolatedWorld):
        (beforeAll):
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
        (echoCallback):
        (windowObjectCleared):
        (getWebPage):
        (methodCallCallback):
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.cpp:
        (webkit_frame_get_javascript_context_for_script_world): New public
        method to tget the JavaScript execution context for a given script
        world.
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.h:
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorld.cpp: Added.
        (scriptWorlds): Global WebKitScriptWorld map.
        (_WebKitScriptWorldPrivate::~_WebKitScriptWorldPrivate):
        (webkitScriptWorldGet): Get the WebKitScriptWorld wrapping the
        given injected bundle script world.
        (webkitScriptWorldGetInjectedBundleScriptWorld): Get the injected
        bundle script world wrapped by the given WebKitScriptWorld.
        (webkitScriptWorldWindowObjectCleared): Emit
        WebKitScriptWorld::window-object-cleared signal.
        (webkitScriptWorldCreate): Create a new WebKitScriptWorld wrapping
        the given injected bundle script world.
        (createDefaultScriptWorld): Create the default WebKitScriptWorld
        wrapping the normal world.
        (webkit_script_world_get_default): Return the default WebKitScriptWorld.
        (webkit_script_world_new): Create a new isolated WebKitScriptWorld.
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorld.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitScriptWorldPrivate.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (didClearWindowObjectForFrame): Call webkitScriptWorldWindowObjectCleared().
        (webkitWebPageCreate): Add implementation for callback
        didClearWindowObjectForFrame in injected bundle loader client.
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:
        Include WebKitScriptWorld.h.

2013-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose WebKitFrame in WebKit2GTK+ web extensions API
        https://bugs.webkit.org/show_bug.cgi?id=119743

        Reviewed by Anders Carlsson.

        * GNUmakefile.list.am: Add new files to compilation.
        * Shared/APIClientTraits.cpp: Update for new interface version.
        * Shared/APIClientTraits.h: Ditto.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add WebKitFrame
        section.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new public
        symbols.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add
        webkit_frame_get_type.
        * UIProcess/API/gtk/tests/FrameTest.cpp: Added.
        (WebKitFrameTest::create):
        (WebKitFrameTest::webPageFromArgs):
        (WebKitFrameTest::testMainFrame):
        (WebKitFrameTest::testURI):
        (WebKitFrameTest::testJavaScriptContext):
        (WebKitFrameTest::runTest):
        (registerTests):
        * UIProcess/API/gtk/tests/GNUmakefile.am: Add new test files.
        * UIProcess/API/gtk/tests/TestFrame.cpp: Added.
        (webkitFrameTestRun):
        (testWebKitFrameMainFrame):
        (testWebKitFrameURI):
        (testWebKitFrameJavaScriptContext):
        (beforeAll):
        (afterAll):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Add
        willDestroyFrame callback to the injected bundle loader client, to
        notify the client when a frame is about to be destroyed.
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.cpp: Added.
        (webkit_frame_class_init):
        (webkitFrameCreate):
        (webkit_frame_is_main_frame):
        (webkit_frame_get_uri):
        (webkit_frame_get_javascript_global_context):
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitFramePrivate.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitFrameGetOrCreate): Helper function to create a WebKitFrame
        wrapping the given WebFrame or returning the wrapper if it already
        exists.
        (willDestroyFrame): Remove the WebKitFrame wrapping the given
        WebFrame if it exists.
        (webkitWebPageCreate): Add willDestroyFrame implementation to
        injected bundle loader client.
        (webkit_web_page_get_main_frame): Return the main frame of the
        page.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.h:
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:
        Include WebKitFrame.h.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::willDestroyFrame): New
        callback to be called when a frame is about to be destroyed.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::frameLoaderDestroyed): Call
        willDestroyFrame callback of injected bundle loader client.
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage): Add
        willDestroyFrame callback.

2013-08-24  Antti Koivisto  <antti@apple.com>

        Revert accidental change.
        
        Not reviewed.

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

2013-08-23  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r132545): Some PDFs generated by WebKit are blank when viewed in 
        Adobe Reader
        https://bugs.webkit.org/show_bug.cgi?id=120240
        -and corresponding-
        <rdar://problem/14634453>

        Reviewed by Anders Carlsson.

        Hook up new WebSystemInterface API to find out if the current context is the PDF 
        context. 

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

2013-08-23  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Assertion failures when loading XSL stylesheets with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=120186
        <rdar://problem/14080273>

        Reviewed by Brady Eidson.

        Covered by many existing tests.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously): Pass frame ID and page ID.
        They are mostly needed for authentication, which is not supported with sync requests,
        but it will be supported some day.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::webFrameLoaderClient):
        Added a way to get frame loader client from WebKit NetworkingContext subclass.

2013-08-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Wrong interface version used in WebKitWebPage for loader client
        https://bugs.webkit.org/show_bug.cgi?id=120199

        Reviewed by Gustavo Noronha Silva.

        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitWebPageCreate): Use kWKBundlePageLoaderClientCurrentVersion
        instead of kWKBundlePageResourceLoadClientCurrentVersion in loader
        client initialization.

2013-08-22  Simon Cooper  <scooper@apple.com>

        Need to disable FakeSYSVSHM when sandboxing is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=120182
        <rdar://problem/14814461>

        Reviewed by Alexey Proskuryakov.

        When not in a sandbox do not enable the FakeSYSVSHIM. This
        allows LocalConnection to work when Flash Player is run in
        "Unsafe Mode".

        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shim_disabled):

2013-08-22  Andy Estes  <aestes@apple.com>

        <https://webkit.org/b/120180> Fix issues with OTHER_LDFLAGS in various .xcconfig files

        Reviewed by David Kilzer.

        Adding ld flags for ASAN overwrote the unexported symbol flags we were
        previously specifying. Since the unexported symbol ld flags are only
        needed for the framework target, move them to WebKit2.xcconfig where we
        can add them to OTHER_LDFLAGS along with the ASAN values inherited from
        DebugRelease.xcconfig (and other values).

        * Configurations/Base.xcconfig: Removed the unexported symbol ld flags.
        * Configurations/WebKit2.xcconfig: ... and moved them here.

2013-08-21  Tim Horton  <timothy_horton@apple.com>

        Another null-deref under WebDragClient::startDrag
        https://bugs.webkit.org/show_bug.cgi?id=120145
        <rdar://problem/14650652>

        Reviewed by Simon Fraser.

        convertImageToBitmap can legitimately return null, so don't dereference it.

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

2013-08-21  Beth Dakin  <bdakin@apple.com>

        <https://webkit.org/b/120140> Clients expect didFirstLayout-related calls to 
        happen before didLayout

        Reviewed by Anders Carlsson.

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

2013-08-21  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r145458?): WebProcess doesn't respect UI process localization
        https://bugs.webkit.org/show_bug.cgi?id=120096

        Reviewed by Darin Adler.

        We used to get into a situation where CFBundle thought that we had no good localization,
        and used one passed as default. This is never the case with mixed localizations,
        so default is just ignored now.

        I think that the previous behavior was a bit of a hack. As WebProcess is not localized,
        it's more honest to say that we want mixed localizations, and force the language
        to match UI process localization.

        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.h:
        (WebKit::ChildProcessMain): Don't set default localization, it's not taken into
        consideration unless all other attempts to compute bundle localization fail.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::createProcess): Pass
        UI process localization as -AppleLanguages argument, so that Core Foundation uses
        that instead of actual user languages. We want to match UI process localization.

2013-08-20  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=120093
        Remove getOwnPropertyDescriptor trap

        Reviewed by Geoff Garen.

        All implementations of this method are now called via the method table, and equivalent in behaviour.
        Remove all duplicate implementations (and the method table trap), and add a single member function implementation on JSObject.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.h:
            - remove getOwnPropertyDescriptor

2013-08-20  Pratik Solanki  <psolanki@apple.com>

        <https://webkit.org/b/120029> Document::markers() should return a reference

        Reviewed by Andreas Kling.

        Document::m_markers is never NULL so return a reference from Document::markers(). Also mark
        m_markers as const and initialize it in member initialization.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::rectsForTextMatches):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::unmarkAllMisspellings):
        (WebKit::WebPage::unmarkAllBadGrammar):

2013-08-20  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=120053
        Remove custom getOwnPropertyDescriptor for JSNPObject

        Reviewed by Oliver Hunt.

        Think this is the last one!

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
            - Remove custom getOwnPropertyDescriptor implementation.

2013-08-20  Anton Obzhirov  <a.obzhirov@samsung.com>

        <https://webkit.org/b/119487> [Gtk] Cancel authentication on load failed

        Reviewed by Martin Robinson.

        Added callback to handle load-failed event in default authentication dialog.
        Authentication request gets cancelled and the dialog widget gets destroyed.

        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (pageLoadFailed):
        (webkitAuthenticationDialogInitialize):
        (webkitAuthenticationDialogDispose):
        (webkit_authentication_dialog_class_init):
        (webkitAuthenticationDialogNew):
        * UIProcess/API/gtk/WebKitAuthenticationDialog.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewAuthenticate):

2013-08-20  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK2] Doesn't build without Plugin-process
        https://bugs.webkit.org/show_bug.cgi?id=120060

        Reviewed by Jocelyn Turcotte.

        Disable netscape plugin api in WebKit2 when the plugin architecture is unsupported for WebKit2.

        * Target.pri:

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

        <https://webkit.org/b/120049> Delete code for Snow Leopard

        Reviewed by Benjamin Poulain.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::overrideSystemProxies):
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * WebKit2Prefix.h:

2013-08-19  Beth Dakin  <bdakin@apple.com>

        <https://webkit.org/b/120027> AXObjectCache's 
        accessibilityEnhancedUserInterfaceEnabled should be initialized on process 
        creation

        Reviewed by Sam Weinig.

        Right now we only call AXObjectCache::setEnhancedAccessibility() when AppKit sends 
        us a notification indicating that the value has changed. We should not have to 
        rely on that to properly initialize this value. It should be done with the 
        WebProcessCreationParamters. 

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2013-08-19  Pratik Solanki  <psolanki@apple.com>

        <https://webkit.org/b/119918> Frame::selection() should return a reference

        Reviewed by Darin Adler.

        m_selection is never NULL so return a reference from Frame::selection(). Also removed some
        unnecessary null checks and assert diff ts exposed as a result.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::collapseSelection):
        (WebKit::WebEditorClient::updateGlobalSelection):
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        (WebKit::WebContextMenuClient::searchWithSpotlight):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::frameWithSelection):
        (WebKit::FindController::updateFindUIAfterPageScroll):
        (WebKit::FindController::getFindIndicatorBitmapAndRect):
        (WebKit::FindController::getImageForFindMatch):
        (WebKit::FindController::selectFindMatch):
        (WebKit::FindController::updateFindIndicator):
        (WebKit::FindController::drawRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        (WebKit::WebPage::scaledSnapshotWithOptions):
        (WebKit::WebPage::centerSelectionInVisibleArea):
        (WebKit::frameWithSelection):
        (WebKit::WebPage::clearSelection):
        (WebKit::WebPage::confirmComposition):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::currentSelectionAsRange):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::convertToRange):
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::readSelectionFromPasteboard):
        (WebKit::WebPage::getStringSelectionForPasteboard):
        (WebKit::WebPage::getDataSelectionForPasteboard):

2013-08-18  Darin Adler  <darin@apple.com>

        <https://webkit.org/b/119989> Make use of Node::ownerDocument a compile time error

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement): Use document instead of
        ownerDocument.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement): Ditto.

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

        Fix clean engineering builds after r154251.

        * WebKit2.xcodeproj/project.pbxproj: Removed references to the OfflineStorage XPC services
        from the “Copy XPC services for engineering builds” build phase.

2013-08-18  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=119972
        Add attributes field to PropertySlot

        Reviewed by Geoff Garen.

        For all JSC types, this makes getOwnPropertyDescriptor redundant.
        There will be a bit more hacking required in WebCore to remove GOPD whilst maintaining current behaviour.
        (Current behaviour is in many ways broken, particularly in that GOPD & GOPS are inconsistent, but we should fix incrementally).

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertySlot):
        (WebKit::JSNPObject::getOwnPropertyDescriptor):
            - Pass attributes to PropertySlot::set* methods.

2013-08-16  Sam Weinig  <sam@webkit.org>

        <https://webkit.org/b/119911> Remove the unused OfflineStorageProcess

        Reviewed by Darin Adler.

        * Configurations/OfflineStorageProcess.xcconfig: Removed.
        * Configurations/OfflineStorageService.Development.xcconfig: Removed.
        * Configurations/OfflineStorageService.xcconfig: Removed.
        * DerivedSources.make:
        * OfflineStorageProcess: Removed.
        * OfflineStorageProcess/EntryPoint: Removed.
        * OfflineStorageProcess/EntryPoint/mac: Removed.
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess: Removed.
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess/Info.plist: Removed.
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess/OfflineStorageProcessMain.mm: Removed.
        * OfflineStorageProcess/EntryPoint/mac/XPCService: Removed.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService: Removed.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService.Development: Removed.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService.Development/Info.plist: Removed.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService/Info.plist: Removed.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageServiceEntryPoint.mm: Removed.
        * OfflineStorageProcess/OfflineStorageProcess.cpp: Removed.
        * OfflineStorageProcess/OfflineStorageProcess.h: Removed.
        * OfflineStorageProcess/OfflineStorageProcess.messages.in: Removed.
        * OfflineStorageProcess/mac: Removed.
        * OfflineStorageProcess/mac/OfflineStorageProcessMac.mm: Removed.
        * OfflineStorageProcess/mac/com.apple.WebKit.OfflineStorage.sb: Removed.
        * Scripts/webkit2/messages.py:
        * Shared/OfflineStorage: Removed.
        * Shared/OfflineStorage/OfflineStorageProcessCreationParameters.cpp: Removed.
        * Shared/OfflineStorage/OfflineStorageProcessCreationParameters.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        Remove.

2013-08-17  Darin Adler  <darin@apple.com>

        <https://webkit.org/b/119941> Make Page::dragController return a reference

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        (WebKit::WebPage::dragEnded):
        Updated call sites.

2013-08-17  David Kilzer  <ddkilzer@apple.com>

        WebKit2 fails to build with trunk clang: error: 'WebPluginSiteDataManagerh' is used as a header guard here, followed by #define of a different macro [-Werror,-Wheader-guard]
        <http://webkit.org/b/119935>
        <rdar://problem/14764131>

        Reviewed by Darin Adler.

        * UIProcess/Plugins/WebPluginSiteDataManager.h: Fix typo
        introduced in r78647.

2013-08-16  Pratik Solanki  <psolanki@apple.com>

        <https://webkit.org/b/119852> Frame::scriptController() should return a reference

        Reviewed by Andreas Kling.

        m_script is never NULL so we can just return a reference. Also remove some pointless null
        checks as a result of doing this.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::globalObject):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performJavaScriptURLRequest):
        (WebKit::PluginView::windowScriptNPObject):
        (WebKit::PluginView::pluginElementNPObject):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::jsContext):
        (WebKit::WebFrame::jsContextForWorld):
        (WebKit::WebFrame::jsWrapperForWorld):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::didSave):
        (WebKit::WebInspector::didAppend):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):

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

        (NetworkProcess)  Sync XHRs should load using async ResourceHandles, not ResourceHandle::loadResourceSynchronously
        https://bugs.webkit.org/show_bug.cgi?id=119493

        Reviewed by Alexey Proskuryakov.

        This patch does the following:
          - Consolidates SchedulableLoader and NetworkResourceLoader into one class.
          - Removes SyncNetworkResourceLoader.
          - Adds a NetworkLoaderClient interface that customizes certain behaviors of the NetworkResourceLoader.
          - Implements a SynchronousNetworkLoaderClient and AsynchronousNetworkLoaderClient for the two different types of loads.

        The AsynchronousNetworkLoaderClient results in messaging back progress to the WebProcess as the load progresses.
        The SynchronousNetworkLoaderClient accumulates the response, data, and error to be communicated back to the WebProcess
        only when the load is complete.

        Update small swaths of code to reflect that NetworkResourceLoader is the One True Loader (tm):
        * NetworkProcess/HostRecord.cpp:
        (WebKit::HostRecord::scheduleResourceLoader):
        (WebKit::HostRecord::addLoaderInProgress):
        (WebKit::removeLoaderFromQueue):
        (WebKit::HostRecord::removeLoader):
        (WebKit::HostRecord::servePendingRequestsForQueue):
        (WebKit::HostRecord::limitsRequests):
        * NetworkProcess/HostRecord.h:

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
        * NetworkProcess/NetworkConnectionToWebProcess.h:

        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::scheduleLoader):
        (WebKit::NetworkResourceLoadScheduler::removeLoader):
        (WebKit::NetworkResourceLoadScheduler::receivedRedirect):
        (WebKit::NetworkResourceLoadScheduler::removeScheduledLoaders):
        (WebKit::NetworkResourceLoadScheduler::scheduleRemoveLoader):
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        Combine ScheduleableLoader and NetworkResourceLoader into NetworkResourceLoader:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::isSynchronous):
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFail):
        (WebKit::NetworkResourceLoader::willSendRequestAsync):
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        (WebKit::NetworkResourceLoader::didSendData):
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorage):
        (WebKit::NetworkResourceLoader::didReceiveAuthenticationChallenge):
        (WebKit::NetworkResourceLoader::consumeSandboxExtensions):
        (WebKit::NetworkResourceLoader::invalidateSandboxExtensions):
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::create):
        (WebKit::NetworkResourceLoader::connectionToWebProcess):
        (WebKit::NetworkResourceLoader::priority):
        (WebKit::NetworkResourceLoader::request):
        (WebKit::NetworkResourceLoader::isLoadingMainResource):
        (WebKit::NetworkResourceLoader::setHostRecord):
        (WebKit::NetworkResourceLoader::hostRecord):
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure):

        Add an abstract NetworkLoaderClient to adapt a load to be either synchronous or asynchronous:
        * NetworkProcess/NetworkLoaderClient.h:
        (WebKit::NetworkLoaderClient::~NetworkLoaderClient):
        (WebKit::NetworkLoaderClient::isSynchronous):
        (WebKit::NetworkLoaderClient::NetworkLoaderClient):

        The asynchronous loader client, primarily to message progress back to the WebProcess as it happens:
        * NetworkProcess/AsynchronousNetworkLoaderClient.cpp: Added.
        (WebKit::AsynchronousNetworkLoaderClient::AsynchronousNetworkLoaderClient):
        (WebKit::AsynchronousNetworkLoaderClient::willSendRequest):
        (WebKit::AsynchronousNetworkLoaderClient::canAuthenticateAgainstProtectionSpace):
        (WebKit::AsynchronousNetworkLoaderClient::didReceiveResponse):
        (WebKit::AsynchronousNetworkLoaderClient::didReceiveBuffer):
        (WebKit::AsynchronousNetworkLoaderClient::didSendData):
        (WebKit::AsynchronousNetworkLoaderClient::didFinishLoading):
        (WebKit::AsynchronousNetworkLoaderClient::didFail):
        * NetworkProcess/AsynchronousNetworkLoaderClient.h:
        (WebKit::AsynchronousNetworkLoaderClient::create):

        The synchronous loader client, primarily to accumulate results of the load to send back to the WebProcess all at once:
        * NetworkProcess/SynchronousNetworkLoaderClient.cpp: Added.
        (WebKit::SynchronousNetworkLoaderClient::SynchronousNetworkLoaderClient):
        (WebKit::SynchronousNetworkLoaderClient::~SynchronousNetworkLoaderClient):
        (WebKit::SynchronousNetworkLoaderClient::willSendRequest):
        (WebKit::SynchronousNetworkLoaderClient::canAuthenticateAgainstProtectionSpace):
        (WebKit::SynchronousNetworkLoaderClient::didReceiveResponse):
        (WebKit::SynchronousNetworkLoaderClient::didReceiveBuffer):
        (WebKit::SynchronousNetworkLoaderClient::didFinishLoading):
        (WebKit::SynchronousNetworkLoaderClient::didFail):
        (WebKit::SynchronousNetworkLoaderClient::sendDelayedReply):
        * NetworkProcess/SynchronousNetworkLoaderClient.h: Added.
        (WebKit::SynchronousNetworkLoaderClient::create):

        * NetworkProcess/SchedulableLoader.cpp: Removed.
        * NetworkProcess/SchedulableLoader.h: Removed.
        * NetworkProcess/SyncNetworkResourceLoader.cpp: Removed.
        * NetworkProcess/SyncNetworkResourceLoader.h: Removed.

        * WebKit2.xcodeproj/project.pbxproj:

2013-08-16  Gabor Rapcsanyi  <rgabor@webkit.org>

        [Qt][ARM] Unreviewed buildfix after 154127.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h: Add missing header.

2013-08-15  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Unreviewed build fix after r154142 and r154144.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::useTestingNetworkSession):
        Fixed build break when NETWORK_PROCESS is disabled after r154144.

2013-08-15  Chris Fleizach  <cfleizach@apple.com>

        <https://webkit.org/b/119858> AX: Crash: com.apple.WebKit.WebContent at com.apple.WebKit2: WebKit::WebPage::accessibilityObjectForMainFramePlugin + 8

        Reviewed by Tim Horton.

        Ensure that the page is available before accessing it.

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

2013-08-15  Alexey Proskuryakov  <ap@apple.com>

        [WK2] NetworkProcess should use a temporary storage session for test
        https://bugs.webkit.org/show_bug.cgi?id=119855

        Reviewed by Darin Adler.

        We used to have a bundle API for WebKitTestRunner to do this in injected bundle, but
        NetworkProcess has no injected bundle.

        Added a WKContext API, sending the information to NetworkProcess with initialization
        parameters. Reworked WebProcess path to do the same for consistency - bundle API
        is better per se, but not when we also need to have another one.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * 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/WKContext.cpp:
        (WKContextUseTestingNetworkSession):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::ensureNetworkProcess):
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::useTestingNetworkSession):
        * UIProcess/WebContext.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2013-08-15  Anders Carlsson  <andersca@apple.com>

        <https://webkit.org/b/119859> Frame::loader() should return a reference

        Reviewed by Andreas Kling.

        * Shared/WebRenderLayer.cpp:
        (WebKit::WebRenderLayer::create):
        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::create):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameGetFrameLoadState):
        (WKBundleFrameClearOpener):
        (WKBundleFrameCallShouldCloseOnWebView):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::documentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlFrameElementContentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlIFrameElementContentFrame):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        (WebKit::InjectedBundleDOMWindowExtension::frame):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::frame):
        (WebKit::InjectedBundleHitTestResult::targetFrame):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::clickedLink):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::webPage):
        (WebKit::PluginView::didFailToInitializePlugin):
        (WebKit::PluginView::performFrameLoadURLRequest):
        (WebKit::PluginView::userAgent):
        (WebKit::PluginView::loadURL):
        (WebKit::PluginView::cancelManualStreamLoad):
        (WebKit::PluginView::proxiesForURL):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedElementChanged):
        (WebKit::WebChromeClient::focusedFrameChanged):
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::closeWindowSoon):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::unavailablePluginButtonClicked):
        (WebKit::WebChromeClient::print):
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::runOpenPanel):
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::textFieldDidBeginEditing):
        (WebKit::WebEditorClient::textFieldDidEndEditing):
        (WebKit::WebEditorClient::textDidChangeInTextField):
        (WebKit::WebEditorClient::textDidChangeInTextArea):
        (WebKit::WebEditorClient::doTextFieldCommandFromEvent):
        (WebKit::WebEditorClient::textWillBeDeletedInTextField):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchWillSendSubmitEvent):
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebKit::WebFrameLoaderClient::restoreViewState):
        (WebKit::WebFrameLoaderClient::createFrame):
        (WebKit::WebFrameLoaderClient::createJavaAppletWidget):
        (WebKit::WebFrameLoaderClient::objectContentType):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPluginInfo):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::blockedError):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision):
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::source):
        (WebKit::WebFrame::contentsAsString):
        (WebKit::WebFrame::url):
        (WebKit::WebFrame::parentFrame):
        (WebKit::WebFrame::childFrames):
        (WebKit::WebFrame::stopLoading):
        (WebKit::WebFrame::frameForContext):
        (WebKit::WebFrame::provisionalURL):
        (WebKit::WebFrame::suggestedFilenameForResourceWithURL):
        (WebKit::WebFrame::mimeTypeForResourceWithURL):
        (WebKit::WebFrameFilter::shouldIncludeSubframe):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::close):
        (WebKit::WebPage::tryClose):
        (WebKit::WebPage::loadURLRequest):
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::linkClicked):
        (WebKit::WebPage::stopLoadingFrame):
        (WebKit::WebPage::stopLoading):
        (WebKit::WebPage::reload):
        (WebKit::WebPage::tryRestoreScrollPosition):
        (WebKit::WebPage::getMainResourceDataOfFrame):
        (WebKit::resourceDataForFrame):
        (WebKit::shouldReuseCommittedSandboxExtension):
        (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad):
        (WebKit::WebPage::hasLocalDataForURL):
        (WebKit::WebPage::setCustomTextEncodingName):
        (WebKit::WebPage::canPluginHandleResponse):
        (WebKit::WebPage::canShowMIMEType):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformHasLocalDataForURL):
        (WebKit::cachedResponseForURL):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::downloadRequest):

2013-08-14  Filip Pizlo  <fpizlo@apple.com>

        Typed arrays should be rewritten
        https://bugs.webkit.org/show_bug.cgi?id=119064

        Reviewed by Oliver Hunt.
        
        You don't need to include JSUint8Array anymore if you just want to
        unwrap one; JSDOMBinding gives you all of the things you need.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:

2013-08-15  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Remove "legacy" media UI
        https://bugs.webkit.org/show_bug.cgi?id=119752

        Reviewed by Jer Noble.

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

2013-08-14  Dean Jackson  <dino@apple.com>

        <https://webkit.org/b/119827> Allow primary plug-in detection to run more than once if necessary

        Reviewed by Tim Horton.

        We occasionally see cases where the primary plug-in detection runs before the plugins have been added
        to the page, especially if they do so in response to a load event. Tweak the algorithm so that it can
        run an arbitrary number of times if it fails.

        While here, also have the detection run if there has ever been a plugin in the page as opposed to any
        current views. We may have snapshotted a plugin by now and deleted its view.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): initialise new members.
        (WebKit::WebPage::addPluginView): Mark that we've seen a plugin.
        (WebKit::WebPage::resetPrimarySnapshottedPlugIn): Reset new members.
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn): Exit early if we've never
        seen a plugin, rather than if we don't have any active views. Also, if we didn't find anything set
        a timer to run again (maximum of two attempts at the moment).
        * WebProcess/WebPage/WebPage.h: New members - m_numberOfPrimarySnapshotDetectionAttempts
        and m_hasSeenPlugin.

2013-08-14  Dean Jackson  <dino@apple.com>

        <https://webkit.org/b/119820> Add pluginView-related logging to WebPage

        Reviewed by Tim Horton.

        Add some more diagnostic output to help track down bugs.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addPluginView): More logging.
        (WebKit::WebPage::removePluginView): Ditto.

2013-08-14  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Sync messages with with non-default timeout sent from secondary threads always time out
        https://bugs.webkit.org/show_bug.cgi?id=119767

        Fix by Justin Bur.
        Reviewed by Darin Adler.

        * Platform/CoreIPC/Connection.cpp: (CoreIPC::Connection::sendSyncMessageFromSecondaryThread):
        The argument to wait() is absolute time, not a delta. This calculation matches one
        in Connection::waitForMessage().

2013-08-14  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r153877): Plugin scanning slows creation of WebViews
        https://bugs.webkit.org/show_bug.cgi?id=119665
        <rdar://problem/14716549>

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::refreshPlugins):
        Don't repopulate the plugin cache in refreshPlugins, just invalidate it.
        It will be repopulated the next time something tries to use it.

2013-08-12  Dan Bernstein  <mitz@apple.com>

        Fixed an off-by-(sizeof(char*) - 1) bug.

        Reviewed by Sam Weinig.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        (WebKit::XPCServiceEventHandler): Allocate a sufficiently large buffer.

2013-08-12  Beth Dakin  <bdakin@apple.com>

        Remove didNewFirstVisuallyNonEmptyLayout from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=119658

        Reviewed by Darin Adler.

        Removing this function entirely will change some functionality in the Nightlies, 
        but we think that is an acceptable difference for the Nightlies. If is does cause 
        a problem though, we can roll out this patch and deprecate the function instead.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeLoaderClient):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::initializeInjectedBundleLoaderClient):

2013-08-12  Arunprasad Rajkumar  <arurajku@cisco.com>

        [Qt] [WebKit2] Remove duplicate RAM Size calculation and reuse WTF::ramSize()
        https://bugs.webkit.org/show_bug.cgi?id=119663

        Reviewed by Sam Weinig.

        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformSetCacheModel):

2013-08-12  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] Don't load GAIL when using GTK 3.2 or greater
        https://bugs.webkit.org/show_bug.cgi?id=72735

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/tests/AccessibilityTestServer.cpp:
        (main):

2013-08-09  Beth Dakin  <bdakin@apple.com>

        AX: Not able to use arrow keys to read text in a WK2 app
        https://bugs.webkit.org/show_bug.cgi?id=119605
        -and corresponding-
        <rdar://problem/14281275>

        Reviewed by Darin Adler.

        Make all of these scrolling functions actually return the WebCore bools that 
        indicate whether or not scrolling happened. 
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scroll):
        (WebKit::WebPage::logicalScroll):
        (WebKit::WebPage::scrollBy):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal):

        This function now gives accessibility a chance to handle the event too. And it 
        also actually tracks whether or not the event was handled by scrolling instead of 
        assuming that it was and universally returning true.
        (WebKit::WebPage::performNonEditingBehaviorForSelector):

2013-08-09  Brian Holt  <brian.holt@samsung.com>

        [GTK] [WebKit2] Add an 'authenticate' signal to WebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=99352

        Reviewed by Carlos Garcia Campos.

        Add a new public class to the API, WebKitAuthenticationRequest, to be
        emitted along with a new WebKitWebView::authenticate signal to
        let client applications to provide their own authentication
        when the user is challenged with HTTP authentication. The
        credential is exposed through a new class WebKitCredential.

        * GNUmakefile.list.am:
        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:
        (okButtonClicked): Use new API for authentication.
        (cancelButtonClicked): Ditto.
        (webkitAuthenticationDialogInitialize):Get
        authenticationChallenge from request object.
        (webkitAuthenticationDialogNew): Ditto.
        * UIProcess/API/gtk/WebKitAuthenticationDialog.h:
        * UIProcess/API/gtk/WebKitAuthenticationRequest.cpp: Added new
        class representing a HTTP authentication request.
        (webkitAuthenticationRequestDispose):
        (webkit_authentication_request_class_init):
        (webkitAuthenticationRequestCreate):
        (webkitAuthenticationRequestGetAuthenticationChallenge):
        (webkit_authentication_request_can_save_credentials):
        (webkit_authentication_request_get_proposed_credential):
        (webkit_authentication_request_get_host):
        (webkit_authentication_request_get_port):
        (webkit_authentication_request_get_realm):
        (webkit_authentication_request_get_scheme):
        (webkit_authentication_request_is_for_proxy):
        (webkit_authentication_request_is_retry):
        (webkit_authentication_request_authenticate):
        (webkit_authentication_request_cancel):
        * UIProcess/API/gtk/WebKitAuthenticationRequest.h: Added.
        * UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h: Added.
        * UIProcess/API/gtk/WebKitCredential.cpp: Added new class to
        support credentials for HTTP authentication.
        (_WebKitCredential::_WebKitCredential):
        (webkitCredentialCreate):
        (webkitCredentialGetCredential):
        (webkit_credential_new):
        (webkit_credential_copy):
        (webkit_credential_free):
        (webkit_credential_get_username):
        (webkit_credential_get_password):
        (webkit_credential_has_password):
        (webkit_credential_get_persistence):
        * UIProcess/API/gtk/WebKitCredential.h: Added.
        * UIProcess/API/gtk/WebKitCredentialPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebView.cpp: Added authenticate signal.
        (webkitWebViewAuthenticate): Default signal handler for authenticate.
        (webkit_web_view_class_init): Ditto.
        (webkitWebViewHandleAuthenticationChallenge): Create an
        authentication request and emit it with authenticate signal.
        * UIProcess/API/gtk/WebKitWebView.h: Replaced reserved function
        pointer slot with for WebViewClass with function pointer to
        authenticate signal handler.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Added new section for
        the authentication request.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Ditto.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Added authentication
        request and credential types.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp: Created a new
        unit test for HTTP authentication. A libsoup server callback
        handler is installed that creates soup messages with appropriate
        headers and body to test HTTP authentication.
        (testWebViewAuthenticationRequest): Test the authentication
        request and credential API.
        (testWebViewAuthenticationCancel): Test cancelled authentication.
        (testWebViewAuthenticationFailure): Test repeated authentication failures.
        (testWebViewAuthenticationNoCredential): Test continue without
        credentials.
        (testWebViewAuthenticationStorage): Test credential storage.
        (testWebViewAuthenticationSuccess): Test successful authentication.
        (beforeAll): Added tests.
        * UIProcess/API/gtk/webkit2.h: Added WebKitAuthenticationRequest and
        WebKitCredential headers.

2013-08-09  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin is disabled by default in nightlies on Mac accidentally
        https://bugs.webkit.org/show_bug.cgi?id=119615

        Rubber-stamped by Andreas Kling.

        Enable PDFPlugin by default on Mac at the WebKit2 level.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferencesPrivate.h:

2013-08-08  Tim Horton  <timothy_horton@apple.com>

        navigator.plugins has plugins in it when plugins are disabled
        https://bugs.webkit.org/show_bug.cgi?id=119607
        <rdar://problem/14678030>

        Reviewed by Anders Carlsson.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins):
        Return a list of all plugins, and a list of only application plugins.

        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getPluginInfo):
        Add applicationPlugin parameter to getPlugins, and storage for the returned list.

        (WebKit::WebPlatformStrategies::populatePluginCache):
        If plugins are disabled for the given page, give WebCore the list that
        only includes application plugins. Otherwise, give it the whole list
        as we are doing currently.

2013-08-08  Gavin Barraclough  <barraclough@apple.com>

        Disable suppression of plugin process for Java
        https://bugs.webkit.org/show_bug.cgi?id=119604

        Reviewed by Sam Weinig.

        Workaround, the Java plugin doesn't like this.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):
            - +1 active task count on the java plugin, to inhibit supression.

2013-08-08  Dean Jackson  <dino@apple.com>

        Add logging to the primary plugin detection
        https://bugs.webkit.org/show_bug.cgi?id=119594

        Reviewed by Tim Horton.

        Add some simple logging to our primary plug-in detection.

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

2013-08-08  Alexey Proskuryakov  <ap@apple.com>

        WKBundleFrameCopyProvisionalURL crashes when there is no provisional loader
        https://bugs.webkit.org/show_bug.cgi?id=119587

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::provisionalURL): Added a null
        check, like we already have in WebFrame::url().

2013-08-07  Antti Koivisto  <antti@apple.com>

        Try to fix EFL build.
        
        Not reviewed.

        * CMakeLists.txt:

2013-08-06  Jer Noble  <jer.noble@apple.com>

        Crash when entering fullscreen video playback from a WebView using WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=119531

        Reviewed by Tim Horton.

        Initialize wkWindowSetScaledFrame and wkWindowSetAlpha when initializing WebCoreSystemInterface.

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

2013-08-06  Stephanie Lewis  <slewis@apple.com>

        Update Order Files for Safari
        <rdar://problem/14517392>

        Unreviewed.

        * mac/WebKit2.order:

2013-08-04  Sam Weinig  <sam@webkit.org>

        Remove support for HTML5 MicroData
        https://bugs.webkit.org/show_bug.cgi?id=119480

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2013-08-06  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Implement gesture recognizer.
        https://bugs.webkit.org/show_bug.cgi?id=102643

        Reviewed by Gyuyoung Kim.

        Recognize tap, pan and pinch gestures using touch events.
        The tap gesture is separated into single tap, double tap and
        'tap and hold'.

        This patch references the webkit NIX port.
        https://github.com/WebKitNix/webkitnix

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::doneWithTouchEvent):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/GestureRecognizer.cpp: Added.
        (WebKit::GestureHandler::create):
        (WebKit::GestureHandler::GestureHandler):
        (WebKit::GestureHandler::handleSingleTap):
        (WebKit::GestureHandler::handleDoubleTap):
        (WebKit::GestureHandler::handleTapAndHold):
        (WebKit::GestureHandler::handlePanStarted):
        (WebKit::GestureHandler::handlePan):
        (WebKit::GestureHandler::handlePanFinished):
        (WebKit::GestureHandler::handlePinchStarted):
        (WebKit::GestureHandler::handlePinch):
        (WebKit::GestureHandler::handlePinchFinished):
        (WebKit::GestureRecognizer::GestureRecognizer):
        (WebKit::GestureRecognizer::~GestureRecognizer):
        (WebKit::GestureRecognizer::processTouchEvent):
        (WebKit::GestureRecognizer::doubleTapTimerCallback):
        (WebKit::GestureRecognizer::tapAndHoldTimerCallback):
        (WebKit::GestureRecognizer::exceedsPanThreshold):
        (WebKit::GestureRecognizer::exceedsDoubleTapThreshold):
        (WebKit::getPointAtIndex):
        (WebKit::createVectorWithWKArray):
        (WebKit::GestureRecognizer::noGesture):
        (WebKit::GestureRecognizer::singleTapGesture):
        (WebKit::GestureRecognizer::doubleTapGesture):
        (WebKit::GestureRecognizer::panGesture):
        (WebKit::GestureRecognizer::pinchGesture):
        (WebKit::GestureRecognizer::reset):
        (WebKit::GestureRecognizer::stopTapTimers):
        * UIProcess/API/efl/GestureRecognizer.h: Added.
        (WebKit::GestureRecognizer::create):

2013-07-23  David Farler  <dfarler@apple.com>

        Provide optional OTHER_CFLAGS, OTHER_CPPFLAGS, OTHER_LDFLAGS additions for building with ASAN
        https://bugs.webkit.org/show_bug.cgi?id=117762

        Reviewed by Mark Rowe.

        * Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * Configurations/WebContentProcess.xcconfig:
        Add ASAN_OTHER_LDFLAGS.
        * Configurations/WebKit2.xcconfig:
        Add ASAN_OTHER_LDFLAGS.

2013-08-06  Andreas Kling  <akling@apple.com>

        REGRESSION(r151403): Resizing is extremely laggy on many sites when plugins are disallowed.
        <http://webkit.org/b/119516>
        <rdar://problem/14648086>

        Reviewed by Simon Fraser.

        The web process relies on the WindowAndViewFramesChanged mechanism for caching a copy
        of the window rect for fast access from DOMWindow APIs.

        We retain part of the optimization introduced in r151403, namely not computing the
        viewFrameInWindowCoordinates and accessibilityPosition unless the web process needs them.

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

2013-07-26  Mark Rowe  <mrowe@apple.com>

        Logging should be configurable using human-readable channel names rather than crazy bitmasks
        <http://webkit.org/b/119031>

        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.

        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
        for history and loading being enabled.

        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
        the old user defaults to remain set for those people that need to switch between version of WebKit before and
        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.

        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
        consistency with the other platforms and to enable more code sharing.

        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
        adding a new logging channel. Now only the header in the relevant project needs to be updated.

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcess.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
        * Platform/Logging.cpp: Use WEBKIT2_LOG_CHANNELS to define all of the channels.
        (WebKit::initializeLogChannelsIfNecessary): Pass the channels and the log level string to the new WTF function
        that handles the initialization.
        (WebKit::logChannelByName): Renamed to match our naming conventions. Calls through to the new WTF function
        to find a log channel rather than repeating the names of the log channels a further two times each.
        (WebKit::logLevelString): Provide a no-op implementation.
        * Platform/Logging.h: Declare a WEBKIT2_LOG_CHANNELS macro that can be used to apply a preprocessor macro
        across the set of all logging channels. Use this macro to declare the logging channels.
        * Platform/efl/LoggingEfl.cpp:
        (WebKit::logLevelString): Pull the value out of the WEBKIT_DEBUG environment variable.
        * Platform/gtk/LoggingGtk.cpp:
        (WebKit::logLevelString): Ditto.
        * Platform/mac/Logging.mac.mm:
        (WebKit::logLevelString): Pull the value out of the WebKit2Logging user default key.
        * Platform/qt/LoggingQt.cpp:
        (WebKit::logLevelString): Pull the value out of the QT_WEBKIT_LOG environment variable.
        * Shared/WebKit2Initialize.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
        * UIProcess/WebContext.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.

2013-08-05  Anders Carlsson  <andersca@apple.com>

        Ignore the Apple Java placeholder plug-in
        https://bugs.webkit.org/show_bug.cgi?id=119494
        <rdar://problem/14610818>

        Reviewed by Beth Dakin.

        Never attempt to load the Java placeholder plug-in.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin):

2013-08-03  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, build and style fix for r153693.

        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/WebPage/WebPage.cpp:

2013-08-03  Tim Horton  <timothy_horton@apple.com>

        Remove SimplePDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=119437

        Reviewed by Alexey Proskuryakov.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Don't add SimplePDFPlugin, nor try to instantiate it.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        Merge previously inherited behavior in from SimplePDFPlugin.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Removed.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm: Removed.
        Remove SimplePDFPlugin.

2013-08-03  Tim Horton  <timothy_horton@apple.com>

        Remove pageOverlayShouldApplyFadeWhenPainting() and adopt composited fade for the Mac port
        https://bugs.webkit.org/show_bug.cgi?id=119411

        Reviewed by Simon Fraser.

        Mac is the only holdout that performs non-composited fades of page
        overlays. We should adopt that mechanism (as a precursor to doing a
        CA-accelerated fade) and remove the now-unnecessary property.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (WKBundlePageOverlayFractionFadedIn):
        Always return 1 (fully-faded-in) so that clients who attempt to use this
        to bake the fade opacity into their painting will paint at full opacity,
        allowing us to do the composited fade separately.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::PageOverlay):
        (WebKit::PageOverlay::setPage):
        (WebKit::PageOverlay::setNeedsDisplay):
        (WebKit::PageOverlay::fadeAnimationTimerFired):
        * WebProcess/WebPage/PageOverlay.h:
        Remove pageOverlayShouldApplyFadeWhenPainting and fractionFadedIn().

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        Draw the find overlay without taking the PageOverlay's fade into account.

        * WebProcess/WebPage/TapHighlightController.cpp:
        (WebKit::TapHighlightController::drawRect):
        Remove pageOverlayShouldApplyFadeWhenPainting. Since it's always
        "false" for all ports now, take the second path here.

        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::setPageOverlayOpacity):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setPageOverlayOpacity):
        Implement setPageOverlayOpacity for DrawingAreaImpl
        and TiledCoreAnimationDrawingArea.

2013-08-02  Gavin Barraclough  <barraclough@apple.com>

        Remove no-arguments constructor to PropertySlot
        https://bugs.webkit.org/show_bug.cgi?id=119460

        Reviewed by Geoff Garen.

        This constructor was unsafe if getValue is subsequently called,
        and the property is a getter. Simplest to just remove it.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertyDescriptor):

2013-08-02  Ruth Fong  <ruth_fong@apple.com>

        [Forms: color] WebColorPickerMac deconstructor shouldn't assert a variable
        <rdar://problem/14627633> and https://bugs.webkit.org/show_bug.cgi?id=119419

        Reviewed by Tim Horton.

        * UIProcess/mac/WebColorPickerMac.mm:
        (WebKit::WebColorPickerMac::~WebColorPickerMac): If the m_colorPickerUI variable
          is not null, then properly destroy it first before destroying WebColorPickerMac object.

2013-08-02  Ruth Fong  <ruth_fong@apple.com>

        [Forms: color] The positioning of the popover color well is inverted
        <rdar://problem/14635621> and https://bugs.webkit.org/show_bug.cgi?id=119455

        Reviewed by Tim Horton.

        This patch converts the coordinates of the <input type='color'> element to
        the window's base coordinate system.

        * UIProcess/mac/WebColorPickerMac.mm:
        (-[WKColorPopoverMac initWithFrame:inView:]):

2013-08-01  Ruth Fong  <ruth_fong@apple.com>

        [Forms: color] <input type='color'> popover color well implementation
        <rdar://problem/14411008> and https://bugs.webkit.org/show_bug.cgi?id=119356

        Reviewed by Benjamin Poulain.

        This patch adds an popover implementation of <input type='color'>.

        * Configurations/FeatureDefines.xcconfig: Added and enabled INPUT_TYPE_COLOR_POPOVER.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createColorPicker): Updated to pass the 
          coordinates of the <input type='color'> element and the WKView 
          object for the window.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewWillStartLiveResize): Close popover color 
          picker when the view is resized.
        (WebKit::WebPageProxy::viewInWindowStateDidChange): Close popover color
          picker when the view is no longer in the window.
        (WebKit::WebPageProxy::showColorPicker): Updated to show either a color panel
          or a popover color picker depending on whether INPUT_TYPE_COLOR_POPOVER is enabled.

        * UIProcess/mac/WebColorPickerMac.h:
        * UIProcess/mac/WebColorPickerMac.mm:
        (WebKit::WebColorPickerMac::create):
        (WebKit::WebColorPickerMac::~WebColorPickerMac):
        (WebKit::WebColorPickerMac::WebColorPickerMac):
        (WebKit::WebColorPickerMac::endPicker):
        (WebKit::WebColorPickerMac::setSelectedColor):
        (WebKit::WebColorPickerMac::showColorPicker):
        Methods updated to handle both the color panel implementation and 
          the popover implementation; also renamed m_panel to m_colorPickerUI. 

        (-[WKColorPopoverMac initWithFrame:WebCore::inView:]):
        (-[WKColorPopoverMac setAndShowPicker:WebKit::withColor:]):
        (-[WKColorPopoverMac dealloc]):
        (-[WKColorPopoverMac invalidate]):
        (-[WKColorPopoverMac windowWillClose:]):
        (-[WKColorPopoverMac didChooseColor:]):
        (-[WKColorPopoverMac setColor:]):
        WKColorPopoverMac provides the popover implementation of <input type='color'>.

        (-[WKColorPanelMac didChooseColor:]): Updated to match the interface of 
          WKColorPickerMac::didChooseColor.

2013-08-01  Anders Carlsson  <andersca@apple.com>

        Lots of leaks under WebContext::pluginInfoStoreDidLoadPlugins()
        https://bugs.webkit.org/show_bug.cgi?id=119412

        Reviewed by Simon Fraser.

        For some sick reason, the WKContextClient plugInInformationBecameAvailable callback function
        expects a +1 reference to the plug-in array. Isolate that hack to WebContextClient so that
        we don't leak the array if there is no WKContextClient.
        
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::pluginInfoStoreDidLoadPlugins):
        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::plugInInformationBecameAvailable):

2013-08-01  Kwang Yul Seo  <skyul@company100.net>

        Remove return statement in void function
        https://bugs.webkit.org/show_bug.cgi?id=119379

        Reviewed by Darin Adler.

        It does not make sense to return a value in void function.

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

2013-08-01  Kwang Yul Seo  <skyul@company100.net>

        [WK2] Add USE(SOUP) guard in WebProcess::destroyPrivateBrowsingSession
        https://bugs.webkit.org/show_bug.cgi?id=119381

        Reviewed by Darin Adler.

        The is a followup to r153355. I missed to add USE(SOUP) guard in
        WebProcess::destroyPrivateBrowsingSession.

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

2013-08-01  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] Enable QML handling of crashed/unresponsive QtWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=108474

        Forward the processDidCrash, didRelaunchProcess, processDidBecomeUnresponsive
        and processDidBecomeResponsive signals to QML's WebView.experimental.

        Reviewed by Jocelyn Turcotte.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::processDidCrash):
        (QQuickWebViewPrivate::didRelaunchProcess):
        (QQuickWebViewPrivate::processDidBecomeUnresponsive):
        (QQuickWebViewPrivate::processDidBecomeResponsive):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):

2013-07-31  Kwang Yul Seo  <skyul@company100.net>

        Use emptyString instead of String("")
        https://bugs.webkit.org/show_bug.cgi?id=119335

        Reviewed by Darin Adler.

        Use emptyString() instead of String("") because it is better style and
        faster. This is a followup to r116908, removing all occurrences of
        String("") from WebKit.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::textFromEvent):
        (WebKit::unmodifiedTextFromEvent):

2013-07-31  Ruth Fong  <ruth_fong@apple.com>

        <input type=color> Mac UI behaviour
        <rdar://problem/10269922> and https://bugs.webkit.org/show_bug.cgi?id=61276

        Implemented <input type='color'> on Mac using the native color picker. 

        Reviewed by Brady Eidson.

        Code for WebColorPickerMac is derived from Chromium's color_chooser_mac.mm:
        https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/ui/cocoa/color_chooser_mac.mm

        * Configurations/FeatureDefines.xcconfig: Enabled INPUT_TYPE_COLOR.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createColorPicker): Replaced stub implementation
          and return a WebColorPickerMac object.

        * UIProcess/WebColorPicker.cpp:
        (WebKit::WebColorPicker::invalidate): Updated to call endChooser().
        (WebKit::WebColorPicker::showColorPicker): Added stub implementation.
        * UIProcess/WebColorPicker.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Removed invalidation of removed color picker objects.
        (WebKit::WebPageProxy::showColorPicker): Updated so that it works for
          multiple <input type='color'> elements on a page.
        (WebKit::WebPageProxy::didEndColorPicker): Removed cleanup of removed color picker objects.
        (WebKit::WebPageProxy::resetStateAfterProcessExited): Removed cleanup of removed color picker objects.

        * UIProcess/mac/WebColorPickerMac.h: Added.
        * UIProcess/mac/WebColorPickerMac.mm: Added.
        (WebKit::WebColorPickerMac::create):
        (WebKit::WebColorPickerMac::~WebColorPickerMac):
        (WebKit::WebColorPickerMac::WebColorPickerMac):
        (WebKit::WebColorPickerMac::endPicker):
        (WebKit::WebColorPickerMac::setSelectedColor):
        (WebKit::WebColorPickerMac::didChooseColor):
        (WebKit::WebColorPickerMac::showColorPicker):
        WebColorPickerMac contains a reference to a WKColorPanelMac object
          and is responsible for maintaining the color picker UI.

        (-[WKColorPanelMac setAndShowPicker:withColor:]):
        (-[WKColorPanelMac invalidate]):
        (-[WKColorPanelMac windowWillClose:]):
        (-[WKColorPanelMac didChooseColor:]):
        (-[WKColorPanelMac setColor:]):
        WKColorPanelMac is a wrapper for a NSColorPanel object and 
          is responsible for the color picker UI.

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createColorChooser): Updated to always create a 
          WebColorChooser object.

        * WebProcess/WebCoreSupport/WebColorChooser.cpp:
        (WebKit::WebColorChooser::reattachColorChooser): Sets the page's 
          active color chooser to the current object and pings the UIProcess
          to show the color picker.
        (WebKit::WebColorChooser::setSelectedColor): Only sets the color in the
          color picker if the WebColorChooser object is the active color element.
        * WebProcess/WebCoreSupport/WebColorChooser.h:

2013-07-30  Gavin Barraclough  <barraclough@apple.com>

        Some cleanup in JSValue::get
        https://bugs.webkit.org/show_bug.cgi?id=119343

        Reviewed by Geoff Garen.

        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertySlot):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
            - getOwnPropertySlot, JSCell -> JSObject

2013-07-31  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Build WebKit with C++11
        https://bugs.webkit.org/show_bug.cgi?id=119337

        Reviewed by Csaba Osztrogonác.

        We no longer need to enable C++11 specifically for WebKit2.

        * WebKit2.pri:

2013-07-30  Tim Horton  <timothy_horton@apple.com>

        DHTML drag can result in a null-deref under WebDragClient::startDrag
        https://bugs.webkit.org/show_bug.cgi?id=119297
        <rdar://problem/14213012>

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::convertImageToBitmap):
        ShareableBitmap::createShareable can return null, but shouldn't dereference that.

2013-07-30  Ruth Fong  <ruth_fong@apple.com>

        Rename <input type='color'> functions in WebPageProxy, WebColorPicker
        <rdar://problem/14549771> and https://bugs.webkit.org/show_bug.cgi?id=119097

        Reviewed by Tim Horton.

        In bug 119025, WebColorChooserProxy was renamed WebColorPicker. This patch makes the UIProcess consistent
        by renaming UIProcess INPUT_TYPE_COLOR functions from ...colorChooser to ...colorPicker.

        * UIProcess/WebColorPicker.cpp:
        (WebKit::WebColorPicker::endPicker):
        * UIProcess/WebColorPicker.h:
        * UIProcess/WebColorPickerResultListenerProxy.cpp:
        (WebKit::WebColorPickerResultListenerProxy::setColor):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showColorPicker):
        (WebKit::WebPageProxy::setColorPickerColor):
        (WebKit::WebPageProxy::endColorPicker):
        (WebKit::WebPageProxy::didEndColorPicker):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/qt/WebColorPickerQt.cpp:
        (WebKit::WebColorPickerQt::createItem):
        (WebKit::WebColorPickerQt::notifyColorSelected):
        (WebKit::WebColorPickerQt::endPicker):
        * UIProcess/qt/WebColorPickerQt.h:
        * WebProcess/WebCoreSupport/WebColorChooser.cpp:
        (WebKit::WebColorChooser::WebColorChooser):
        (WebKit::WebColorChooser::setSelectedColor):
        (WebKit::WebColorChooser::endChooser):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didEndColorPicker):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2013-07-30  Anders Carlsson  <andersca@apple.com>

        Speculative fix for crash due to string access on multiple threads
        https://bugs.webkit.org/show_bug.cgi?id=119279
        <rdar://problem/14267833>

        Reviewed by Darin Adler.

        We can't use String::isolatedCopy for passing the local storage directory to the storage thread since
        that returns a String that's copied and then destroyed after the call to bind returns, leaving a small window
        where the refcount can be accessed simultaneously from two threads.

        Work around this by passing a PassRefPtr<StringImpl> to bind instead; the act of copying the PassRefPtr will
        clear out the original and so when the original is destroyed the underlying StringImpl pointer will be null.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::setLocalStorageDirectory):
        (WebKit::LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:

2013-07-30  Tim Horton  <timothy_horton@apple.com>

        Fix typo in enum name ("SelectionInSnaphot" -> "SelectionInSnapshot")
        https://bugs.webkit.org/show_bug.cgi?id=119275

        Reviewed by Simon Fraser.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions):
        Fix typo.

2013-07-30  Anders Carlsson  <andersca@apple.com>

        Plug-in process crashes if plug-in is destroyed as a result of sending NPObjectMessageReceiver::Deallocate
        https://bugs.webkit.org/show_bug.cgi?id=119270
        <rdar://problem/13368226>

        Reviewed by Darin Adler.

        Normally we use the PluginDestructionProtector RAII object to prevent plug-ins from being destroyed while
        they're executing code. However, in the case of the NPObjectMessageReceiver::Deallocate message, we can't do this
        since we don't know the plug-in or connection. 
        
        Instead, add a counter to Connection that keeps track of whether sendSync is currently called and defer plug-in
        destruction if it is. (This approach is actually more robust and we should investigate getting rid of the destruction protector).

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        (CoreIPC::Connection::sendSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::inSendSync):
        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::destroy):

2013-07-30  Tim Horton  <timothy_horton@apple.com>

        Null deref under WebPage::scaledSnapshotWithOptions
        https://bugs.webkit.org/show_bug.cgi?id=119243
        <rdar://problem/14502050>

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions):
        WebFrame::coreFrame() can be null (if the Frame is already torn down),
        so we should check it.

2013-07-30  Tim Horton  <timothy_horton@apple.com>

        Null deref under PluginView::handlesPageScaleFactor()
        https://bugs.webkit.org/show_bug.cgi?id=119231
        <rdar://problem/14440207>

        Reviewed by Darin Adler.

        Null-check the PluginView in the caller as well.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::handlesPageScaleGesture):

2013-07-30  Patrick Gansterer  <paroga@webkit.org>

        Remove unused Download*.cpp files
        https://bugs.webkit.org/show_bug.cgi?id=119248

        Reviewed by Anders Carlsson.

        * Shared/Downloads/cfnet/DownloadCFNet.cpp: Removed.
        * Shared/Downloads/curl/DownloadCurl.cpp: Removed.

2013-07-30  Jeff Miller  <jeffm@apple.com>

        Page for WKPageLoaderClient processDidCrash callback always reports a process identifier of 0
        https://bugs.webkit.org/show_bug.cgi?id=119269
        <rdar://problem/14582393>

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processIdentifier):
        Return 0 if the page is closed instead of requiring isValid().

2013-07-30  Kwang Yul Seo  <skyul@company100.net>

        [WK2] Move the implementation of WebEditorClient::checkTextOfParagraph to WebEditorClient.cpp
        https://bugs.webkit.org/show_bug.cgi?id=119034

        Reviewed by Anders Carlsson.

        The Mac and EFL ports use the same implementation of
        WebEditorClient::checkTextOfParagraph and GTK will use the same
        implementation too. So rather than duplicating the same code in
        platform specific files, move the implementation to platform agnostic
        WebProcess/WebCoreSupport/WebEditorClient.cpp.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::checkTextOfParagraph):
        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:

2013-07-30  Brian Holt  <brian.holt@samsung.com>

        [WebKit2] [Gtk] WebKitResponsePolicyDecision URI response property incorrect
        https://bugs.webkit.org/show_bug.cgi?id=119258

        Reviewed by Martin Robinson.

        Corrected the installed URI response property from PROP_REQUEST to
        PROP_RESPONSE and type from WEBKIT_TYPE_URI_REQUEST to
        WEBKIT_TYPE_URI_RESPONSE.

        * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp:
        (webkit_response_policy_decision_class_init):

2013-07-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header file to compilation.

2013-07-29  Tim Horton  <timothy_horton@apple.com>

        [wk2] Flush the WebProcess’ implicit transaction when using endDeferringViewInWindowChangesSync
        https://bugs.webkit.org/show_bug.cgi?id=119225
        <rdar://problem/14568841>

        Reviewed by Simon Fraser.

        Tell CoreAnimation to flush the implicit transaction before replying
        when using endDeferringViewInWindowChangesSync, as that method's contract
        is that the WebProcess is totally ready to be in-window when it returns.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView endDeferringViewInWindowChanges]):
        Adopt viewInWindowStateDidChange.

        (-[WKView endDeferringViewInWindowChangesSync]):
        Adopt viewInWindowStateDidChange, asking it to send a reply only if we're going to wait for one.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewInWindowStateDidChange):
        (WebKit::WebPageProxy::viewStateDidChange):
        Pull viewInWindowStateDidChange out of viewStateDidChange.
        Request a reply from SetIsInWindow if we're told to.

        * UIProcess/WebPageProxy.h: Add WantsReplyOrNot and viewInWindowStateDidChange.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didUpdateInWindowStateTimerFired):
        Don't build this version on Mac, we'll have a WebPageMac version.

        (WebKit::WebPage::setIsInWindow):
        Only start the timer to send the didUpdateInWindowState reply if we're asked to.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Add an argument to the SetIsInWindow message for whether the WebProcess
        should inform the UIProcess when SetIsInWindow completes or not.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::didUpdateInWindowStateTimerFired):
        Tell CA to flush the implicit transaction before telling the UIProcess that
        we're finished moving in-window.

2013-07-29  Tim Horton  <timothy_horton@apple.com>

        Null deref under PluginView::handlesPageScaleFactor()
        https://bugs.webkit.org/show_bug.cgi?id=119231
        <rdar://problem/14440207>

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handlesPageScaleFactor):
        * WebProcess/Plugins/PluginView.h:
        Null-check m_plugin and check m_isInitialized.
        Make pageScaleFactor() and handlesPageScaleFactor const.

2013-07-29  Anders Carlsson  <andersca@apple.com>

        Remove setUnderlayPage() and associated code
        https://bugs.webkit.org/show_bug.cgi?id=119220
        <rdar://problem/14392426>

        Reviewed by Jessie Berlin.

        This is dead code, get rid of it.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::layoutIfNeeded):
        (WebKit::WebPage::drawRect):
        * WebProcess/WebPage/WebPage.h:

2013-07-29  Sergio Correia  <sergio.correia@openbossa.org>

        CoordinatedGraphics: Add API to get and set the active state of a WebView
        https://bugs.webkit.org/show_bug.cgi?id=119067

        Reviewed by Noam Rosenthal.

        A view being in the "active" state generally means that it is not in the
        "background", although this definition can vary depending on the platform
        under consideration.

        This patch adds the following APIs to WKView:
        - bool WKViewIsActive(WKViewRef)
        This API accepts a WKViewRef as parameter and returns a boolean indicating
        whether the given view is active.

        - void WKViewSetIsActive(WKViewRef, bool)
        This API accepts a WKViewRef and a boolean as parameteres, and it sets the
        active state of the given view to the given boolean argument.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewIsActive): API added.
        (WKViewSetIsActive): Ditto.
        * UIProcess/API/C/CoordinatedGraphics/WKView.h: Export aforementioned API.
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::initialize): Use new setActive method.
        (WebKit::WebView::setActive): Added method to set the active state of the
        view.
        (WebKit::WebView::isActive): Added method to return the active state of
        view.
        (WebKit::WebView::enterAcceleratedCompositingMode): Use new setActive
        method.
        (WebKit::WebView::exitAcceleratedCompositingMode): Ditto.
        * UIProcess/CoordinatedGraphics/WebView.h: Added declarations of isActive
        and setActive.

2013-07-29  Jae Hyun Park  <jae.park@company100.net>

        Remove duplicated LayerTreeHost::supportsAcceleratedCompositing
        https://bugs.webkit.org/show_bug.cgi?id=118949

        Reviewed by Noam Rosenthal.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing):

2013-07-29  Zan Dobersek  <zdobersek@igalia.com>

        [Automake] Remove references to non-existent *_CFLAGS and *_LIBS variables
        https://bugs.webkit.org/show_bug.cgi?id=119212

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Remove references to GLOBALDEPS_(CFLAGS|LIBS) and CLUTTER_(CFLAGS|LIBS)
        variables that are not defined during the configuration process.

2013-07-28  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][WK2] Simplify context_menu_spelling_items_availability unit test
        https://bugs.webkit.org/show_bug.cgi?id=119085

        Reviewed by Gyuyoung Kim.

        Use findContextMenuItem method to check whether the item
        appears in context menu.

        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (EWK2TextCheckerTest::findContextMenuItem):
        Do not report failure inside the method.
        It doesn't allow to test the negative test cases.

        (EWK2TextCheckerTest::checkCorrectnessOfSpellingItems):
        Use findContextMenuItem method.

        (EWK2TextCheckerTest::toogleCheckSpellingWhileTyping):
        (EWK2TextCheckerTest::selectLearnSpelling):
        (EWK2TextCheckerTest::selectIgnoreSpelling):
        Verify the return value of findContextMenuItem.

        (TEST_F):
        Reset wasContextMenuShown variable, it's needed after r152153.
        Use waitUntilTrue method.

2013-07-27  Jacky Jiang  <zhajiang@blackberry.com>

        Replace all uses of GraphicsLayer::create function with the one that takes a GraphicsLayerFactory
        https://bugs.webkit.org/show_bug.cgi?id=119186

        Reviewed by Anders Carlsson.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::getOrCreateLayer):

2013-07-27  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver not working with data detection page overlays
        https://bugs.webkit.org/show_bug.cgi?id=118680

        Reviewed by Sam Weinig.

        Expose API in BundlePageOverlay so that accessibility attributes can be retrieved through the overlay.
        This requires two methods in a new callback struct. One to copy the attribute names, and the other to 
        copy the attribute values. I've folded both parameterized and non-parameterized attribute names into one method
        with a boolean to determine which one should be used. The non-parameterized attributes are not used or passed to the
        overlay at this time as there are no clients with such a need.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (PageOverlayClientImpl::setAccessibilityClient):
        (PageOverlayClientImpl::PageOverlayClientImpl):
        (PageOverlayClientImpl::copyAccessibilityAttributeValue):
        (PageOverlayClientImpl::copyAccessibilityAttributeNames):
        (WKBundlePageOverlaySetAccessibilityClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::copyAccessibilityAttributeValue):
        (WebKit::PageOverlay::copyAccessibilityAttributeNames):
        * WebProcess/WebPage/PageOverlay.h:
        (WebKit::PageOverlay::Client::copyAccessibilityAttributeValue):
        (WebKit::PageOverlay::Client::copyAccessibilityAttributeNames):
        (WebKit::PageOverlay::client):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pageOverlayCopyAccessibilityAttributeValue):
        (WebKit::WebPage::pageOverlayCopyAccessibilityAttributesNames):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]):
        (-[WKAccessibilityWebPageObject _convertScreenPointToWindow:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):

2013-07-27  Simon Fraser  <simon.fraser@apple.com>

        If entering fullscreen for a window fails, don't leave things in a bad state
        https://bugs.webkit.org/show_bug.cgi?id=119179

        Reviewed by Sam Weinig.
        
        On Lion, attempting to take a video fullscreen when the Safari window is already
        fullscreen can sometimes fail, and AppKit informs us via windowDidFailToEnterFullScreen:
        
        When this happens we have to undo the work done when entering fullscreen, to
        avoid leaving things in a bad state.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):

2013-07-26  Tim Horton  <timothy_horton@apple.com>

        Add a mode where autosizing fixes the FrameView height to at least the WKView height
        https://bugs.webkit.org/show_bug.cgi?id=119104
        <rdar://problem/14549021>

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Add autoSizingShouldExpandToViewHeight parameter.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView minimumWidthForAutoLayout]):
        (-[WKView setMinimumWidthForAutoLayout:]):
        Un-deprecate these as they're still useful if not sending a height.

        (-[WKView shouldExpandToViewHeightForAutoLayout]):
        (-[WKView setShouldExpandToViewHeightForAutoLayout:]):
        * UIProcess/API/mac/WKViewPrivate.h:
        New property, forward to WebPageProxy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setAutoSizingShouldExpandToViewHeight):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::autoSizingShouldExpandToViewHeight):
        New property, forward to WebPage.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        If enabled, update the FrameView's autoSizeFixedMinimumHeight.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setAutoSizingShouldExpandToViewHeight):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::autoSizingShouldExpandToViewHeight):
        New property; if enabled, set FrameView's autoSizeFixedMinimumHeight,
        otherwise reset it to 0.

        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeTimerFired):
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        Retrieve intrinsic content size explicitly from the FrameView, as
        it may not have used it as its final contentsSize if
        autoSizeFixedMinimumHeight is set.

        Set the WebPage's size in case the load is committed so that the
        WebFrameLoaderClient doesn't reset us to the wrong size.

        Update autoSizeFixedMinimumHeight if enabled when the view size changes.

2013-07-25  Andreas Kling  <akling@apple.com>

        ChromeClient::focusedNodeChanged() should be focusedElementChanged().
        <http://webkit.org/b/119110>

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedElementChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2013-07-25  Kwang Yul Seo  <skyul@company100.net>

        [WK2][Soup] Add private browsing support
        https://bugs.webkit.org/show_bug.cgi?id=118657

        Reviewed by Gustavo Noronha Silva.

        Support private browsing in WK2 by implementing private browsing
        related methods in WebFrameNetworkingContext.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        Add USE(SOUP) guard.

        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        Add private browsing support methods. Copied from the Mac port.
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::destroyPrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        Check if the frame enables private browsing and return the private
        browsing session.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensurePrivateBrowsingSession):
        Add USE(SOUP) guard.

2013-07-25  Kwang Yul Seo  <skyul@company100.net>

        Build fix: use of long long in CoreIPC::ArgumentEncoder and CoreIPC::ArgumentDecoder
        https://bugs.webkit.org/show_bug.cgi?id=118228

        Reviewed by Anders Carlsson.

        Build fails on some platforms where int64_t and long long are different types.

        * Shared/FileAPI/BlobRegistrationData.cpp:
        (WebKit::BlobRegistrationData::encode):
        Add explicit casts to int64_t.
        (WebKit::BlobRegistrationData::decode):
        Use int64_t instead of long long.

2013-07-25  Anders Carlsson  <andersca@apple.com>

        Remove lastModifiedDate from ResourceResponse
        https://bugs.webkit.org/show_bug.cgi?id=119092

        Reviewed by Andreas Kling.

        Update for WebCore changes.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::lastModifiedDate):
        Use ResourceResponse::lastModified() to get the last modified date.

        (WebKit::PluginView::Stream::didReceiveResponse):
        Call the static lastModified function.

        (WebKit::PluginView::manualLoadDidReceiveResponse):
        Ditto.

2013-07-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for running unit tests in the web process
        https://bugs.webkit.org/show_bug.cgi?id=118427

        Reviewed by Gustavo Noronha Silva.

        Some tests, like GObject DOM bindings API tests, run entirely in
        the WebProcess, so we just need to start the test from the UI
        process and wait until the test finishes running in the
        WebProcess. Tests are split in two files, one containing the
        actual test that runs in the WebProcess and another one to add the
        tests to the glib test system that works as a
        proxy. WebProcessTestRunner class starts a private DBus session
        bus and starts the tests sending a message to the WebExtension
        waiting until it finishes or fails. WebProcess tests are created
        by defining a class derived from WebProcessTest class and
        implementing the static create method and the virtual runTest
        method. The macro REGISTER_TEST is used by the web process tests
        to register their test cases. This patch includes the migration
        of the WebKitDOMNode test, all other GObject DOM bindings tests
        will be migrated in the same way in follow up patches.

        * UIProcess/API/gtk/tests/DOMNodeTest.cpp: Added.
        (WebKitDOMNodeTest::create): Create a new WebKitDOMNodeTest.
        (WebKitDOMNodeTest::webPageFromArgs): Get the pageID parameter
        from the arguments dictionary.
        (WebKitDOMNodeTest::testHierarchyNavigation):
        (WebKitDOMNodeTest::testInsertion):
        (WebKitDOMNodeTest::runTest): Run the given test.
        (registerTests): Register test cases.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Add new files to
        compilation.
        * UIProcess/API/gtk/tests/TestDOMNode.cpp: Added.
        (testWebKitDOMNodeHierarchyNavigation):
        (testWebKitDOMNodeInsertion):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/TestMain.cpp:
        (main): Unset DBUS_SESSION_BUS_ADDRESS environment variable to
        make sure that the GLib bus singleton is initialized by the
        private DBus session bus created by the tests.
        * UIProcess/API/gtk/tests/WebProcessTest.cpp: Added.
        (testsMap): Initialize and get the global map of tests.
        (WebProcessTest::add): Add a new test to the map, keeping a
        function to create the test.
        (WebProcessTest::create): Create a test for the given name.
        (methodCallCallback): Handle RunTest DBus method. It creates and
        runs the given test.
        (webkit_web_extension_initialize):Register the DBus service for
        this WebExtension.
        * UIProcess/API/gtk/tests/WebProcessTest.h: Added.
        * UIProcess/API/gtk/tests/WebProcessTestRunner.cpp: Added.
        (WebProcessTestRunner::WebProcessTestRunner): Start a private DBus
        session bus and get a connection to it.
        (WebProcessTestRunner::~WebProcessTestRunner): Stop the private
        DBus session bus.
        (WebProcessTestRunner::proxyCreatedCallback):
        (WebProcessTestRunner::proxy): Create a new proxy to send messages
        to the WebExtension if it doesn't exists.
        (WebProcessTestRunner::onNameAppeared): Called when the DBus
        service has been registered in the WebExtension and it's safe to
        create a proxy.
        (WebProcessTestRunner::onNameVanished): Called when the DBus
        service is unregistered. This happens when the web process crash,
        so we just exit here, because the g_asserts in the web process
        have already registered the error message.
        (WebProcessTestRunner::testFinishedCallback): Called when the
        WebProcess tests has finished.
        (WebProcessTestRunner::runTest): Send a message to the
        WebExtension to start the given test and monitor the service.
        (WebProcessTestRunner::finishTest): Save the test result and
        finish the main loop.
        * UIProcess/API/gtk/tests/WebProcessTestRunner.h: Added.

2013-05-05  Geoffrey Garen  <ggaren@apple.com>

        Rolled back in r149527 with crash fixed.

        Reviewed by Oliver Hunt.

            Rationalized 'this' value conversion
            https://bugs.webkit.org/show_bug.cgi?id=115542

2013-07-24  Ruth Fong  <ruth_fong@apple.com>

        Rename WebColorChooserProxy
        <rdar://problem/14528039> and https://bugs.webkit.org/show_bug.cgi?id=119025

        Reviewed by Brady Eidson.

        Renamed WebColorChooserProxy to WebColorPicker since the name WebColorChoooserProxy
        implies that it represents the same object as WebColorChooser, which is not true.
        Also, renamed createColorChooserProxy to createColorPicker in WebPageProxy and 
        platform-equivalent versions of it.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createColorPicker):
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebViewPrivate::createColorPicker):
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::createColorPicker):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebColorChooserProxy.cpp: Removed.
        * UIProcess/WebColorChooserProxy.h: Removed.
        * UIProcess/WebColorPicker.cpp: Copied from Source/WebKit2/UIProcess/WebColorChooserProxy.cpp.
        (WebKit::WebColorPicker::WebColorPicker):
        (WebKit::WebColorPicker::~WebColorPicker):
        (WebKit::WebColorPicker::endChooser):
        (WebKit::WebColorPicker::setSelectedColor):
        * UIProcess/WebColorPicker.h: Copied from Source/WebKit2/UIProcess/WebColorChooserProxy.h.
        (WebKit::WebColorPicker::create):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::showColorChooser):
        (WebKit::WebPageProxy::setColorChooserColor):
        (WebKit::WebPageProxy::endColorChooser):
        (WebKit::WebPageProxy::didEndColorChooser):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h: Renamed m_colorChooser to m_colorPicker.
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::createColorPicker):
        * UIProcess/qt/QtPageClient.h:
        * UIProcess/qt/WebColorChooserProxyQt.cpp: Removed.
        * UIProcess/qt/WebColorChooserProxyQt.h: Removed.
        * UIProcess/qt/WebColorPickerQt.cpp: Added.
        (WebKit::ColorChooserContextObject::ColorChooserContextObject):
        (WebKit::ColorChooserContextObject::currentColor):
        (WebKit::ColorChooserContextObject::elementRect):
        (WebKit::ColorChooserContextObject::accept):
        (WebKit::ColorChooserContextObject::reject):
        (WebKit::WebColorPickerQt::WebColorPickerQt):
        (WebKit::WebColorPickerQt::~WebColorPickerQt):
        (WebKit::WebColorPickerQt::createItem):
        (WebKit::WebColorPickerQt::createContext):
        (WebKit::WebColorPickerQt::setSelectedColor):
        (WebKit::WebColorPickerQt::notifyColorSelected):
        (WebKit::WebColorPickerQt::endChooser):
        * UIProcess/qt/WebColorPickerQt.h: Added.
        (WebKit::WebColorPickerQt::create):
        * WebKit2.xcodeproj/project.pbxproj:

2013-07-24  Anders Carlsson  <andersca@apple.com>

        Crash when calling WKPageGetProcessIdentifier after aborted process launch
        https://bugs.webkit.org/show_bug.cgi?id=119069
        <rdar://problem/14494064>

        Reviewed by Andreas Kling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processIdentifier):
        Check if the page is closed instead of checking whether we have a process - We'll always have a process.
        
        (WebKit::WebPageProxy::isValid):
        Make this const.

        * UIProcess/WebPageProxy.h:

2013-07-24  Kwang Yul Seo  <skyul@company100.net>

        [WK2][Soup] Add entry point for network process
        https://bugs.webkit.org/show_bug.cgi?id=110136

        Reviewed by Gustavo Noronha Silva.

        Original patch by Balazs Kelemen <kbalazs@webkit.org>.

        Added a common entry point for non-Mac Unix ports.

        * NetworkProcess/unix/NetworkProcessMainUnix.cpp: Added.
        (WebKit::NetworkProcessMain):
        * NetworkProcess/unix/NetworkProcessMainUnix.h: Added.
        * unix/NetworkMainUnix.cpp: Added.
        (main):

2013-07-24  Jessie Berlin  <jberlin@apple.com>

        Remove WKPageGetPlugInInformation - it is not used anymore
        https://bugs.webkit.org/show_bug.cgi?id=119047

        Reviewed by Alexey Proskuryakov.

        Revert r151172, which fixed a crash introduced in r151043, r151054, which fixed some naming
        and ref-churn issues introduced in r151043, and r151043, which added
        WKPageGetPlugInInformation.

        * UIProcess/API/C/mac/WKPagePrivateMac.cpp:
        (WKPageIsURLKnownHSTSHost):
        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:

2013-07-24  Jessie Berlin  <jberlin@apple.com>

        Remove WKPageGetPlugInInformation - it is not used anymore
        https://bugs.webkit.org/show_bug.cgi?id=119047

        Rubber-stamped by Alexey Proskuryakov.

        Revert r152328, which added a key used only in the callback info for
        WKPageGetPlugInInformation.

        * Shared/API/c/WKPluginInformation.cpp:
        * Shared/API/c/WKPluginInformation.h:
        * Shared/Plugins/Netscape/PluginInformation.cpp:
        * Shared/Plugins/Netscape/PluginInformation.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::containsPlugInCallback):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::containsPluginViewsWithPluginProcessToken):

2013-07-24  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] TestInspectorServer unit test is timing out
        https://bugs.webkit.org/show_bug.cgi?id=105866

        Reviewed by Gustavo Noronha Silva.

        The test failed because it couldn't find inspector resources in default folder
        (make install step was missing). It uses now resources available in
        WebKitBuild folder. WebInspectorServerGtk was refactored as well to make
        easier to use WEBKIT_INSPECTOR_SERVER_PATH variable.

        * UIProcess/API/gtk/tests/GNUmakefile.am:
        * UIProcess/API/gtk/tests/InspectorTestServer.cpp:
        (main):
        * UIProcess/API/gtk/tests/TestInspectorServer.cpp:
        (testInspectorServerPageList):
        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
        (WebKit::WebInspectorServer::platformResourceForPath):
        (WebKit::WebInspectorServer::buildPageList):
        (WebKit::WebInspectorServer::inspectorServerFilesPath):

2013-07-23  Simon Cooper  <scooper@apple.com>

        10.7: Java applets do not work due to sandbox violation/exception
        https://bugs.webkit.org/show_bug.cgi?id=118920
        <rdar://problem/14471541&12910934&14223830&14260729&14267679>

        Reviewed by Alexey Proskuryakov.

        Introduce versioning into the common profile and use it to fix
        a number of issues with Java on 10.7 and 10.8. Allow writing the
        com.apple.java.util.prefs preference file. This change also
        introduces a "/Library/Application Support/Java/PublicFiles"
        area which Java can read without any restrictions. Files written
        to this location will need to be created and written to by
        a privileged process.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * Resources/PlugInSandboxProfiles/com.oracle.java.JavaAppletPlugin.sb:

2013-07-23  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add doneWithTouchEvent callback to the WKViewClient.
        https://bugs.webkit.org/show_bug.cgi?id=110085

        Reviewed by Kenneth Rohde Christiansen.

        Add doneWithTouchEvent callback to the WKViewClient in order to get the
        result of touch events in the EwkView. The result will be used to
        recognize gestures in the Bug 102643.

        APIs to get values from WKTouchEventRef and WKTouchPointRef are added
        because WKTypeRef is opaque to the applications.

        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/C/efl/WKAPICastEfl.h:
        (WebKit::toAPI):
        * UIProcess/API/C/efl/WKEventEfl.cpp:
        (WKTouchEventGetType):
        (WKTouchEventGetTouchPoints):
        (WKTouchEventGetModifiers):
        (WKTouchEventGetTimestamp):
        (WKTouchPointGetID):
        (WKTouchPointGetState):
        (WKTouchPointGetScreenPosition):
        (WKTouchPointGetPosition):
        (WKTouchPointGetRadius):
        (WKTouchPointGetRotationAngle):
        (WKTouchPointGetForceFactor):
        * UIProcess/API/C/efl/WKEventEfl.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::doneWithTouchEvent):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::doneWithTouchEvent):
        * UIProcess/CoordinatedGraphics/WebViewClient.cpp:
        (WebKit::WebViewClient::doneWithTouchEvent):
        * UIProcess/CoordinatedGraphics/WebViewClient.h:
        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::doneWithTouchEvent):
        (WebKit::ViewClientEfl::ViewClientEfl):
        * UIProcess/efl/ViewClientEfl.h:

2013-07-22  Alexey Proskuryakov  <ap@apple.com>

        Frequent MESSAGE_CHECK failures in WebPageProxy::didReceiveEvent
        https://bugs.webkit.org/show_bug.cgi?id=118976
        <rdar://problem/14155030>

        Reviewed by Sam Weinig.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Clear m_gestureEventQueue, just like we clear all other event queues here.

2013-07-21  Anders Carlsson  <andersca@apple.com>

        Java Updater not launched on Lion and Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=118953
        <rdar://problem/14496721>

        Reviewed by Sam Weinig.

        On Lion and Mountain Lion, -[NSURL isEqual:] will return NO for two file URLs if one of
        them has "localhost" specified, even if the paths are otherwise equal. Work around this by
        comparing the paths directly.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::isJavaUpdaterURL):

2013-07-19  Morten Stenshorne  <mstensho@opera.com>

        [GTK] Need a way to enable region based columns from the command line
        https://bugs.webkit.org/show_bug.cgi?id=116611

        Reviewed by Martin Robinson.

        Add an environment variable to enable experimental features.

        This provides a means to enable experimental features without polluting
        the public API.

        Environment variable name: WEBKITGTK_EXPERIMENTAL_FEATURES

        Format: WEBKITGTK_EXPERIMENTAL_FEATURES="<feature1>=1,<feature2>=1,..."
        Or, to enable all experimental features: WEBKITGTK_EXPERIMENTAL_FEATURES=all

        So far the only feature is region based columns (implement multicol using
        the CSS regions implementation rather than ColumnInfo & co) - REGION_BASED_COLUMNS.

        Example: WEBKITGTK_EXPERIMENTAL_FEATURES="REGION_BASED_COLUMNS=1"

        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsConstructed):
        (webkit_settings_class_init):
        * UIProcess/gtk/ExperimentalFeatures.cpp: Added.
        (WebKit):
        (Setting):
        (WebKit::ExperimentalFeatures::ExperimentalFeatures):
        (WebKit::ExperimentalFeatures::isEnabled):
        (WebKit::ExperimentalFeatures::setEnableByName):
        (WebKit::ExperimentalFeatures::parseEnvironment):
        * UIProcess/gtk/ExperimentalFeatures.h: Added.
        (WebKit):
        (ExperimentalFeatures):

2013-07-18  Eunmi Lee  <eunmi15.lee@samsung.com>

        [WK2] Share Qt port's codes to find zoomable area with CoordinatedGraphics.
        https://bugs.webkit.org/show_bug.cgi?id=118585

        Reviewed by Anders Carlsson.

        The function to find zoomable area is needed in order to implement the
        feature to scale for double-tap gesture. The WK2 EFL and NIX port want
        to use that function, so extract the code from the Qt port, make it
        usable in the CoordinatedGraphics and add API and callback.

        * CMakeLists.txt:
        * Target.pri:
        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewFindZoomableAreaForRect):
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::didFindZoomableArea):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/CoordinatedGraphics/WebPageProxyCoordinatedGraphics.cpp: Added.
        (WebKit::WebPageProxy::findZoomableAreaForPoint):
        (WebKit::WebPageProxy::didFindZoomableArea):
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::didFindZoomableArea):
        (WebKit::WebView::findZoomableAreaForPoint):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/CoordinatedGraphics/WebViewClient.cpp:
        (WebKit::WebViewClient::didFindZoomableArea):
        * UIProcess/CoordinatedGraphics/WebViewClient.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::didFindZoomableArea):
        (WebKit::ViewClientEfl::ViewClientEfl):
        * UIProcess/efl/ViewClientEfl.h:
        * UIProcess/qt/WebPageProxyQt.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/WebPageCoordinatedGraphics.cpp: Added.
        (WebKit::WebPage::findZoomableAreaForPoint):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2013-07-18  Simon Cooper  <scooper@apple.com>

        Flash Player: deny file-read-data /Library/Application Support/Macromedia/FlashAuthor.cfg
        https://bugs.webkit.org/show_bug.cgi?id=118874
        <rdar://problem/14271327>

        Reviewed by Alexey Proskuryakov.

        Silently deny access to FlashAuthor.cfg. This location contains
        files containing lists of paths that Flash Player will
        "allow" access to (without asking the user). Since the plugin
        sandbox won't permit the access to the listed paths it is better
        to silently block attempts to read this "whitelist".

        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:

2013-07-18  Tim Horton  <timothy_horton@apple.com>

        [wk2] Ensure that the plugin layer is removed completely when the PluginProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=118862

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        Add m_pluginProcessHasCrashed.

        (WebKit::PluginView::platformLayer):
        Don't return the plugin's layer if it has crashed.

        (WebKit::PluginView::pluginProcessCrashed):
        Set m_pluginProcessHasCrashed.
        Cause a style recalc so that we rebuild the layer tree; our layer won't be included.

        * WebProcess/Plugins/PluginView.h:
        Add m_pluginProcessHasCrashed.

2013-07-18  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13886443> Assertion failures in NetworkProcess in SandboxExtension::revoke when aborting SyncNetworkResourceLoader
        <rdar://problem/13826348> ASSERT(!m_useCount) fails in NetworkProcess at SandboxExtension::~SandboxExtension
        https://bugs.webkit.org/show_bug.cgi?id=118855

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFail):
        Moved sandbox extension invalidation to cleanup() meaning that we won't fail to
        do this when aborting a loader that currently loading from network.
    
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader):
        (WebKit::SchedulableLoader::consumeSandboxExtensions):
        (WebKit::SchedulableLoader::invalidateSandboxExtensions):
        * NetworkProcess/SchedulableLoader.h:
        Keep track of whether sandbox extensions are consumed, we don't want to revoke
        extensions that were never consumed (as used to be the case with sync loaders,
        and would be with async ones after the above fix). Also, get rid of extensions
        immediately when invalidating, we won't need them again.

2013-07-18  Tim Horton  <timothy_horton@apple.com>

        Remove PDFViewController and WKView "custom representations"
        https://bugs.webkit.org/show_bug.cgi?id=118720

        Reviewed by Alexey Proskuryakov.

        PDFViewController was the only implementation of
        a "custom representation" for a WKView. As it has
        been superceded by PDFPlugin, we can remove both
        PDFViewController and the notion of a WKView custom
        representation.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/mac/PDFViewController.h: Removed.
        * UIProcess/API/mac/PDFViewController.mm: Removed.
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView accessibilityFocusedUIElement]):
        (-[WKView accessibilityHitTest:]):
        (-[WKView accessibilityAttributeValue:]):
        (-[WKView printOperationWithPrintInfo:forFrame:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/DrawingAreaProxy.h:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::supportsTextEncoding):
        (WebKit::WebPageProxy::supportsTextZoom):
        (WebKit::WebPageProxy::setTextZoomFactor):
        (WebKit::WebPageProxy::setPageZoomFactor):
        (WebKit::WebPageProxy::setPageAndTextZoomFactors):
        (WebKit::WebPageProxy::findString):
        (WebKit::WebPageProxy::countStringMatches):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::textZoomFactor):
        (WebKit::WebPageProxy::pageZoomFactor):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/qt/QtPageClient.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::WebFrameLoaderClient):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::committedLoad):
        (WebKit::WebFrameLoaderClient::finishedLoading):
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNeedsDisplayInRect):
        (WebKit::DrawingAreaImpl::scroll):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformPreferencesDidChange):
        * mac/WebKit2.order:

2013-07-18  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] Replace mouseClick with more meaningful method in test_ewk2_color_picker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=118797

        Reviewed by Christophe Dumez.

        Some mouseClick methods are used in test_ewk2_color_picker.cpp.
        But it is difficult to understand what they mean.
        So i would like to replace those with more meaningful method for readability.

        * UIProcess/API/efl/tests/test_ewk2_color_picker.cpp:
        (EWK2ColorPickerTest::clickButton):
        (TEST_F):

2013-07-18  Eunmi Lee  <eunmi15.lee@samsung.com>

        [WK2] Replace getRect() to pixelSnappedBoundingBox().
        https://bugs.webkit.org/show_bug.cgi?id=118588

        Reviewed by Noam Rosenthal.

        The Node::getRect() function was removed in the
        http://trac.webkit.org/changeset/128006, so use
        pixelSnappedBoundingBox() instead.

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

2013-07-18  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] Replace mouseClick with more meaningful method in test_ewk2_context_menu.cpp
        https://bugs.webkit.org/show_bug.cgi?id=118796

        Reviewed by Christophe Dumez.

        Some mouseClick methods are used in test_ewk2_context_menu.cpp.
        But it is difficult to understand what they mean.
        So i would like to replace those with more meaningful method for readability.

        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp:
        (EWK2ContextMenuTest::testContextMenu):
        (EWK2ContextMenuTest::testContextMenuForRemoveAndAppend):
        (EWK2ContextMenuTest::testContextMenuForSubmenu):
        (EWK2ContextMenuTest::finishTest):
        (EWK2ContextMenuTest::showContextMenu):
        (TEST_F):

2013-07-18  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] Replace mouseClick with more meaningful method in test_ewk2_file_chooser_request.cpp
        https://bugs.webkit.org/show_bug.cgi?id=118792

        Reviewed by Christophe Dumez.

        Some mouseClick methods are used in test_ewk2_file_chooser_request.cpp.
        But it is difficult to understand what they mean.
        So i would like to replace those with more meaningful method for readability.

        * UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp:
        (EWK2FileChooserRequestTest::clickFileInput):
        (TEST_F):

2013-07-18  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] Move all the static methods into EWK2TextCheckerTest in test_ewk2_text_checker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=118790

        Reviewed by Christophe Dumez.

        All the static methods should be moved to EWK2TextCheckerTest.

        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (EWK2TextCheckerTest::resetCallbacksExecutionStats):
        (EWK2TextCheckerTest::onTimeout):
        (EWK2TextCheckerTest::onSettingChange):
        (EWK2TextCheckerTest::onSpellDocumentTag):
        (EWK2TextCheckerTest::onSpellDocumentTagClose):
        (EWK2TextCheckerTest::onSpellingCheck):
        (EWK2TextCheckerTest::onSpellingForKnownWord):
        (EWK2TextCheckerTest::onWordGuesses):
        (EWK2TextCheckerTest::onWordLearn):
        (EWK2TextCheckerTest::onWordIgnore):
        (EWK2TextCheckerTest::findContextMenuItem):
        (EWK2TextCheckerTest::checkCorrectnessOfSpellingItems):
        (EWK2TextCheckerTest::toogleCheckSpellingWhileTyping):
        (EWK2TextCheckerTest::checkClientSuggestionsForWord):
        (EWK2TextCheckerTest::selectLearnSpelling):
        (EWK2TextCheckerTest::selectIgnoreSpelling):
        (EWK2TextCheckerTest::countContextMenuItems):
        (EWK2TextCheckerTest::clickButton):
        (EWK2TextCheckerTest::showContextMenu):
        (EWK2TextCheckerTest::selectFirstWord):

2013-07-17  Tim Horton  <timothy_horton@apple.com>

        Update blocked/missing plug-in UI
        https://bugs.webkit.org/show_bug.cgi?id=118347
        <rdar://problem/14209318>

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add a 6 argument -> 4 reply message handler.
        (It seems that FindPlugin is getting a little out of hand.)

        * Shared/APIClientTraits.cpp:
        * Shared/APIClientTraits.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::pluginLoadPolicy):
        * UIProcess/WebLoaderClient.h:
        Add an unavailability description out-argument to a new version of
        pluginLoadPolicy, so clients can override the text of the unavailable
        plugin indicator. Bump the WKPageLoaderClient version and update APIClientTraits.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Plumb the unavailability description through to the WebProcess via
        the FindPlugin message.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Acquire the unavailability description from the client
        (via FindPlugin) and hand it to the RenderEmbeddedObject.

2013-07-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152701, r152703, r152739, r152754,
        and r152756.
        http://trac.webkit.org/changeset/152701
        http://trac.webkit.org/changeset/152703
        http://trac.webkit.org/changeset/152739
        http://trac.webkit.org/changeset/152754
        http://trac.webkit.org/changeset/152756
        https://bugs.webkit.org/show_bug.cgi?id=118821

        this was a buggy fix and we're going to try something
        different (Requested by thorton on #webkit).

        * Platform/CoreIPC/HandleMessage.h:
        * Shared/APIClientTraits.cpp:
        * Shared/APIClientTraits.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::pluginLoadPolicy):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didClose):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginProcessCrashed):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldUnavailablePluginMessageBeButton):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::canPluginHandleResponse):

2013-07-17  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Crashes in CFURLGetBytes under WebProcess::updateActivePages()
        https://bugs.webkit.org/show_bug.cgi?id=118814
        <rdar://problem/14173389>

        Reviewed by Brady Eidson.

        Speculative fix. It's unclear how we end up with an invalid URL when committing
        a load.

        * WebProcess/mac/WebProcessMac.mm: (WebKit::WebProcess::updateActivePages):
        Added a null check.

2013-07-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152786 and r152789.
        http://trac.webkit.org/changeset/152786
        http://trac.webkit.org/changeset/152789
        https://bugs.webkit.org/show_bug.cgi?id=118807

        overly platform specific and dirty API (and Sam says no)
        (Requested by thorton on #webkit).

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        * WebProcess/WebPage/PageOverlay.cpp:
        * WebProcess/WebPage/PageOverlay.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:

2013-07-17  Tim Horton  <timothy_horton@apple.com>

        AX: VoiceOver not working with data detection page overlays
        https://bugs.webkit.org/show_bug.cgi?id=118680

        Reviewed by Anders Carlsson.

        Bump the API version after r152786.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:

2013-07-17  Simon Cooper  <scooper@apple.com>

        YouTube webcam capture (Flash Plug-in) in Safari can't see built-in camera
        https://bugs.webkit.org/show_bug.cgi?id=118787
        <rdar://problem/14418799>

        Reviewed by Alexey Proskuryakov.

        Add support for built-in cameras, including the original iSight.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:

2013-07-17  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver not working with data detection page overlays
        https://bugs.webkit.org/show_bug.cgi?id=118680

        Reviewed by Tim Horton.

        Expose API methods so that a client implementing data detectors is able to respond
        to the needs of accessibility clients like VoiceOver.

        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp:
        (PageOverlayClientImpl::supportsDataDetection):
        (PageOverlayClientImpl::dataDetectorExistsAtPoint):
        (PageOverlayClientImpl::dataDetectorCopyTypeAtPoint):
        (PageOverlayClientImpl::showDataDetectorMenuAtPoint):
        * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.h:
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::supportsDataDetection):
        (WebKit::PageOverlay::dataDetectorExistsAtPoint):
        (WebKit::PageOverlay::dataDetectorCopyTypeAtPoint):
        (WebKit::PageOverlay::dataDetectorOpenMenuAtPoint):
        * WebProcess/WebPage/PageOverlay.h:
        (WebKit::PageOverlay::Client::supportsDataDetection):
        (WebKit::PageOverlay::Client::dataDetectorExistsAtPoint):
        (WebKit::PageOverlay::Client::dataDetectorCopyTypeAtPoint):
        (WebKit::PageOverlay::Client::showDataDetectorMenuAtPoint):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::pageOverlayOpenDataDetectorMenuAtPoint):
        (WebKit::WebPage::pageOverlayDataDetectorCopyTypeAtPoint):
        (WebKit::WebPage::pageOverlayDataDetectorExistsAtPoint):
        (WebKit::WebPage::pageOverlaySupportsDataDetection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]):
        (-[WKAccessibilityWebPageObject _convertScreenPointToWindow:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2CookieManagerTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118721

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (compareHostNames):
        (onCookiesChanged):
        (EWK2CookieManagerTest::getAcceptPolicy):
        (EWK2CookieManagerTest::getHostnamesWithCookies):
        (EWK2CookieManagerTest::freeHostNames):
        (EWK2CookieManagerTest::countHostnamesWithCookies):
        (TEST_F):

2013-07-16  Balazs Kelemen  <kbalazs@webkit.org>

        [CMake] Undefined references should be detected at build time
        https://bugs.webkit.org/show_bug.cgi?id=110236

        Reviewed by Christophe Dumez.

        Add library dependencies that were not defined explicitly before.

        * CMakeLists.txt:
        * PlatformEfl.cmake:

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2WindowFeaturesTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118780

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_window_features.cpp:
        (EWK2WindowFeaturesTest::createDefaultWindow):
        (EWK2WindowFeaturesTest::createWindow):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2ViewTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118779

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (EWK2ViewTest::onLoadFinishedForRedirection):
        (EWK2ViewTest::serverCallbackNavigation):
        (EWK2ViewTest::onFormAboutToBeSubmitted):
        (EWK2ViewTest::fullScreenCallback):
        (EWK2ViewTest::fullScreenExitCallback):
        (EWK2ViewTest::checkAlert):
        (EWK2ViewTest::checkConfirm):
        (EWK2ViewTest::checkPrompt):
        (EWK2ViewTest::onTextFound):
        (EWK2ViewTest::onVibrate):
        (EWK2ViewTest::onCancelVibration):
        (EWK2ViewTest::loadVibrationHTMLString):
        (EWK2ViewTest::onContentsSizeChangedPortrait):
        (EWK2ViewTest::onContentsSizeChangedLandscape):
        (EWK2ViewTest::PageContentsAsMHTMLCallback):
        (EWK2ViewTest::PageContentsAsStringCallback):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2StorageManagerTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118777

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        (EWK2StorageManagerTest::OriginData::OriginData):
        (EWK2StorageManagerTest::getStorageOriginsCallback):
        (EWK2StorageManagerTest::timerCallback):
        (EWK2StorageManagerTest::checkOrigin):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2PopupMenuTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118775

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_popup_menu.cpp:
        (EWK2PopupMenuTest::checkBasicPopupMenuItem):
        (EWK2PopupMenuTest::selectItemAfterDelayed):
        (EWK2PopupMenuTest::showPopupMenu):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2FileChooserRequestTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118773

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp:
        (EWK2FileChooserRequestTest::onFileChooserRequest):
        (EWK2FileChooserRequestTest::compareStrings):
        (EWK2FileChooserRequestTest::freeStringList):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2FaviconDatabaseTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118772

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:
        (EWK2FaviconDatabaseTest::serverCallback):
        (EWK2FaviconDatabaseTest::requestFaviconData):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2EinaSharedStringTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118771

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_eina_shared_string.cpp:
        (EWK2EinaSharedStringTest::checkString):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2DownloadJobTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118769

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
        (EWK2DownloadJobTest::fileExists):
        (EWK2DownloadJobTest::serverCallback):
        (EWK2DownloadJobTest::on_download_requested):
        (EWK2DownloadJobTest::on_download_cancelled):
        (EWK2DownloadJobTest::on_download_failed):
        (EWK2DownloadJobTest::on_download_finished):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2AuthRequestTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118766

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_auth_request.cpp:
        (EWK2AuthRequestTest::serverCallback):
        (EWK2AuthRequestTest::onAuthenticationRequest):
        (EWK2AuthRequestTest::onLoadFinished):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2ContextMenuTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118767

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp:
        (EWK2ContextMenuTest::checkBasicContextMenuItem):
        (EWK2ContextMenuTest::customItemSelected):
        (EWK2ContextMenuTest::showContextMenu):
        (EWK2ContextMenuTest::showContextMenuForRemoveAndAppend):
        (EWK2ContextMenuTest::showContextMenuForSubmenu):
        (EWK2ContextMenuTest::hideContextMenu):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2ContextTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118763

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (EWK2ContextTest::schemeRequestCallback):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2DatabaseManagerTest should be defined by inheriting from EWK2UnitTestBase
        https://bugs.webkit.org/show_bug.cgi?id=118726

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:
        (EWK2DatabaseManagerTest::OriginData::OriginData):
        (EWK2DatabaseManagerTest::databaseOriginsCallback):
        (EWK2DatabaseManagerTest::timerCallback):
        (TEST_F):

2013-07-17  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        [EFL][WK2] EWK2ColorPickerTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118762

        Reviewed by Christophe Dumez.

        It should be defined as relevant test class specific to each test file for more readability.
        It could be helpful to remove unnecessary static methods.

        * UIProcess/API/efl/tests/test_ewk2_color_picker.cpp:
        (EWK2ColorPickerTest::onColorPickerDone):
        (EWK2ColorPickerTest::setColorPickerColor):
        (EWK2ColorPickerTest::showColorPicker):
        (EWK2ColorPickerTest::hideColorPicker):
        (EWK2ColorPickerTest::hideColorPickerByRemovingElement):
        (TEST_F):

2013-07-16  Gordon Sheridan  <gordon_sheridan@apple.com>

        setPluginUnavailabilityReason can destroy renderObject before obscurity check
        https://bugs.webkit.org/show_bug.cgi?id=118770
        <rdar://problem/14462331>

        Reviewed by Tim Horton.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Moved obscurity check to before renderObject is potentially destroyed.

2013-07-16  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r150291): Chinese predictive input pop-up disappears on twitter.com
        https://bugs.webkit.org/show_bug.cgi?id=118739
        <rdar://problem/14300350>

        Reviewed by Daniel Bates.

        EditorState tracking on UI side is very fragile. This is a targeted fix just for
        this specific scenario.

        The issue was that we had a stale m_temporarilyClosedComposition flag, which was
        making UI process believe that a composition was closed from WebProcess side,
        and notify input method about that. It shouldn't have been a problem, because there
        is no composition at this point indeed, but this extra call is a problem for
        predictive input, which works in a somewhat unconventional way (<rdar://problem/14458297>).

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::insertText): Reset m_temporarilyClosedComposition flag when
        getting new EditorState in response to performing this action. There is certainly
        no composition after insertText, and all interested parties are on the same page
        already.

2013-07-16  Jessie Berlin  <jberlin@apple.com>

        Fix some NSDictionary misuse pointed out by the clang static analyzer
        https://bugs.webkit.org/show_bug.cgi?id=118736

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::documentFragmentFromAttributedString):
        Do not put a key with a nil value pair into the NSDictionary.

2013-07-16  Michael Brüning  <michael.bruning@digia.com>

        [Qt] Replace Nokia with Qt Project in service name.
        https://bugs.webkit.org/show_bug.cgi?id=118729

        Reviewed by Simon Hausmann.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2013-07-16  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        EWK2BackForwardListTest should be defined by inheriting from EWK2UnitTestBase.
        https://bugs.webkit.org/show_bug.cgi?id=118717

        Reviewed by Christophe Dumez.

        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        (EWK2BackForwardListTest::checkItem):
        (EWK2BackForwardListTest::urlFromTitle):
        (EWK2BackForwardListTest::freeEinaList):
        (TEST_F):

2013-07-16  Kangil Han  <kangil.han@samsung.com>

        Use toHTMLSelectElement and dismiss isHTMLSelectElement
        https://bugs.webkit.org/show_bug.cgi?id=118714

        Reviewed by Ryosuke Niwa.

        To avoid direct use of static_cast, this patch introduces toHTMLIFrameElement for code cleanup.
        Additionally, this patch removes isHTMLSelectElement because not all element subclasses can be checked by a combination of tag names.

        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::commit):

2013-07-16  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        Replace mouseClick with more meaningful method in test_ewk2_text_checker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=118699

        Reviewed by Christophe Dumez.

        Many mouseClick methods are used in test_ewk2_text_checker.cpp.
        But it is difficult to understand what they mean.
        So i would like to replace those with more meaningful method for readability.

        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (EWK2TextCheckerTest::clickSelectAllWordsWithSpellcheckButton):
        (EWK2TextCheckerTest::clickSelectAllWordsWithoutSpellcheckButton):
        (EWK2TextCheckerTest::clickSelectSubWordWithSpellcheckButton):
        (EWK2TextCheckerTest::showContextMenuWithFirstLineText):
        (EWK2TextCheckerTest::showContextMenuWithSecondLineText):
        (EWK2TextCheckerTest::selectFirstWordInFirstLineText):
        (EWK2TextCheckerTest::selectFirstWordInSecondLineText):
        (TEST_F):

2013-07-15  Kangil Han  <kangil.han@samsung.com>

        Introduce toHTMLIFrameElement
        https://bugs.webkit.org/show_bug.cgi?id=118672

        Reviewed by Ryosuke Niwa.

        To avoid direct use of static_cast, this patch introduces toHTMLIFrameElement for code cleanup.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::htmlIFrameElementContentFrame):

2013-07-15  Tim Horton  <timothy_horton@apple.com>

        Update blocked/missing plug-in UI
        https://bugs.webkit.org/show_bug.cgi?id=118347
        <rdar://problem/14209318>

        Reviewed by Sam Weinig.
        Patch by Antoine Quint, Anders Carlsson, Sam Weinig, and myself.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add a 6 argument -> 4 reply message handler.
        (It seems that FindPlugin is getting a little out of hand.)

        * Shared/APIClientTraits.cpp:
        * Shared/APIClientTraits.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::pluginLoadPolicy):
        * UIProcess/WebLoaderClient.h:
        Add an unavailability description out-argument to a new version of
        pluginLoadPolicy, so clients can override the text of the unavailable
        plugin indicator. Bump the WKPageLoaderClient version and update APIClientTraits.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Plumb the unavailability description through to the WebProcess via
        the FindPlugin message.

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didClose):
        Make a strongly referencing copy of the list of PluginProxies, so we can
        throw them away without the HashMap being mutated underneath us (see the comment).

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginProcessCrashed):
        Invalidate the plug-in's widget before setting the plugin unavailability reason,
        because doing so would cause the plug-in's renderer to be torn down, making
        invalidate() crash.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldUnavailablePluginMessageIncludeButton):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Rename from shouldUnavailablePluginMessageBeButton to
        shouldUnavailablePluginMessageIncludeButton for accuracy.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Acquire the unavailability description from the client
        (via FindPlugin) and hand it to the RenderEmbeddedObject.
        (WebKit::WebPage::canPluginHandleResponse):
        Re-acquire the plugin's renderer, in case setPluginUnavailabilityReason destroyed it.

2013-07-15  Simon Cooper  <scooper@apple.com>

        PluginProcess deny file-read-data /Library/Application Support/Macromedia/FlashPlayerTrust
        https://bugs.webkit.org/show_bug.cgi?id=118690
        <rdar://problem/14255963>

        Reviewed by Dean Jackson.

        Silently deny access to FlashPlayerTrust. This location contains
        files containing lists of paths that Flash Player will
        "allow" access to (without asking the user). Since the plugin
        sandbox won't permit the access to the listed paths it is better
        to silently block attempts to read these "whitelists". The
        "whitelists" are created by other Adobe "installer" like
        applications.

        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:

2013-07-14  Jon Lee  <jonlee@apple.com>

        Calling Notification.requestPermission() without a callback crashes
        https://bugs.webkit.org/show_bug.cgi?id=118654
        <rdar://problem/14293352>

        Reviewed by Alexey Proskuryakov.

        When requestPermission() is called, we short-circuit if we know the permission was already set.
        The callback handler gets invoked. But now that callbacks are optional, we need to check to make
        sure a callback was provided.

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::startRequest): Check for the callback.

2013-07-15  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] Remote inspector server should send an error page if resources not found
        https://bugs.webkit.org/show_bug.cgi?id=117137

        Reviewed by Gustavo Noronha Silva.

        Sometimes it is difficult to understand why remote inspector fails to deliver the content.
        This patch gives an option to show error page with some basic explanation.

        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
        (WebKit::WebInspectorServer::platformResourceForPath):

2013-07-15  Simon Pena  <simon.pena@samsung.com>

        [GTK] [WK2] Check if the keyEventQueue is empty in WebPageProxy::getEditorCommandsForKeyEvent
        https://bugs.webkit.org/show_bug.cgi?id=118530

        Reviewed by Carlos Garcia Campos.

        When a key event is started in the WebProcess (e.g. in the inspector)
        it doesn't have an associated GdkEvent queued. Adding a check in 
        WebPageProxy::getEditorCommandsForKeyEvent ensures there's always a queued
        key event to process.

        In GTK-WK2, inspector-protocol/input/dispatchKeyEvent.html no longer crashes once
        this fix is in place. 

        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::getEditorCommandsForKeyEvent): Ensure m_keyEventQueue is
        not empty.

2013-07-15  Alberto Garcia  <berto@igalia.com>

        [WK2][GTK] SIGSEV in webkitWebViewBaseSizeAllocate
        https://bugs.webkit.org/show_bug.cgi?id=118052

        Reviewed by Carlos Garcia Campos.

        We don't need to check whether the drawing area is empty or not in
        order to set needsResizeOnMap.

        It can also happen that the drawing area pointer is null (if
        e.g. the web process crashes), which is the reason for this
        SIGSEGV.

        A test to prevent this was added in r88646 but was later moved to
        resizeWebKitWebViewBaseFromAllocation().

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

2013-07-10  Roger Fong  <roger_fong@apple.com>

        Plugins that don't support snapshotting should not all autostart.
        https://bugs.webkit.org/show_bug.cgi?id=118572
        <rdar://problem/14324391>.

        Reviewed by Dean Jackson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::shouldNotAddLayer): This method determines whether or not we should add the plugin's layer to the tree.
        It should not be added if the plugin is in it's snapshotted state but does not actually support snapshotting.
        (WebKit::PluginView::pluginSnapshotTimerFired): If the plugin does not support snapshotting go straight 
        to the the DisplayingSnapshot state.
        * WebProcess/Plugins/PluginView.h:

2013-07-11  Jessie Berlin  <jberlin@apple.com>

        WebResourceCacheManager::cfURLCacheHostNamesWithCallback leaks an array (pointed out by the
        clang static analyzer)
        https://bugs.webkit.org/show_bug.cgi?id=118533

        Reviewed by Anders Carlsson.

        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp:
        (WebKit::WebResourceCacheManager::cfURLCacheHostNamesWithCallback):

2013-07-11  Sergio Correia  <sergio.correia@openbossa.org>

        Use GOwnPtr in PluginProcessProxyUnix to manage stdOut variable
        https://bugs.webkit.org/show_bug.cgi?id=118568

        Reviewed by Martin Robinson.

        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):

2013-07-11  Timothy Hatcher  <timothy@apple.com>

        Revert r152267 and soft link WebInspectorUI.framework again.

        https://bugs.webkit.org/show_bug.cgi?id=118544

        Reviewed by David Kilzer.

        * Configurations/WebKit2.xcconfig:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::inspectorReallyUsesWebKitUserInterface):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/WebInspectorMac.mm:
        (WebKit::inspectorReallyUsesWebKitUserInterface):

2013-07-11  Jae Hyun Park  <jae.park@company100.net>

        [Coordinated Graphics] Parameter of commitSceneState should be const
        https://bugs.webkit.org/show_bug.cgi?id=118564

        Reviewed by Noam Rosenthal.

        Parameter of commitSceneState should be const as there should not be any
        modifications to the passed CoordinatedGraphicsState.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::commitSceneState):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2013-07-10  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/14395759> PluginProcess sometimes logs an error about being unable to load WebKit2.framework.

        Reviewed by Alexey Proskuryakov.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::createPropertyListFile): Ensure that any environment variables
        specified in dynamic linker load commands are passed to the subprocess that we spawn to create
        the MIME type property list.

2013-07-10  Brady Eidson  <beidson@apple.com>

        Some Java plugin instances can deadlock with the WebProcess on NPP_Destroy.
        <rdar://problem/14286390> and https://bugs.webkit.org/show_bug.cgi?id=118535

        Reviewed by Alexey Proskuryakov.

        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::~NPObjectProxy): ASSERT this is the main thread.
        (WebKit::NPObjectProxy::NP_Deallocate): If this isn't the main thread, call it again on the main thread.

2013-07-10  Sergio Correia  <sergio.correia@openbossa.org>

        Remove the meshType from CoordinatedCustomFilterOperation
        https://bugs.webkit.org/show_bug.cgi?id=118529

        Reviewed by Noam Rosenthal.

        Following the removal of the meshType from CustomFilterOperation in r149153,
        remove also the meshType from CoordinatedCustomFilterOperation.

        No new tests, no new functionality.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode): Remove dead comment.
        (CoreIPC::::decode): Remove meshType from CoordinatedCustomFilterOperation
        call.

2013-07-09  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] tooltip callback doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=118522

        Reviewed by Christophe Dumez.

        Add missing code to connect didChangeTooltip callback.

        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::ViewClientEfl):

2013-07-09  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Remember the scroll position and restore after exiting full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=61956
        <rdar://problem/9544461>

        Call into the main FrameView to save the scroll position before swapping the
        WebView into the full-screen window, and restore the scroll position after 
        swapping the WebView back into the browser window.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController beganExitFullScreenAnimation]):

        In WebKit2, this requires some communication between the WebProcess and the
        UIProcess, so add two new messages to WebFullScreenManager to be called by
        its proxy.

        * UIProcess/WebFullScreenManagerProxy.h:
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::saveScrollPosition):
        (WebKit::WebFullScreenManagerProxy::restoreScrollPosition):
        * WebProcess/FullScreen/WebFullScreenManager.h:
        * WebProcess/FullScreen/WebFullScreenManager.messages.in:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::saveScrollPosition):
        (WebKit::WebFullScreenManager::restoreScrollPosition):

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

        [GTK] Runtime critical warning when unloading a module that failed to load
        https://bugs.webkit.org/show_bug.cgi?id=118425

        Reviewed by Martin Robinson.

        * Platform/gtk/ModuleGtk.cpp:
        (WebKit::Module::load): Show an error message when the module
        fails to load.
        (WebKit::Module::unload): Check module pointer before calling
        unload method.

2013-07-05  Tim Horton  <timothy_horton@apple.com>

        [wk2] Add API to lock the scroll position at the top or bottom of the page
        https://bugs.webkit.org/show_bug.cgi?id=118429
        <rdar://problem/14120323>

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        Pass the current ScrollPinningBehavior across to the WebPage upon creation.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetScrollPinningBehavior):
        (WKPageSetScrollPinningBehavior):
        * UIProcess/API/C/WKPagePrivate.h:
        SPI to get/set the WebPageProxy's current ScrollPinningBehavior.
        Convert between WK API type and WebCore enum.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::creationParameters):
        Send ScrollPinningBehavior when creating a WebPage.

        (WebKit::WebPageProxy::setScrollPinningBehavior):
        Pass ScrollPinningBehavior changes across to the WebProcess (and save it
        in WebPageProxy so it can be sent back across if the WebProcess crashes).

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::scrollPinningBehavior):
        Getter/setter and storage for m_scrollPinningBehavior.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        Inform new FrameViews of the current ScrollPinningBehavior.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Set our ScrollPinningBehavior based on our creation parameters.

        (WebKit::WebPage::setScrollPinningBehavior):
        Inform the FrameView of ScrollPinningBehavior changes.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::scrollPinningBehavior): Added.
        (WebKit::WebPage::setScrollPinningBehavior): Added.
        Add storage for m_scrollPinningBehavior.

        * WebProcess/WebPage/WebPage.messages.in:
        Add SetScrollPinningBehavior message.

2013-07-05  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [EFL][WK2] Implement unit test callbacks: onWordLearn and onWordIgnore.
        https://bugs.webkit.org/show_bug.cgi?id=118392

        Reviewed by Christophe Dumez.

        Simulate behavior of Learn and Ignore Word in the text field.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::mouseDoubleClick):
        Select the entire word in the text field.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (onSpellingForKnownWord):
        (onWordLearn):
        (onWordIgnore):
        (selectLearnSpelling):
        (selectIgnoreSpelling):

2013-07-05  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] WebKit2 test TestWebKitFaviconDatabase times out with recent glib
        https://bugs.webkit.org/show_bug.cgi?id=111434

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (testNotInitialized):
        (testSetDirectory):
        (testClearDatabase):
        (testGetFavicon):
        (testGetFaviconURI): Removed gconstpointer parameter.
        (testWebViewFavicon): Fixed to make it work together with the
        other tests and removed gconstpointer parameter.
        (testFaviconDatabase): Created to call all tests in the proper
        order.
        (beforeAll): Changed to call only testFaviconDatabase instead of
        the separate tests.

2013-07-05  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        TestWebKitFaviconDatabase/clear-database is not testing things properly
        https://bugs.webkit.org/show_bug.cgi?id=118404

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (testClearDatabase): Check for an existing icon that can make the
        test fail if clear database is not working.

2013-07-04  Anders Carlsson  <andersca@apple.com>

        Paint the page background if we haven't received our first update
        https://bugs.webkit.org/show_bug.cgi?id=118402
        <rdar://problem/13893308>

        Reviewed by Simon Fraser.

        Make sure that we always paint something when we haven't received our first update from the web process.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView drawRect:]):
        * UIProcess/DrawingAreaProxyImpl.h:
        (WebKit::DrawingAreaProxyImpl::hasReceivedFirstUpdate):

2013-07-04  Anders Carlsson  <andersca@apple.com>

        Crash when createPluginInternal ends up destroying the plug-in
        https://bugs.webkit.org/show_bug.cgi?id=118397
        <rdar://problem/14155051>

        Reviewed by Simon Fraser.

        Keep the WebProcessConnection object alive while calling createPluginInternal and handle
        the IPC connection going away.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPluginAsynchronously):

2013-07-03  Gordon Sheridan  <gordon_sheridan@apple.com>

        Implement mechanism to detect (partially) hidden blocked plugins.
        https://bugs.webkit.org/show_bug.cgi?id=117998

        Reviewed by Dean Jackson.

        * Shared/Plugins/Netscape/PluginInformation.h:
        * Shared/Plugins/Netscape/PluginInformation.cpp:
        (WebKit::plugInInformationReplacementObscuredKey):
        Add key for plugInInformation dictionaries.

        (WebKit::createPluginInformationDictionary):
        Add boolean parameter identifying whether the replacement for a blocked plugin is obscured, and add it to the dictionary.

        * Shared/API/c/WKPluginInformation.h:
        * Shared/API/c/WKPluginInformation.cpp:
        (WKPluginInformationReplacementObscuredKey):
        Provide the C API for the plugInInformationReplacementObscuredKey().

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
        Add bool replacementObscured parameter to pass on argument to createPluginInformationDictionary().

        * UIProcess/WebPageProxy.messages.in:
        Add bool replacementObscured parameter to DidBlockInsecurePluginVersion() message.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Invoke isReplacementObscured() method for blocked plugins.

2013-07-03  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/14271105> Flash Player: deny ipc-posix-sem 59918130
        <rdar://problem/14349560> Flash Player: deny ipc-posix-sem MacromediaSemaphoreDig on many sites

        Reviewed by Sam Weinig.

        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:
        semaphore-owner doesn't appear to work the way we need it to, removing it (at least for now).

2013-07-03  Simon Pena  <simon.pena@samsung.com>

        WebTextCheckerClient doesn't initialize output arguments.
        https://bugs.webkit.org/show_bug.cgi?id=83683

        Reviewed by Martin Robinson.

        Callers of checkSpellingOfString and checkGrammarOfString expect
        certain default values when no misspelled (or bad grammar) string
        is found. They try to do that by initialising the reply arguments
        that go into the IPC calls, but these values are ultimately ignored (see
        HandleMessage.h, where the replyArguments are declared).

        In the past, this seems to have led to various issues, (see
        TextCheckingHelper::findFirstMisspelling in TextCheckingHelper.cpp),
        where these return values are asserted and checked to be in the right range.

        This patch initialises the values, so even if no available client
        implements the methods (or if the implementation forgets to do it) the callers
        will have their expected output.

        However, and for a general case, we probably need a way to tell the caller
        that any existing value in the output arguments will be ignored.

        * UIProcess/WebTextCheckerClient.cpp:
        (WebKit::WebTextCheckerClient::checkSpellingOfString):
        (WebKit::WebTextCheckerClient::checkGrammarOfString):


2013-07-03  Sergio Villar Senin  <svillar@igalia.com>

        [GTK][WK2] SIGSEV in WebKit::WebPageContextMenuClient::customContextMenuItemSelected
        https://bugs.webkit.org/show_bug.cgi?id=116867

        Reviewed by Anders Carlsson.

        We did not reset the clients on WebPageProxy::close(), so right
        clicking on a link after starting the navigation to some other
        page was causing crashes because code was trying to access an
        already freed m_contextMenuClient.

        There were some other clients that could potentially trigger the
        same issues. Reset them all to null to prevent this situation.

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

2013-07-03  Simon Pena  <simon.pena@samsung.com>

        Output arguments used in IPC calls should be returned initialised
        https://bugs.webkit.org/show_bug.cgi?id=118354

        Reviewed by Anders Carlsson.

        When Download::shouldDecodeSourceDataOfMIMEType and Download::retrieveDestinationWithSuggestedFilename
        call DownloadProxy::shouldDecodeSourceDataOfMIMEType and DownloadProxy::decideDestinationWithSuggestedFilename
        through IPC, they assume the output arguments result and allowOverwrite have
        been initialised.

        This patch initialises these arguments also in the unlikely event that a
        m_webContext is not available.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::shouldDecodeSourceDataOfMIMEType):
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):

2013-07-03  Sergio Villar Senin  <svillar@igalia.com>

        [WK2][GTK] Invalid ASSERTs in WebResources loading code
        https://bugs.webkit.org/show_bug.cgi?id=118352

        Reviewed by Carlos Garcia Campos.

        The WebKitWebView keeps track of the resources being loaded in a
        map. A couple of ASSERTs verify that every loaded resource is
        stored in that map.

        The map that is cleared each time a new load starts so there is a
        small chance that we get notifications for resources that
        correspond to previous page loads
        (and thus are not stored in the map). We should remove the ASSERT
        which is not valid anymore.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewGetLoadingWebResource):

2013-07-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Migrate WebKitWebContext to GTask
        https://bugs.webkit.org/show_bug.cgi?id=117153

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextGetPluginThread):
        (webkit_web_context_get_plugins):
        (webkit_web_context_get_plugins_finish):

2013-07-02  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Invalidate FontCache before purging MemoryCache upon WebProcess termination/closure
        https://bugs.webkit.org/show_bug.cgi?id=118280

        Reviewed by Darin Adler.

        Invalidate the FontCache before disabling and purging the MemoryCache in WebProcess::didClose
        and WebProcess::terminate. This frees up additional references to objects that were held
        by the FontCache, reducing the amount of 'LEAK: *' output when exiting MiniBrowser or
        WebKitTestRunner in debug builds.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::terminate):
        (WebKit::WebProcess::didClose):

2013-07-02  Jessie Berlin  <jberlin@apple.com>

        The callback for WKPageGetPlugInInformation needs info about whether or not there are any
        non-playing instances of the plug-in on the page
        https://bugs.webkit.org/show_bug.cgi?id=118330

        Reviewed by Anders Carlsson.

        Add another key value pair to the dictionary passed to the callback.

        * Shared/API/c/WKPluginInformation.cpp:
        (WKPlugInInformationPageContainsNonPlayingInstanceOfPlugInKey):
        * Shared/API/c/WKPluginInformation.h:

        * Shared/Plugins/Netscape/PluginInformation.cpp:
        (WebKit::plugInInformationPageContainsNonPlayingInstanceOfPlugInKey):
        (WebKit::createPlugInInformationDictionary):
        Add the information about whether or not the page contains a non-playing instance of that
        plug-in to the plug-in information dictionary.
        * Shared/Plugins/Netscape/PluginInformation.h:

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::containsPlugInCallback):
        Check if any of the MIME types of the plug-in instances that are present on the page but are
        not playing match the instance of plug-in being searched for.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::addPlugInMimeTypesFromNodeListForNonPlayingPlugIns):
        Based roughly off of addPlugInsFromNodeListMatchingPlugInOrigin in
        HTMLPlugInImageElement.cpp.
        (WebKit::WebPage::containsPluginViewsWithPluginProcessToken):
        Based roughly off of HTMLPlugInImageElement::restartSimilarPlugIns.

2013-07-02  Alexey Proskuryakov  <ap@apple.com>

        security/block-test.html fails when NetworkProcess is enabled
        https://bugs.webkit.org/show_bug.cgi?id=118320
        <rdar://problem/14309423>

        Reviewed by Geoff Garen.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::wasBlocked):
        (WebKit::NetworkResourceLoader::cannotShowURL):
        Implemented missing ResourceHandleClient functions.

2013-07-02  Ada Chan  <adachan@apple.com>

        Fix crash when PageBanner::detachFromPage() is called from WebPage::~WebPage().
        https://bugs.webkit.org/show_bug.cgi?id=118268

        Reviewed by Beth Dakin.

        * WebProcess/WebPage/mac/PageBannerMac.mm:
        (WebKit::PageBanner::detachFromPage): Add some null checks. m_webPage->corePage()
        can be null if this method is called after the web page is closed.

2013-07-02  Jae Hyun Park  <jae.park@company100.net>

        Implement CoordinatedSurface for Threaded Coordinated Graphics
        https://bugs.webkit.org/show_bug.cgi?id=109661

        Reviewed by Noam Rosenthal.

        This is a preparation patch for Threaded Coordianted Graphics.

        This patch implements ThreadSafeCoordinatedSurface using ImageBuffer as a
        backend. Also, this patch moves common implementation to CoordinatedSurface to
        prevent duplication of code.

        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::WebCoordinatedSurface):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:

2013-07-01  Alexey Proskuryakov  <ap@apple.com>

        Clean up private browsing session tracking
        https://bugs.webkit.org/show_bug.cgi?id=118266
        <rdar://problem/13078036>

        Reviewed by Brady Eidson.

        Instead of counting API calls, we now watch actual WebPreferences objects.

        * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesSetPrivateBrowsingEnabled):
        Removed code that used to notify WebContext. It's now done by WebPreferences.

        * UIProcess/WebContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess): Instead of counting the number of times
        API was called, rely on WebPreferences tracking.
        (WebKit::WebContext::willStartUsingPrivateBrowsing): Ditto. This function is
        now only called when we detect a change in private browsing state.
        (WebKit::WebContext::willStopUsingPrivateBrowsing): Ditto.
        (WebKit::WebContext::createNewWebProcess): Tell the new process to create a private
        browsing session if needed.

        * UIProcess/WebPreferences.h:
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::addPageGroup): Count how many page groups use private
        browsing, and notify WebContext when a session is needed. Note that we don't notify
        WebContext about WebPreferences without any page groups, because it's likely
        that preferences will be updated by the client before groups are associated.
        (WebKit::WebPreferences::removePageGroup): Ditto.
        (WebKit::WebPreferences::updateBoolValueForKey): Perform special handling for
        private browsing mode changes.
        (WebKit::WebPreferences::updatePrivateBrowsingValue): Notify WebContext when
        it's time to create or destroy a private browsing session.
        (WebKit::WebPreferences::anyPageGroupsAreUsingPrivateBrowsing): A getter for
        WebContext to know when any page groups are in private browsing mode.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences):
        Don't create a private browsing session implicitly, UI process takes care of it.

2013-07-01  Timothy Hatcher  <timothy@apple.com>

        Link to WebInspectorUI.framework at build time instead of soft linking.

        https://bugs.webkit.org/show_bug.cgi?id=118261

        Reviewed by Joseph Pecoraro.

        * Configurations/WebKit2.xcconfig:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::inspectorReallyUsesWebKitUserInterface):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/WebInspectorMac.mm:
        (WebKit::inspectorReallyUsesWebKitUserInterface):

2013-07-01  Tim Horton  <timothy_horton@apple.com>

        [wk2] TiledCoreAnimationDrawingArea should support scrolling its exposed rect
        https://bugs.webkit.org/show_bug.cgi?id=118173
        <rdar://problem/14301166>

        Reviewed by Anders Carlsson.

        Offset the exposed rect passed from the WKView by the main frame's current scroll position
        before sending it to our TiledBackings, so that it is in the same coordinate space as their
        ordinary visibleRects.

        This has the side effect of making clips-to-exposed-rect testable (though useless) in Safari.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        Add updateScrolledExposedRect() and m_scrolledExposedRect.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scroll):
        Call updateScrolledExposedRect when the main frame scrolls.

        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect):
        Remove a FIXME about this change.
        Call updateScrolledExposedRect instead of passing down the unscrolled rect.

        (WebKit::TiledCoreAnimationDrawingArea::setClipsToExposedRect):
        Call updateScrolledExposedRect, because that method will short-circuit if
        setClipsToExposedRect is false, so we need to update here for correctness
        if we get a setExposedRect(), setClipsToExposedRect(true) pair.

        (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect):
        Update m_scrolledExposedRect and propagate it to our TiledBackings.

        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
        (WebKit::TiledCoreAnimationDrawingArea::didCommitChangesForLayer):
        Use the scrolled exposed rect.

2013-07-01  Ada Chan  <adachan@apple.com>

        Properly hide the header and footer banners if they are set to null.
        https://bugs.webkit.org/show_bug.cgi?id=118219

        Reviewed by Beth Dakin.
        
        Call Page::addFooterWithHeight(0) to remove the parent layer that hosts the banner when
        the footer banner is detached. Similarly for the header banner.

        * WebProcess/WebPage/mac/PageBannerMac.mm:
        (WebKit::PageBanner::detachFromPage):

2013-07-01  Jochen Eisinger  <jochen@chromium.org>

        Remove support for consumable user gestures
        https://bugs.webkit.org/show_bug.cgi?id=118247

        Reviewed by Geoffrey Garen.

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::didClickNotification):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        (WebKit::PluginView::evaluate):
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle):

2013-06-27  Jer Noble  <jer.noble@apple.com>

        Audio in apps which embed WebViews is corrupted.
        https://bugs.webkit.org/show_bug.cgi?id=118163

        Reviewed by Maciej Stachowiak.

        Expose the WebCore lowPowerVideoAudioBufferSizeEnabled setting to WebKit2 clients.

        * Shared/WebPreferencesStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2013-07-01  Sam Weinig  <sam@webkit.org>

        WKPageLoadDataWithUserData neglects to set the base URL that is passed in
        <rdar://problem/14306784>
        https://bugs.webkit.org/show_bug.cgi?id=118256

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadData):
        Pass the baseURL, not blankURL(), and remove an unnecessary multiplication by sizeof(uint8_t) which is always 1.

2013-07-01  Kangil Han  <kangil.han@samsung.com>

        Adopt toHTMLTextAreaElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=118226

        Reviewed by Andreas Kling.

        To enhance readability, this patch adopts toHTMLTextAreaElement.
        This also helps out to reduce duplicated use of static_cast.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::htmlTextAreaElementLastChangeWasUserEdit):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::textDidChangeInTextArea):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::containsAnyFormControls):

2013-06-28  Andreas Kling  <akling@apple.com>

        Fix Windows builds after deprecatedCharactersWithNullTermination() removal.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::createServerAndClientIdentifiers):

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

        [wk2] WKView shouldn't force scrolling off if shouldClipToVisibleRect is set
        https://bugs.webkit.org/show_bug.cgi?id=118174
        <rdar://problem/14301175>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateViewExposedRect]):
        Pass whether or not clips-to-visibleRect is enabled down to the WebPageProxy.

        (-[WKView setMinimumSizeForAutoLayout:]):
        Disable scrolling when using autolayout instead of when using clips-to-visibleRect.

        (-[WKView setShouldClipToVisibleRect:]):
        Clipping to the WKView's visibleRect does not strictly require scrolling to be disabled,
        and in fact there are cases (RTL/TB pagination) where we *must* scroll, even when the view
        is big enough to fit the content (the case clip-to-visibleRect was added for).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::viewExposedRectChanged):
        (WebKit::WebPageProxy::exposedRectChangedTimerFired):
        Keep track of and forward to the drawing area whether or not clips-to-visibleRect is enabled.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setClipsToExposedRect): Added.
        (WebKit::DrawingArea::didChangeScrollOffsetForAnyFrame): Added a missing space.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::viewExposedRectChanged):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Forward clips-to-visibleRect enabled state to the drawing area.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        Add storage for m_clipsToExposedRect.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::setClipsToExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::updateMainFrameClipsToExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
        (WebKit::TiledCoreAnimationDrawingArea::didCommitChangesForLayer):
        Check m_clipsToExposedRect instead of the main-frame's isScrollable() to determine
        whether we should tell our TiledBackings to clip to the exposed rect we provide.

        We don't need to listen to mainFrameScrollabilityChanged anymore.

2013-06-28  Gavin Barraclough  <barraclough@apple.com>

        Stale occlusion state after moving page back into window
        https://bugs.webkit.org/show_bug.cgi?id=118202

        Reviewed by Anders Carlsson.
        
        We need to update the occlusion state when the page goes back into the window.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
            - update occlusion state.

2013-06-28  Gwang Yoon Hwang  <ryumiel@company100.net>

        Coordinated Graphics: Separate CoordinatedLayerTreeHost into CoordinatedLayerTreeHost and CompositingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=104360

        Reviewed by Noam Rosenthal.

        The CoordinatedLayerTreeHost has too many responsibilities. It
        implements LayerTreeHost, GraphicsLayerClient,
        CoordinatedGraphicsLayerClient, CoordinatedImageBacking::Client,
        UpdateAtlas::Client, GraphicsLayerFactory and
        WebCustomFilterProgramProxyClient.

        This refactoring reduces the responsibilities of CoordinatedLayerTreeHost.

        This patch introduces a new class called CompositingCoordinator, which
        takes the responsibility of managing compositing resources in
        WebProcess.

        CoordinatedLayerTreeHost is responsible only for the scheduling and
        IPC-specific stuff, which are relevant only for WebKit2.

        No new tests, covered by existing tests.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::~CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::invalidate):
        (WebKit::CoordinatedLayerTreeHost::forceRepaint):
        (WebKit::CoordinatedLayerTreeHost::sizeDidChange):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::renderNextFrame):
        (WebKit::CoordinatedLayerTreeHost::purgeBackingStores):
        (WebKit::CoordinatedLayerTreeHost::willSyncLayerState):
        (WebKit::CoordinatedLayerTreeHost::prepareCustomFilterProxiesForAnimations):
        (WebKit::CoordinatedLayerTreeHost::checkCustomFilterProgramProxies):
        (WebKit::CoordinatedLayerTreeHost::removeCustomFilterProgramProxy):
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):
        (WebKit::CoordinatedLayerTreeHost::performScheduledLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::createPageOverlayLayer):
        (WebKit::CoordinatedLayerTreeHost::paintLayerContents):
        (WebKit::CoordinatedLayerTreeHost::commitSceneState):
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::CoordinatedLayerTreeHost::graphicsLayerFactory):
        (WebKit::CoordinatedLayerTreeHost::scheduleAnimation):
        (WebKit::CoordinatedLayerTreeHost::commitScrollOffset):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.h:

2013-06-28  Anders Carlsson  <andersca@apple.com>

        Make the UI process run the Java Updater
        https://bugs.webkit.org/show_bug.cgi?id=118197
        <rdar://problem/14255677>

        Reviewed by Sam Weinig.

        Patch the relevant NSWorkspace method and pipe through the request to launch the Java updater to the UI process.

        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::replacedNSWorkspace_launchApplicationAtURL_options_configuration_error):
        (WebKit::initializeCocoaOverrides):
        (WebKit::PluginProcess::launchApplicationAtURL):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::isJavaUpdaterURL):
        (WebKit::shouldLaunchApplicationAtURL):
        (WebKit::PluginProcessProxy::launchApplicationAtURL):

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

        WARN_UNUSED_RESULT can't be used in API headers, but WKBundlePageExtendIncrementalRenderingSuppression tries to
        https://bugs.webkit.org/show_bug.cgi?id=118196
        <rdar://problem/14303613>

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2013-06-28  Andreas Kling  <akling@apple.com>

        Don't fire process-became-responsive callback when disconnecting it.
        <http://webkit.org/b/118166>

        Reviewed by Anders Carlsson.

        When disconnecting from a web process, call ResponsivenessTimer::invalidate() instead of
        stop() to avoid firing the didBecomeResponsive() callback.

        This lets the UI process react faster to actually unresponsive processes.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::disconnect):

2013-06-28  Sergio Villar Senin  <svillar@igalia.com>

        [WK2][GTK] 100% CPU usage rendering a page with animations
        https://bugs.webkit.org/show_bug.cgi?id=117703

        Reviewed by Martin Robinson.

        Unconditionally update the value of m_lastFlushTime in
        ::flushAndRenderLayers. By doing that we avoid a neverending
        sequence of layer flushes that happened when m_lastFlushTime==0
        and flushPendingLayerChanges() was false. In that situation the
        value m_lastFlushTime was never updated so a new flush was always
        rescheduled.

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

2013-06-28  Andres Gomez  <agomez@igalia.com>

        [GTK] MiniBrowser doesn't solve the saving location when there are no XDG settings
        https://bugs.webkit.org/show_bug.cgi?id=117538

        Reviewed by Carlos Garcia Campos.

        If the XDG specification is not working for the "Downloads"
        directory, let's use HOME as fallback.

        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkitDownloadDecideDestination):

2013-06-28  Dariusz Frankiewicz  <d.frankiewic@samsung.com>

        [EFL][WK2] Add spellcheck API tests in unit tests.
        https://bugs.webkit.org/show_bug.cgi?id=118123

        Reviewed by Christophe Dumez.

        According to discussion in bug https://bugs.webkit.org/show_bug.cgi?id=113742
        we're moving spelling tests from layout tests to unit tests.

        * UIProcess/API/efl/tests/resources/spelling_selection_tests.html: Added.
        New file is needed to make tests, with and without spellcheck attribute.
        File contains basic site with content editable fields and buttons which select
        different parts of misspelled words.

        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (countContextMenuItems):
        Added method used to count number of items in context menu.

2013-06-27  Kangil Han  <kangil.han@samsung.com>

        Adopt is/toHTMLInputElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=118130

        Reviewed by Antti Koivisto.

        To enhance readability, this patch adopts is/toHTMLInputElement.
        This also helps out to reduce duplicated use of static_cast.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementValueForUser):
        (WebKit::InjectedBundleNodeHandle::isHTMLInputElementAutofilled):
        (WebKit::InjectedBundleNodeHandle::setHTMLInputElementAutofilled):
        (WebKit::InjectedBundleNodeHandle::htmlInputElementLastChangeWasUserEdit):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedNodeChanged):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::textFieldDidBeginEditing):
        (WebKit::WebEditorClient::textFieldDidEndEditing):
        (WebKit::WebEditorClient::textDidChangeInTextField):
        (WebKit::WebEditorClient::doTextFieldCommandFromEvent):
        (WebKit::WebEditorClient::textWillBeDeletedInTextField):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::containsAnyFormControls):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):

2013-06-27  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add WK2 C API to handle touch events.
        https://bugs.webkit.org/show_bug.cgi?id=108915

        Reviewed by Gyuyoung Kim.

        Touch events for our target platforms differ (XInput2, Wayland, Tizen) so
        for the EFL port we want to be able to feed events manually.

        To keep our current API for desktop EFL/Enlightenment working, we convert
        our currently limited EFL events to the new EFL specific C EwkTouchPoint
        and EwkTouchEvent type.

        EwkTouchPoint and EwkTouchEvent are exposed as WKTouchPointRef and
        WKTouchEventRef, so they are opaque in the applications.

        The WKViewSendTouchEvent can be used for any use-case (platform/product)
        not involving the EFL events.

        At the same time we make sure to avoid using WK2 internals in our EFL API
        implementation.

        * PlatformEfl.cmake:
        * Shared/API/c/efl/WKBaseEfl.h:
        * Shared/APIObject.h:
        * Shared/NativeWebTouchEvent.h:
        (WebKit::NativeWebTouchEvent::nativeEvent):
        * Shared/efl/NativeWebTouchEventEfl.cpp:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/efl/WebEventFactory.cpp:
        (WebKit::toWebPlatformTouchPointState):
        (WebKit::toWebEventType):
        (WebKit::toWebEventModifiers):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/efl/WebEventFactory.h:
        * UIProcess/API/C/efl/WKAPICastEfl.h:
        * UIProcess/API/C/efl/WKEventEfl.cpp: Added.
        (WKTouchPointCreate):
        (WKTouchEventCreate):
        * UIProcess/API/C/efl/WKEventEfl.h: Added.
        * UIProcess/API/C/efl/WKViewEfl.cpp:
        (WKViewSendTouchEvent):
        * UIProcess/API/C/efl/WKViewEfl.h:
        * UIProcess/API/efl/EwkView.cpp:
        (toWKTouchPointState):
        (toWKEventModifiers):
        (EwkView::feedTouchEvent):
        (EwkView::feedTouchEvents):
        * UIProcess/efl/EwkTouchEvent.cpp: Added.
        (WebKit::EwkTouchEvent::EwkTouchEvent):
        * UIProcess/efl/EwkTouchEvent.h: Added.
        (WebKit::EwkTouchEvent::create):
        (WebKit::EwkTouchEvent::eventType):
        (WebKit::EwkTouchEvent::touchPoints):
        (WebKit::EwkTouchEvent::modifiers):
        (WebKit::EwkTouchEvent::timestamp):
        (WebKit::EwkTouchEvent::type):
        * UIProcess/efl/EwkTouchPoint.cpp: Added.
        (WebKit::EwkTouchPoint::EwkTouchPoint):
        * UIProcess/efl/EwkTouchPoint.h: Added.
        (WebKit::EwkTouchPoint::create):
        (WebKit::EwkTouchPoint::id):
        (WebKit::EwkTouchPoint::state):
        (WebKit::EwkTouchPoint::screenPosition):
        (WebKit::EwkTouchPoint::position):
        (WebKit::EwkTouchPoint::radius):
        (WebKit::EwkTouchPoint::rotationAngle):
        (WebKit::EwkTouchPoint::forceFactor):
        (WebKit::EwkTouchPoint::type):
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebViewEfl::sendTouchEvent):
        * UIProcess/efl/WebViewEfl.h:

2013-06-27  Csaba Osztrogonác  <ossy@webkit.org>

        Fix cast-align warnings in WebKit2/Platform/CoreIPC
        https://bugs.webkit.org/show_bug.cgi?id=117987

        Reviewed by Rob Buis, WK2 signed-off by Anders Carlsson.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::decode):
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::encode):

2013-06-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152074.
        http://trac.webkit.org/changeset/152074
        https://bugs.webkit.org/show_bug.cgi?id=118137

        It caused lots of layout and API test crash on Qt Wk2.
        (Requested by kadam on #webkit).

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::~CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::invalidate):
        (WebKit::CoordinatedLayerTreeHost::forceRepaint):
        (WebKit::CoordinatedLayerTreeHost::sizeDidChange):
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):
        (WebKit::CoordinatedLayerTreeHost::clearPendingStateChanges):
        (WebKit::CoordinatedLayerTreeHost::initializeRootCompositingLayerIfNeeded):
        (WebKit::CoordinatedLayerTreeHost::syncLayerState):
        (WebKit::CoordinatedLayerTreeHost::prepareCustomFilterProxiesIfNeeded):
        (WebKit::CoordinatedLayerTreeHost::checkCustomFilterProgramProxies):
        (WebKit::CoordinatedLayerTreeHost::removeCustomFilterProgramProxy):
        (WebKit::CoordinatedLayerTreeHost::detachLayer):
        (WebKit::CoordinatedLayerTreeHost::performScheduledLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::syncDisplayState):
        (WebKit::CoordinatedLayerTreeHost::didPerformScheduledLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::createPageOverlayLayer):
        (WebKit::CoordinatedLayerTreeHost::createImageBackingIfNeeded):
        (WebKit::CoordinatedLayerTreeHost::createImageBacking):
        (WebKit::CoordinatedLayerTreeHost::updateImageBacking):
        (WebKit::CoordinatedLayerTreeHost::clearImageBackingContents):
        (WebKit::CoordinatedLayerTreeHost::removeImageBacking):
        (WebKit::CoordinatedLayerTreeHost::flushPendingImageBackingChanges):
        (WebKit::CoordinatedLayerTreeHost::notifyAnimationStarted):
        (WebKit::CoordinatedLayerTreeHost::notifyFlushRequired):
        (WebKit::CoordinatedLayerTreeHost::paintContents):
        (WebKit::CoordinatedLayerTreeHost::createGraphicsLayer):
        (WebKit::CoordinatedLayerTreeHost::deviceScaleFactor):
        (WebKit::CoordinatedLayerTreeHost::pageScaleFactor):
        (WebKit::CoordinatedLayerTreeHost::createUpdateAtlas):
        (WebKit::CoordinatedLayerTreeHost::removeUpdateAtlas):
        (WebKit::CoordinatedLayerTreeHost::visibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::mainContentsLayer):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::CoordinatedLayerTreeHost::graphicsLayerFactory):
        (WebKit::CoordinatedLayerTreeHost::scheduleAnimation):
        (WebKit::CoordinatedLayerTreeHost::renderNextFrame):
        (WebKit::CoordinatedLayerTreeHost::purgeBackingStores):
        (WebKit::CoordinatedLayerTreeHost::paintToSurface):
        (WebKit::CoordinatedLayerTreeHost::scheduleReleaseInactiveAtlases):
        (WebKit::CoordinatedLayerTreeHost::releaseInactiveAtlasesTimerFired):
        (WebKit::CoordinatedLayerTreeHost::commitScrollOffset):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setVisibleContentsRect):
        (WebKit::LayerTreeHost::renderNextFrame):
        (WebKit::LayerTreeHost::purgeBackingStores):

2013-06-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Fixing some compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=117791

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/tests/WebExtensionTest.cpp: Properly
        initialized GDBusInterfaceVTable.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitWebPageCreate): Added missing fields to the
        WKBundlePageLoaderClient.

2013-06-27  Iago Toral Quiroga  <itoral@igalia.com>

        Use consistent file names for WidgetBackingStoreGtkX11 class
        https://bugs.webkit.org/show_bug.cgi?id=118124

        Reviewed by Carlos Garcia Campos.

        * UIProcess/cairo/BackingStoreCairo.cpp:

2013-06-27  Alberto Garcia  <agarcia@igalia.com>

        [GTK] [WK2] Check value of WEBKIT_INJECTED_BUNDLE_PATH
        https://bugs.webkit.org/show_bug.cgi?id=118055

        Reviewed by Carlos Garcia Campos.

        If the directory pointed at by WEBKIT_INJECTED_BUNDLE_PATH does
        not exist, fall back to the system directory.

        This makes MiniBrowser work outside the build tree.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (injectedBundleDirectory):

2013-06-26  Simon Cooper  <scooper@apple.com>

        Sometimes the Flash Player plugin cannot make outgoing connections
        https://bugs.webkit.org/show_bug.cgi?id=118110
        <rdar://problem/14270933>

        Reviewed by Alexey Proskuryakov.

        Allow outgoing and incoming UDP data. Tidy up the QuickTime
        profile as it gets the UDP ability from the common profile.

        * Resources/PlugInSandboxProfiles/com.apple.QuickTime Plugin.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-26  Simon Cooper  <scooper@apple.com>

        Flash Player: deny ipc-posix-sem 59918130
        https://bugs.webkit.org/show_bug.cgi?id=118107
        <rdar://problem/14271105>

        Reviewed by Alexey Proskuryakov.

        Allow same-sandbox scoped semaphores on Mavericks. Permit the
        named semaphore for older releases.

        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:

2013-06-26  Gwang Yoon Hwang  <ryumiel@company100.net>

        Coordinated Graphics: Separate CoordinatedLayerTreeHost into CoordinatedLayerTreeHost and CompositingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=104360

        Reviewed by Noam Rosenthal.

        The CoordinatedLayerTreeHost has too many responsibilities. It
        implements LayerTreeHost, GraphicsLayerClient,
        CoordinatedGraphicsLayerClient, CoordinatedImageBacking::Client,
        UpdateAtlas::Client, GraphicsLayerFactory and
        WebCustomFilterProgramProxyClient.

        This refactoring reduces the responsibilities of CoordinatedLayerTreeHost.

        This patch introduces a new class called CompositingCoordinator, which
        takes the responsibility of managing compositing resources in
        WebProcess.

        CoordinatedLayerTreeHost is responsible only for the scheduling and
        IPC-specific stuff, which are relevant only for WebKit2.

        No new tests, covered by existing tests.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::~CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::invalidate):
        (WebKit::CoordinatedLayerTreeHost::forceRepaint):
        (WebKit::CoordinatedLayerTreeHost::sizeDidChange):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::renderNextFrame):
        (WebKit::CoordinatedLayerTreeHost::purgeBackingStores):
        (WebKit::CoordinatedLayerTreeHost::willSyncLayerState):
        (WebKit::CoordinatedLayerTreeHost::prepareCustomFilterProxiesForAnimations):
        (WebKit::CoordinatedLayerTreeHost::checkCustomFilterProgramProxies):
        (WebKit::CoordinatedLayerTreeHost::removeCustomFilterProgramProxy):
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):
        (WebKit::CoordinatedLayerTreeHost::performScheduledLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::createPageOverlayLayer):
        (WebKit::CoordinatedLayerTreeHost::paintLayerContents):
        (WebKit::CoordinatedLayerTreeHost::commitSceneState):
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::CoordinatedLayerTreeHost::graphicsLayerFactory):
        (WebKit::CoordinatedLayerTreeHost::scheduleAnimation):
        (WebKit::CoordinatedLayerTreeHost::commitScrollOffset):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.h:

2013-06-26  Simon Cooper  <scooper@apple.com>

        Silverlight deny ipc-posix-sem LC_Mutex playing Amazon Prime videos
        https://bugs.webkit.org/show_bug.cgi?id=118102
        <rdar://problem/14194077>

        Reviewed by Alexey Proskuryakov.

        Allow same-sandbox scoped semaphores on Mavericks. Permit the
        named semaphore for older releases.

        * Resources/PlugInSandboxProfiles/com.microsoft.SilverlightPlugin.sb:

2013-06-26  Simon Cooper  <scooper@apple.com>

        Update ColorSync shared memory names in plug-in sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=118099

        Reviewed by Alexey Proskuryakov.

        Update the common profile to use the names used in Mavericks

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-26  Anders Carlsson  <andersca@apple.com>

        Deprecate StringImpl::charactersWithNullTermination
        https://bugs.webkit.org/show_bug.cgi?id=118108

        Reviewed by Beth Dakin.

        Rename calls to charactersWithNullTermination to deprecatedCharactersWithNullTermination.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::createServerAndClientIdentifiers):

2013-06-26  Simon Cooper  <scooper@apple.com>

        QuickTime plug-in cannot update com.apple.quicktime.plugin.preferences.plist file
        https://bugs.webkit.org/show_bug.cgi?id=118098
        <rdar://problem/13888138>

        Reviewed by Alexey Proskuryakov.

        Allow the preference file to be written

        * Resources/PlugInSandboxProfiles/com.apple.QuickTime Plugin.plugin.sb:

2013-06-24  Simon Cooper  <scooper@apple.com>

        Silverlight triggers sandbox violations: deny network-bind 0.0.0.0:0
        https://bugs.webkit.org/show_bug.cgi?id=117966
        <rdar://problem/13927918>

        Reviewed by Sam Weinig.

        Allow assigning (via bind) an ephemeral port before connecting

        * Resources/PlugInSandboxProfiles/com.apple.QuickTime Plugin.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.microsoft.SilverlightPlugin.sb:
        * Resources/PlugInSandboxProfiles/com.oracle.java.JavaAppletPlugin.sb:

2013-06-24  Simon Cooper  <scooper@apple.com>

        PluginProcess deny file-read-data /Network/Library under addVolumeTracker
        https://bugs.webkit.org/show_bug.cgi?id=117965
        <rdar://problem/14121247>

        Reviewed by Alexey Proskuryakov.

        Silently deny reading /Network/Applications and 
        /Network/Library.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-24  Kangil Han  <kangil.han@samsung.com>

        Adopt is/toHTMLFormElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=117937

        Reviewed by Andreas Kling.

        This refers to http://src.chromium.org/viewvc/blink?view=revision&revision=152859

        To enhance readibility, this patch adopts is/toHTMLFormElement.
        This also helps out to reduce duplicated use of static_cast.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::containsAnyFormElements):

2013-06-24  Simon Cooper  <scooper@apple.com>

        deny file-read-data /Library/CoreMediaIO/Plug-Ins/DAL
        https://bugs.webkit.org/show_bug.cgi?id=117964
        <rdar://problem/14036864>

        Reviewed by Alexey Proskuryakov.

        Permit reading of the /Library/CoreMediaIO/Plug-Ins/DAL
        subdirectory.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-24  Simon Cooper  <scooper@apple.com>

        Repeating sandbox violations when playing Amazon Prime videos with Flash
        https://bugs.webkit.org/show_bug.cgi?id=117953
        <rdar://problem/14193693>

        Reviewed by Alexey Proskuryakov.

        Add some missing "standard" files for network service lookups

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-24  Simon Cooper  <scooper@apple.com>

        Plug-in sandbox violations attempting to access com.apple.CoreGraphics.plist
        https://bugs.webkit.org/show_bug.cgi?id=117963
        <rdar://problem/14084234>

        Reviewed by Alexey Proskuryakov.

        Permit the reading of the com.apple.CoreGraphics preference file

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-24  Simon Cooper  <scooper@apple.com>

        com.oracle.javadeployment.plist is not correctly specified in the JavaApplet plugin profile
        https://bugs.webkit.org/show_bug.cgi?id=117961
        <rdar://problem/14223823>

        Reviewed by Alexey Proskuryakov.

        Remove the trailing extraneous .plist from the preference file rule

        * Resources/PlugInSandboxProfiles/com.oracle.java.JavaAppletPlugin.sb:

2013-06-24  Simon Cooper  <scooper@apple.com>

        PluginProcess sandbox violations on com.apple.networkConnect.plist when resetting Safari
        https://bugs.webkit.org/show_bug.cgi?id=117958
        <rdar://problem/13938149>

        Reviewed by Alexey Proskuryakov.

        Allow reading the com.apple.networkConnect plist.

        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:

2013-06-24  Simon Cooper  <scooper@apple.com>

        Java sandbox violation ipc-posix-shm-read-data /tmp/com.apple.csseed.67
        https://bugs.webkit.org/show_bug.cgi?id=117954
        <rdar://problem/14166577>

        Reviewed by Alexey Proskuryakov.

        Permit read access to this shared memory segment

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-24  Simon Cooper  <scooper@apple.com>

        Plugin Sandbox violation in /Library/Audio/Sounds/Banks
        https://bugs.webkit.org/show_bug.cgi?id=117957
        <rdar://problem/14163582>

        Reviewed by Alexey Proskuryakov.

        Permit read access to subdirectories under /Library/Audio/Sounds

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-24  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Make sure m_iconDatabaseImpl is not null before closing it
        https://bugs.webkit.org/show_bug.cgi?id=117943

        Reviewed by Simon Fraser.

        Since r150474 WebIconDatabase is closed unconditionally in
        TestController destructor, in that case WebKitTestRunner crashes
        when no icon database path is set. This misbehavior was observed in
        ports such as efl and nix.
        In this patch, WebIconDatabase::close() calls m_iconDatabaseImpl->close()
        only if m_iconDatabaseImpl is not null, as it's already being done in other
        WebIconDatabase's methods, such as isOpen().

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::close):

2013-06-24  Ruth Fong  <ruth_fong@apple.com>

        Expose the mediaHasAudio() function in WK2
        https://bugs.webkit.org/show_bug.cgi?id=117946
        <rdar://problem/14250527>

        Reviewed by Beth Dakin.

        Exposes the WebCore::HTMLMediaElement::mediaHasAudio() function
        in WK2.

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultMediaHasAudio): Added.
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::mediaHasAudio): Added.
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:

2013-06-24  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r147591): can't type in Adobe Connect
        https://bugs.webkit.org/show_bug.cgi?id=117947
        <rdar://problem/14223539>

        Reviewed by Andreas Kling.

        With the change in r147591, it is now possible for a plug-in element to be focused before the plug-in
        starts. Handle this by focusing the plug-in right after it's started if necessary.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin):

2013-06-24  Simon Fraser  <simon.fraser@apple.com>

        Move displayID stuff from Widget to Chrome
        https://bugs.webkit.org/show_bug.cgi?id=117944

        Reviewed by Anders Carlsson.

        In r151877 I polluted Widget with displayID-related stuff. This would
        be better on HostWindow, so move it there. This is a net code reduction,
        and eliminates PlatformScreenMac.h, and the NSScreen category.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowScreenDidChange): Go via chrome().

2013-06-24  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [EFL][WK2] Implement unit test callback: onWordGuesses.
        https://bugs.webkit.org/show_bug.cgi?id=117794

        Reviewed by Christophe Dumez.

        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (onWordGuesses):
        Add client suggestions for the word.

        (checkClientSuggestionsForWord):
        Verify the suggestions that were given by the client.

2013-06-17  Darin Adler  <darin@apple.com>

        Sort all the Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=117696

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Ran the sort-Xcode-project-file script.

2013-06-22  Dean Jackson  <dino@apple.com>

        Slightly reduce width threshold on detection of primary snapshotted Plug-In
        https://bugs.webkit.org/show_bug.cgi?id=117914
        <rdar://problem/14136687>

        Reviewed by Simon Fraser.

        We've noticed some content that should be detected as the primary snapshotted plug-in,
        but is just a bit smaller than our 450x300 minimum threshold. Reduce the width to 400.

        * WebProcess/WebPage/WebPage.cpp: Change primarySnapshottedPlugInMinimumWidth from 450 to 400.

2013-06-22  Simon Fraser  <simon.fraser@apple.com>

        screen.availWidth always returns width of primary display
        https://bugs.webkit.org/show_bug.cgi?id=117863

        Reviewed by Geoffrey Garen.
    
        In WebKit2, Widgets have no platformWidget, so trying to get to the
        NSScreen via the platform widget's window never succeeded, and we always
        fell back on getting info for the main display.

        However, we were already pushing the WKView's displayID down to the
        WebProcess for the requestAnimationFrame infrastructure, so use that.
        
        The WebProcess would not receive a displayID for a WKView until the window
        was activated; fix by calling -doWindowDidChangeScreen when the view
        moves to a window, rather than doing it from -_windowDidBecomeKey:.
        
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _windowDidBecomeKey:]):

2013-06-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not try to load videos in unit tests
        https://bugs.webkit.org/show_bug.cgi?id=117866

        Reviewed by Philippe Normand.

        It makes the tests slower, and generates and error because we use
        a fake src.

        * UIProcess/API/gtk/tests/TestContextMenu.cpp:
        (testContextMenuDefaultMenu): Use preload='none' in video tag.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewMouseTarget): Ditto.

2013-06-21  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        REGRESSION (r150663): Using webkitAudioContext in Inspector makes it undefined everywhere
        https://bugs.webkit.org/show_bug.cgi?id=117825

        Reviewed by Kentaro Hara.

        Use Settings to enable Web Audio instead of RuntimeEnabledFeatures.

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

2013-06-21  Sergio Correia  <sergio.correia@openbossa.org>

        [WK2][EFL]: Invalidate the ProcessLauncher when the process is terminated before it has finished launching
        https://bugs.webkit.org/show_bug.cgi?id=117865

        Reviewed by Christophe Dumez.

        Original patch from Carlos Garcia Campos for the Gtk port.

        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::terminateProcess): If process is still
        launching, just invalidate the launcher. Reset the process
        identifier after killing the process.

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

        [GTK] Migrate WebKitWebResource to GTask
        https://bugs.webkit.org/show_bug.cgi?id=117152

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (resourceDataCallback):
        (webkit_web_resource_get_data):
        (webkit_web_resource_get_data_finish):

2013-06-20  Sergio Correia  <sergio.correia@openbossa.org>

        [WK2] Looping for EINTR on close() is incorrect for Linux, at least
        https://bugs.webkit.org/show_bug.cgi?id=117266

        Reviewed by Darin Adler.

        Call closeWithRetry() to work around a difference in how the retry needs to
        be done on Linux.

        * Platform/CoreIPC/unix/AttachmentUnix.cpp:
        (CoreIPC::Attachment::dispose):
        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::platformInvalidate):
        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::~SharedMemory):
        (WebKit::SharedMemory::createHandle):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection):
        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        (WebKit::SharedWorkerProcess::createWebProcessConnection):
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess): All these places had
        ``close-followed-by-EINTR-handling'' replaced with the new closeWithRetry()
        function added in this commit.

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

        WebProcess hangs loading eff.org (Waiting forever on a sync XHR, NetworkProcess unable to service it).
        <rdar://problem/14112329> and https://bugs.webkit.org/show_bug.cgi?id=117842

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/HostRecord.cpp:
        (WebKit::removeLoaderFromQueue): Utility to clear a Loader out of a LoaderQueue.
        (WebKit::HostRecord::removeLoader): Use removeLoaderFromQueue, and also try to clear the loader from m_syncLoadersPending.
        (WebKit::HostRecord::servePendingRequestsForQueue): Small refactoring/cleanup.
        (WebKit::HostRecord::limitsRequests): Change so that if the number of loaders in flight is exactly equal to the limit, then
          allow serving a synchronous loader to go exactly one beyond the limit.
        * NetworkProcess/HostRecord.h:

        Make the static maxRequestsInFlightPerHost a member of the NetworkResourceLoadScheduler, instead:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::NetworkResourceLoadScheduler):
        (WebKit::NetworkResourceLoadScheduler::hostForURL):
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        * NetworkProcess/mac/NetworkResourceLoadSchedulerMac.mm:
        (WebKit::NetworkResourceLoadScheduler::platformInitializeMaximumHTTPConnectionCountPerHost): Tell CFNetwork to allow
          7 connections per host instead of 6, but tell the scheduler that 6 is still the normal limit.

2013-06-20  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][WK2] Update text checker documentation.
        https://bugs.webkit.org/show_bug.cgi?id=117828

        Reviewed by Christophe Dumez.

        * UIProcess/API/efl/ewk_text_checker.h:
        The client is not responsible for destroying the memory.

2013-06-19  Sam Weinig  <sam@webkit.org>

        Expose plug-ins CFBundleShortVersionString in the WKPluginInformation dictionary
        https://bugs.webkit.org/show_bug.cgi?id=117816

        Reviewed by Geoffrey Garen.

        - Adds a new key for the WKPluginInformation dictionary: WKPluginInformationBundleShortVersionKey().

        * Shared/API/c/WKPluginInformation.cpp:
        (WKPluginInformationBundleShortVersionKey):
        * Shared/API/c/WKPluginInformation.h:
        * Shared/Plugins/Netscape/PluginInformation.cpp:
        (WebKit::pluginInformationBundleShortVersionKey):
        * Shared/Plugins/Netscape/PluginInformation.h:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        * Shared/Plugins/Netscape/mac/PluginInformationMac.mm:
        (WebKit::getPlatformPluginModuleInformation):
        * Shared/Plugins/PluginModuleInfo.h:

2013-06-19  Ruth Fong  <ruth_fong@apple.com>

        <rdar://problem/14197983> Rename functions from Bug 117667 and add safeguards for !ENABLE(VIDEO) platforms (117765)
        https://bugs.webkit.org/show_bug.cgi?id=117765

        Patch by Ruth Fong <ruth_fong@apple.com>.
        Reviewed by Brady Eidson.

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultGetMediaType): Updated to use mediaType().

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::mediaType): Updated.
        Renamed getMediaType() to mediaType() and now handles !ENABLE(VIDEO) platforms.

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:

2013-06-19  Benjamin Poulain  <bpoulain@apple.com>

        Use the PlatformEvent timestamp when creating a DOM Event
        https://bugs.webkit.org/show_bug.cgi?id=117179

        Reviewed by Darin Adler.

        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        (WebKit::WebEventFactory::createWebGestureEvent):

2013-06-19  Anders Carlsson  <andersca@apple.com>

        REGRESSION: Cannot open Silverlight preferences via context menu
        https://bugs.webkit.org/show_bug.cgi?id=117806
        <rdar://problem/14166644>

        Reviewed by Beth Dakin.

        Hook the LSOpenCFURLRef function and make the UI process open the URL if it's the URL for the
        Silverlight Preferences application. This is what we do for the Flash updater.

        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::openCFURLRef):
        (WebKit::initializeShim):
        (WebKit::PluginProcess::openURL):
        * PluginProcess/mac/PluginProcessShim.h:
        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shimLSOpenCFURLRef):
        * UIProcess/Plugins/PluginProcessProxy.h:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::isSilverlightPreferencesURL):
        (WebKit::shouldOpenURL):
        (WebKit::PluginProcessProxy::openURL):

2013-06-19  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [EFL][WK2] Implement unit test callback: onSettingChange.
        https://bugs.webkit.org/show_bug.cgi?id=117728

        Reviewed by Christophe Dumez.

        It is finally possible to implement missing unit tests as WebKit2-EFL
        has delivered sub menu (r150254).
        Add two unit tests for checking onSettingChange callback behaviour,
        when toggling "Check Spelling While Typing" in context menu.

        Changed types inside callbacksExecutionStats struct from bit field to bool,
        because casting from bit field to &bool is invalid (in using waitUntilTrue method).

        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (resetCallbacksExecutionStats):
        (onSettingChange):
        (findContextMenuItem):
        Get determined option from context menu.

        (checkCorrectnessOfSpellingItems):
        Changed the name of onContextMenuShow method to be consistent with new methods.

        (toogleCheckSpellingWhileTyping):
        Select "Check Spelling While Typing" in context menu to test whether
        onSettingChange is called.

2013-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][SOUP] Migrate SoupRequestManager to GTask
        https://bugs.webkit.org/show_bug.cgi?id=117157

        Reviewed by Gustavo Noronha Silva.

        GSimpleAsyncResult has been deprecated in favour of GTask.

        * WebProcess/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericSendAsync):
        (webkitSoupRequestGenericSendFinish):
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestAsyncData::WebSoupRequestAsyncData):
        (WebKit::WebSoupRequestAsyncData::releaseTask):
        (WebKit::WebSoupRequestManager::didHandleURIRequest):
        (WebKit::WebSoupRequestManager::didFailURIRequest):
        (WebKit::WebSoupRequestManager::send):
        (WebKit::WebSoupRequestManager::finish):
        * WebProcess/soup/WebSoupRequestManager.h:

2013-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Migrate WebKitFaviconDatabase to GTask
        https://bugs.webkit.org/show_bug.cgi?id=117156

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (processPendingIconsForPageURL):
        (webkit_favicon_database_get_favicon):
        (webkit_favicon_database_get_favicon_finish):

2013-06-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Migrate WebKitWebView to GTask
        https://bugs.webkit.org/show_bug.cgi?id=117154

        Reviewed by Gustavo Noronha Silva.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (didValidateCommand):
        (webkit_web_view_can_execute_editing_command):
        (webkit_web_view_can_execute_editing_command_finish):
        (webkitWebViewRunJavaScriptCallback):
        (webkit_web_view_run_javascript):
        (webkit_web_view_run_javascript_finish):
        (resourcesStreamReadCallback):
        (webkit_web_view_run_javascript_from_gresource):
        (webkit_web_view_run_javascript_from_gresource_finish):
        (fileReplaceContentsCallback):
        (getContentsAsMHTMLDataCallback):
        (webkit_web_view_save):
        (webkit_web_view_save_finish):
        (webkit_web_view_save_to_file):
        (webkit_web_view_save_to_file_finish):
        (webKitWebViewDidReceiveSnapshot):
        (webkit_web_view_get_snapshot):
        (webkit_web_view_get_snapshot_finish):

2013-06-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Migrate WebKitCookieManager to GTask
        https://bugs.webkit.org/show_bug.cgi?id=117150

        Reviewed by Gustavo Noronha Silva.

        Don't use helper structs for async data since the cancellable is
        now accessible from the GTask.

        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        (webkitCookieManagerGetAcceptPolicyCallback):
        (webkit_cookie_manager_get_accept_policy):
        (webkit_cookie_manager_get_accept_policy_finish):
        (webkitCookieManagerGetDomainsWithCookiesCallback):
        (webkit_cookie_manager_get_domains_with_cookies):
        (webkit_cookie_manager_get_domains_with_cookies_finish):

2013-06-18  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix a typo that may be causing some test failures.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::scheduledRunLoopPairs):

2013-06-18  Anders Carlsson  <andersca@apple.com>

        Make it possible to set a minimum height for auto-layout
        https://bugs.webkit.org/show_bug.cgi?id=117758
        <rdar://problem/12849080>

        Reviewed by Tim Horton.

        Change a bunch of minimumLayoutWidth declarations to minimumLayoutSize and add a new minimumLayoutSize property.
        If minimumLayoutSize.height is greater than zero, use it to set the minimum layout size on the frame view.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setIntrinsicContentSize:]):
        (-[WKView minimumLayoutWidth]):
        (-[WKView setMinimumLayoutWidth:]):
        (-[WKView minimumWidthForAutoLayout]):
        (-[WKView setMinimumWidthForAutoLayout:]):
        (-[WKView minimumSizeForAutoLayout]):
        (-[WKView setMinimumSizeForAutoLayout:]):
        * UIProcess/API/mac/WKViewPrivate.h:
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::minimumLayoutSizeDidChange):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setMinimumLayoutSize):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::minimumLayoutSize):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::minimumLayoutSizeDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange):
        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setMinimumLayoutSize):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::minimumLayoutSize):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):

2013-06-18  Simon Cooper  <scooper@apple.com>

        sandbox violation when Flash runs for the first time
        https://bugs.webkit.org/show_bug.cgi?id=117753
        <rdar://problem/14165466>

        Reviewed by Alexey Proskuryakov.

        Allow flash to try and change the ownership of directories it has just created.

        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:

2013-06-18  Ruth Fong  <ruth_fong@apple.com>

        Expose a getMediaType method in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=117667

        Reviewed by Brady Eidson.

        * GNUmakefile.list.am:
        * Target.pri:
        Updated to include the added header file InjectedBundleHitTestResultMediaType.h
        
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toBundleHitTestResultMediaType):
        (WebKit::toAPI):
        Added methods to convert between BundleHitTestResultMediaType
        and WKBundleHitTestResultMediaType.

        * WebKit2.xcodeproj/project.pbxproj: Updated to include
        InjectedBundleHitTestResultMediaType.h in the WebKit2 project.

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultGetMediaType): Exposes the method getMediaType and
        hooks into InjectedBundleHitTestResult::getMediaType.

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::getMediaType): Added to return 
        what type, if any, a media element is.

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:

        * WebProcess/InjectedBundle/InjectedBundleHitTestResultMediaType.h: Added
        to contain new BundleHitTestResultMediaType enums.

2013-06-18  Roger Fong  <roger_fong@apple.com>

        Re-implement WebFrameNetworkingContext.
        <rdar://problem/13174821>.

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h: Added.
        (WebKit::WebFrameNetworkingContext::create):
        (WebKit::WebFrameNetworkingContext::WebFrameNetworkingContext):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm: Added.
        (WebKit::WebFrameNetworkingContext::setPrivateBrowsingStorageSessionIdentifierBase):
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::destroyPrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
        (WebKit::WebFrameNetworkingContext::needsSiteSpecificQuirks):
        (WebKit::WebFrameNetworkingContext::localFileContentSniffingEnabled):
        (WebKit::WebFrameNetworkingContext::scheduledRunLoopPairs):
        (WebKit::WebFrameNetworkingContext::sourceApplicationAuditData):
        (WebKit::WebFrameNetworkingContext::blockedError):
        (WebKit::WebFrameNetworkingContext::storageSession):

2013-06-18  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13174821> Remove files with an incorrect license.

        Rubber-stamped by Maciej Stachowiak.

        This will break the build, stay tuned for a fix coming soon.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h: Removed.
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm: Removed.

2013-06-17  Santosh Mahto  <santosh.ma@samsung.com>

        Extra whitespace in blank line in PlatformPopupMenuData.cpp
        https://bugs.webkit.org/show_bug.cgi?id=117627

        Reviewed by Brent Fulgham.

        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::decode):
        Removing extra space

2013-06-17  Beth Dakin  <bdakin@apple.com>

        PageBanners appear over HTML5 video when media element is in full screen mode
        https://bugs.webkit.org/show_bug.cgi?id=117721
        -and corresponding-
        <rdar://problem/13686998>

        Reviewed by Sam Weinig.

        When an element enters fullscreen, hide the banners. Show them again when the 
        element exits fullscreen.
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::willEnterFullScreen):
        (WebKit::WebFullScreenManager::willExitFullScreen):

        Handle hiding and showing by removing or re-creating a parent layer for m_layer.
        * WebProcess/WebPage/PageBanner.cpp:
        (WebKit::PageBanner::hide):
        (WebKit::PageBanner::showIfHidden):
        * WebProcess/WebPage/PageBanner.h:
        * WebProcess/WebPage/mac/PageBannerMac.mm:
        (WebKit::PageBanner::PageBanner):
        (WebKit::PageBanner::hide):
        (WebKit::PageBanner::showIfHidden):
        (WebKit::PageBanner::mouseEvent):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::hidePageBanners):
        (WebKit::WebPage::showPageBanners):
        * WebProcess/WebPage/WebPage.h:

2013-06-17  Ruth Fong  <ruth_fong@apple.com>

        REGRESSION: Important controls are missing from <video> element UI, when compared to QuickTime
        https://bugs.webkit.org/show_bug.cgi?id=20599

        Add a "Download Video"/"Download Audio" context menu item to download media
        elements.

        Reviewed by Beth Dakin.

        * Shared/API/c/WKContextMenuItemTypes.h: Updated to include
        an enum type for the "Download Video/Audio" context menu item.

        * Shared/API/c/WKSharedAPICast.h: Updated to associate
        the enums in WebKit and WebCore that handle the "Download Video/Audio"
        context menu item.

        * UIProcess/API/efl/ewk_context_menu.cpp:
        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        * UIProcess/API/efl/ewk_context_menu_item.h:
        Updated to include new EWK enum type for "Download Video/Audio" context menu item.

        * UIProcess/WebPageProxy.cpp: Updated to 
        handle the "Download Video/Audio" context menu item mouse click
        and download the media item in the UI process.

2013-06-17  Ralph Thomas  <ralpht@gmail.com>

        [CoordinatedGraphics][CSS Shaders] Use forwarding header for TextureMapperPlatformCompiledProgram.h
        https://bugs.webkit.org/show_bug.cgi?id=117712

        Reviewed by Noam Rosenthal.

        * Shared/CoordinatedGraphics/WebCustomFilterProgramProxy.h:

2013-06-17  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/13145014> Allow CoreIPC messages to transmit importance boosts

        Transmitting the importance boost from the UI process to the web process is particularly
        important when disabling process suppression on a web process, as it will minimize the
        delays that can occur before the message instructing process suppression to be disabled
        is processed by the web process.

        We keep the importance boost alive for the duration of the CoreIPC message handler. We
        achieve this by having an ImportanceAssertion object that owns the assertion, and whose
        lifetime is tied to that of the MessageDecoder.

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::setImportanceAssertion): Associate an importance assertion
        with this message.
        * Platform/CoreIPC/MessageDecoder.h:
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open): Mark our receive port as allowing importance boosts to be received.
        (CoreIPC::Connection::receiveSourceEventHandler):
        * Platform/CoreIPC/mac/ImportanceAssertion.h:
        (CoreIPC::ImportanceAssertion::create):
        (CoreIPC::ImportanceAssertion::~ImportanceAssertion): Release the assertion.
        (CoreIPC::ImportanceAssertion::ImportanceAssertion): Take an assertion if a boost was present in
        the Mach message.

2013-06-17  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/14051357> Web processes sometimes remain in a suppressed
        state after their window is unoccluded.

        The code in WKView that responds to occlusion notifications was incorrectly
        treating the window's occlusion state as being an enum rather than the set of
        flags that it is.

        Reviewed by Oliver Hunt.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _windowDidChangeOcclusionState:]): Test only the visibility state.
        (-[WKView setWindowOcclusionDetectionEnabled:]): Ditto.

2013-06-17  Michael Brüning  <michael.bruning@digia.com>

        [Qt] Remove Qt specific QTKIT flagged code.
        https://bugs.webkit.org/show_bug.cgi?id=117635

        Reviewed by Simon Hausmann.

        Due to disabling QTKIT for Qt in r151546, the
        code the flags that are not taken into account
        anymore and the code that has been rendered
        unreachable by this are removed.

        * Target.pri:
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/WebCoreSupport/qt/WebSystemInterface.h: Removed.
        * WebProcess/WebCoreSupport/qt/WebSystemInterface.mm: Removed.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):

2013-06-17  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Unreviewed, rolling out r151632.
        http://trac.webkit.org/changeset/151632
        https://bugs.webkit.org/show_bug.cgi?id=117585

        Debug build error ASSERT(WTF_USE_GRAMMAR_CHECKING) for non MAC
        platforms

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        (getEwkActionFromWKTag):
        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (onContextMenuShow):
        (TEST_F):
        * UIProcess/API/gtk/WebKitContextMenuActions.cpp:
        (webkitContextMenuActionGetActionTag):
        (webkitContextMenuActionGetForContextMenuItem):
        (webkitContextMenuActionGetLabel):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):

2013-06-14  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Context menu grammar checking items are available when GRAMMAR_CHECKING macro is off
        https://bugs.webkit.org/show_bug.cgi?id=117585

        Reviewed by Anders Carlsson.

        Add GRAMMAR_CHECKING guard to the context menu grammar items.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toAPI):
        (WebKit::toImpl):
        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        (getEwkActionFromWKTag):
        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (checkSpellingItemsAvailability):
        Change callback name, to be consistent with a newly added.

        (checkSpellingAndGrammarSubmenuAvailability):
        (checkGrammarWithSpellingItemAvailability):
        Add two unit tests for EFL to check whether context menu grammar items are
        available only when GRAMMAR_CHECKING macro is enabled.

        * UIProcess/API/gtk/WebKitContextMenuActions.cpp:
        (webkitContextMenuActionGetActionTag):
        (webkitContextMenuActionGetForContextMenuItem):
        (webkitContextMenuActionGetLabel):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::contextMenuItemSelected):

2013-06-14  Dean Jackson  <dino@apple.com>

        Crash in supportsSnapshotting
        https://bugs.webkit.org/show_bug.cgi?id=117670
        <rdar://problem/14059711>

        Reviewed by Darin Adler.

        Speculative fix for deferencing a null RefPtr in supportsSnapshotting.
        It seems like it was possible to get in a state where the plugin machinery
        would fire up and attempt to get a screenshot before there was an active
        connection to the plugin process (usually under periods of high load, such
        as opening a lot of tabs at once). In this case we're now returning false
        from supportsSnapshotting, which will trigger the plugin to restart, but
        that's better than requesting a snapshot on something that doesn't yet exist.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::supportsSnapshotting): Guard for an empty connection object.

2013-06-14  Enrica Casucci  <enrica@apple.com>

        WKPageFindStringMatches ignores the kWKFindOptionsBackwards option.
        https://bugs.webkit.org/show_bug.cgi?id=117647
        <rdar://problem/13881024>

        Reviewed by Darin Adler.
        
        The API returns the matched ranges in the DOM order regardless of the
        find direction, but the index of the first match after the user selection
        should take the find direction into account.

        Extended existing test in TestWebKitAPI.

        * Shared/API/c/WKFindOptions.h: Added enum for the case where there are
        no matches after the user selection in the direction of the find.

2013-06-14  Andres Gomez  <agomez@igalia.com>

        [GTK] Compilation problems - hb.h not found
        https://bugs.webkit.org/show_bug.cgi?id=117636

        Unreviewed GTK+ build fix.

        * GNUmakefile.am: Added freetype cflags for WebKit2 GTK+ Platform
        library.

2013-06-13  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Wrong context menu and popup menu positions when scroll is applied
        https://bugs.webkit.org/show_bug.cgi?id=116610

        Reviewed by Noam Rosenthal.

        WebKit2 EFL uses fixed layout - because of this ScrollView::contentsToWindow, does
        not take scroll into account, as it is meant to be handled by UI application.
        When popup and context menu are created, after calling contentsToWindow their position
        are not adjusted to page scroll.
        Added two functions to EwkView and WKView, converting contents position to user viewport
        coordinates, to adjust popup and context menu positions.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewContentsToUserViewport):
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::showContextMenu):
        (EwkView::requestPopupMenu):
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::contentsToUserViewport):
        * UIProcess/CoordinatedGraphics/WebView.h:

2013-06-12  Anders Carlsson  <andersca@apple.com>

        Remove the notion of inactive plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=117570
        <rdar://problem/13484213>

        Reviewed by Tim Horton.

        Remove code that deals with inactive plug-ins. We still keep around the kWKPluginLoadPolicyInactive API enum for now.

        * Shared/Plugins/PluginModuleInfo.h:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toWKPluginLoadPolicy):
        (WebKit::toPluginModuleLoadPolicy):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        (WebKit::PluginInfoStore::defaultLoadPolicyForPlugin):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::unavailablePluginButtonClicked):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldUnavailablePluginMessageBeButton):
        (WebKit::WebChromeClient::unavailablePluginButtonClicked):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):

2013-06-12  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [GTK] Explicit include glib.h to avoid compilation errors if libsoup isn't used.
        https://bugs.webkit.org/show_bug.cgi?id=117564

        Reviewed by Martin Robinson.

        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:

2013-06-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move more build targets for source code that's free of layer violations into libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=115936

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add GStreamer dependency's CFLAGS to the list of libPlatformGtk2 CPPFLAGS.

2013-06-12  Ruth Fong  <ruth_fong@apple.com>

        "Open Video in New Window" doesn't make sense in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=117556

        Reviewed by Beth Dakin.

        Adds method mediaIsInFullscreen() that checks if a media element is in
        fullscreen mode, which is needed to decide when to display the
        "Open Video in New Window" context menu item.

        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp:
        (WKBundleHitTestResultMediaIsInFullscreen): Added.
        Hooks into new InjectedBundleHitTestResult::mediaIsInFullscreen() method.
        * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h:
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::mediaIsInFullscreen): Added.
        Checks if media element is in fullscreen.
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:

2013-06-12  Ruth Fong  <ruth_fong@apple.com>

        Allow for toggling fullscreen on <video> elements
        https://bugs.webkit.org/show_bug.cgi?id=117220

        Reviewed by Dean Jackson.

        * Shared/API/c/WKContextMenuItemTypes.h:
        * Shared/API/c/WKSharedAPICast.h:
        Added variables to support the toggle-ability of the fullscreen
        video context menu item.

2013-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Invalidate the ProcessLauncher when the process is terminated before it has finished launching
        https://bugs.webkit.org/show_bug.cgi?id=117412

        Reviewed by Anders Carlsson.

        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::terminateProcess): If process is still
        launching just invalidate the launcher. Reset the process
        identifier after killing the process.

2013-06-12  Jae Hyun Park  <jae.park@company100.net>

        [Coordinated Graphics] Remove unused headers in CoordinatedLayerTreeHostProxy
        https://bugs.webkit.org/show_bug.cgi?id=117539

        Reviewed by Noam Rosenthal.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:

2013-06-12  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Remove the WebCoreLayer(Gtk2).a archives before regenerating them
        https://bugs.webkit.org/show_bug.cgi?id=116723

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: When generating the WebCoreLayerGtk2.a archive from all the dependency archives, remove the
        current archive (if any). Updating an existent archive in an incremental build is not bulletproof and can lead
        to corrupt archives and subsequent build failures. On the other hand, the archive generation is not expensive
        and produces a working archive without problems even on incremental builds.

2013-06-12  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix.

        * GNUmakefile.list.am: Adding missing build targets to the plugin process after r151480.

2013-06-11  Gavin Barraclough  <barraclough@apple.com>

        Add NSSupportsAppNap keys to WebProcess, PluginProcess
        https://bugs.webkit.org/show_bug.cgi?id=117528

        Reviewed by Mark Rowe.

        * 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.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:
            - add NSSupportsAppNap key.

2013-06-11  Oliver Hunt  <oliver@apple.com>

        Make sure we aren't throttling plugin timers during initialisation and destruction
        https://bugs.webkit.org/show_bug.cgi?id=117522

        Reviewed by Darin Adler.

        Add a new ActivityAssertion RAII class to handle allowing/disallowing
        timer throttling.  Then make use of it during plugin initialisation
        and destruction, as well as any synchronous messages (on the basis
        that if another process is waiting for the plugin we shouldn't be
        throttling timers).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        (WebKit::WebProcessConnection::destroyPlugin):
        (WebKit::WebProcessConnection::createPlugin):
        * Shared/ActivityAssertion.cpp: Added.
        (WebKit::ActivityAssertion::ActivityAssertion):
        (WebKit::ActivityAssertion::~ActivityAssertion):
        * Shared/ActivityAssertion.h: Added.
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:

2013-06-06  Timothy Hatcher  <timothy@apple.com>

        Update the framework bundle identifier for the Web Inspector.

        Reviewed by Mark Rowe.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::inspectorReallyUsesWebKitUserInterface):
        (WebKit::WebInspectorProxy::inspectorPageURL):
        (WebKit::WebInspectorProxy::inspectorBaseURL):
        * WebProcess/WebPage/mac/WebInspectorMac.mm:
        (WebKit::inspectorReallyUsesWebKitUserInterface):
        (WebKit::WebInspector::localizedStringsURL):

2013-06-11  Jer Noble  <jer.noble@apple.com>

        Do not filter cookies requested through the CookieStorageShim.
        https://bugs.webkit.org/show_bug.cgi?id=117511
        <rdar://problem/13603433>

        Reviewed by Beth Dakin.

        Since the shim function is called when the underlying media engine is
        creating an HTTPRequest, use CookieRequestHeaderFieldValue (which does
        not filter out HTTP-only cookies) rather than CookiesForDOM (which does).

        * Shared/mac/CookieStorageShim.cpp:
        (WebKit::webKitCookieStorageCopyRequestHeaderFieldsForURL):

2013-06-11  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove leftover wxWebkit code
        https://bugs.webkit.org/show_bug.cgi?id=117471

        Reviewed by Andreas Kling.

        * Scripts/generate-forwarding-headers.pl:

2013-06-11  Changhyup Jwa  <ch.jwa@samsung.com>

        [EFL][WK2] Add fallback for EWK2UnitTestBase if opengl is not available.
        https://bugs.webkit.org/show_bug.cgi?id=117504

        Reviewed by Christophe Dumez.

        There're many fails on efl webkit2 unit test if opengl is not available.
        So, add fallback to non-opengl evas engine.

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

2013-06-11  Csaba Osztrogonác  <ossy@webkit.org>

        Make WTR use its own temporary directory for application cache
        https://bugs.webkit.org/show_bug.cgi?id=117143

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetApplicationCacheDirectory):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setApplicationCacheDirectory):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):

2013-06-11  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Fix test_ewk2_context_menu
        https://bugs.webkit.org/show_bug.cgi?id=116601

        Reviewed by Gyuyoung Kim.

        test_ewk2_context_menu is always passing, it does not test any context menu feature
        as it ends before context menu is called.
        One single test was divided into two tests: testing WebKit2 created context menu and
        testing menus and items created by application.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilTrue): added function introducing internal loop until boolean value is changed to true
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp:
        (customItemSelected):
        (showContextMenu):
        (showContextMenuForRemoveAndAppend):
        (showContextMenuForSubmenu):
        (hideContextMenu):
        (TEST_F):

2013-06-11  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add ewk_view_navigate API
        https://bugs.webkit.org/show_bug.cgi?id=117467

        Reviewed by Christophe Dumez.

        The applications will use this API to navigate history more than one step.

        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (EwkBackForwardListItem::wkItem): Return WKBackForwardListItemRef for page to navigate.
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_navigate_to): Added new API.
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F): Added more test case for navigation.

2013-06-10  Jae Hyun Park  <jae.park@company100.net>

        [CoordinatedGraphics] Typos in custom shader support
        https://bugs.webkit.org/show_bug.cgi?id=117413

        Reviewed by Noam Rosenthal.

        Wrong keyframe is passed when assigning filterValue.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::prepareCustomFilterProxiesIfNeeded):

2013-06-10  Seokju Kwon  <seokju.kwon@gmail.com>

        [Qt][GTK] Build fix after r151403
        https://bugs.webkit.org/show_bug.cgi?id=117452

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::preferencesDidChange):
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        (QRawWebViewPrivate::preferencesDidChange):
        * UIProcess/qt/QtPageClient.h:
        (WebKit::QtPageClient::preferencesDidChange):

2013-06-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r151411.
        http://trac.webkit.org/changeset/151411
        https://bugs.webkit.org/show_bug.cgi?id=117453

        because it is duplicated with Bug 117441 (Requested by
        gyuyoung_ on #webkit).

        * UIProcess/efl/WebViewEfl.cpp:
        * UIProcess/efl/WebViewEfl.h:

2013-06-10  Jaehun Lim  <ljaehun.lim@samsung.com>

        Fix build error and warning
        https://bugs.webkit.org/show_bug.cgi?id=117441

        Reviewed by Anders Carlsson.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::preferencesDidChange): Added.
        (WebKit::WebView::createPopupMenuProxy): Remove 'page'.
        * UIProcess/CoordinatedGraphics/WebView.h:

2013-06-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL Build fix after r151403.

        Added preferencesDidChange to WebViewEfl.

        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebViewEfl::preferencesDidChange):
        * UIProcess/efl/WebViewEfl.h:

2013-06-10  Anders Carlsson  <andersca@apple.com>

        Crash in StorageAreaMap::applyChange when clearing local storage in another web process
        https://bugs.webkit.org/show_bug.cgi?id=117440
        <rdar://problem/13961548>

        Reviewed by Tim Horton.

        Add an early return so we won't try to look up a null key in the m_pendingValueChanges map.
        Also, fix an assertion - it's fine for m_storageMap to be null in applyChange.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::applyChange):

2013-06-10  Sergio Correia  <sergio.correia@openbossa.org>

        [WK2][CoordinatedGraphics] Add default case to switches to fix strict build
        https://bugs.webkit.org/show_bug.cgi?id=117416

        Reviewed by Noam Rosenthal.

        This patch fixes a strict build by asserting on the default case of two
        switch statements where gcc was previously complaining of unhandled cases.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2013-06-10  Anders Carlsson  <andersca@apple.com>

        -[WKView _updateWindowAndViewFrames] should avoid updating the view frame in window coordinates if we don't have plugins
        https://bugs.webkit.org/show_bug.cgi?id=117420
        <rdar://problem/14073034>

        Reviewed by Tim Horton.

        If plug-ins are disabled there's no need for the web process to know about the view frame in window coordinates so only
        send it when plug-ins are enabled. In addition, if accessibility is disabled we don't need to send a message at all.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::preferencesDidChange):
        Call through to -[WKView _preferencesDidChange].

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateWindowAndViewFrames]):
        Don't compute viewFrameInWindowCoordinates or accessibilityPosition unless they're required. If neither are required,
        don't even send a message to the web process.

        (-[WKView _preferencesDidChange]):
        Update _needsViewFrameInWindowCoordinates and call -[WKView _updateWindowAndViewFrames] if needed.

        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        Set _needsViewFrameInWindowCoordinates based on whether plug-ins are enabled or not.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::preferencesDidChange):
        Call the page client.

2013-06-10  Bear Travis  <betravis@adobe.com>

        [CSS Shapes][CSS Exclusions] Split CSS Exclusions and CSS Shapes code
        https://bugs.webkit.org/show_bug.cgi?id=117162

        Reviewed by Alexandru Chiculita.

        Adding the WebCore/rendering/shapes directory to the include list.

        * CMakeLists.txt:

2013-06-10  Iago Toral Quiroga  <itoral@igalia.com>

        Use Cairo implementation of the WidgetBackingStore instead of X11 when running on Wayland
        https://bugs.webkit.org/show_bug.cgi?id=116717

        Reviewed by Martin Robinson.

        Decide which implementation of WidgetBackingStore to use (X11 or Cairo)
        depending on whether we are running on X11 or not. Select Cairo
        implementation when not running in X11.

        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit):
        (WebKit::createBackingStoreForGTK):
        (WebKit::BackingStore::incorporateUpdate):

2013-06-09  Jae Hyun Park  <jae.park@company100.net>

        [CoordinatedGraphics] Typo in argument decoder for CoordinatedGraphicsState
        https://bugs.webkit.org/show_bug.cgi?id=117384

        Reviewed by Noam Rosenthal.

        For CSS Shaders, it must decode state.customFiltersToRemove instead of
        state.updateAtlasesToRemove.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::decode):

2013-06-08  Jae Hyun Park  <jae.park@company100.net>

        [Coordinated Graphics] Pass the ownership of GraphicsSurface explicitly
        https://bugs.webkit.org/show_bug.cgi?id=117379

        Reviewed by Noam Rosenthal.

        When creating WebCoordinatedSurface with GraphicsSurface, it is clearer
        to pass the ownership of the created GraphicsSurface explicitly.

        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::create):

2013-06-07  Anders Carlsson  <andersca@apple.com>

        Coalesce multiple calls to WebPageProxy::windowAndViewFramesChanged
        https://bugs.webkit.org/show_bug.cgi?id=117364
        <rdar://problem/14042099>

        Reviewed by Geoffrey Garen.

        -[WKView _updateWindowAndViewFrames] can be called many times per run loop iteration so coalesce calls
        to WebPageProxy::windowAndViewFrames using dispatch_async.

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

2013-06-07  Thomas Deniau  <deniau@apple.com>

        Reproducible crash with triple-finger-tap "define word" gesture on a Netflix video
        https://bugs.webkit.org/show_bug.cgi?id=117020

        Reviewed by Ryosuke Niwa.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        Don't invoke the Dictionary lookup when we failed to extract the range of the token
        surrounding the tapped position.

2013-06-07  Enrique Ocana Gonzalez  <eocanha@igalia.com>

        [GTK] Weird behaviour and no clues to the user when the shared memory file can't be opened
        https://bugs.webkit.org/show_bug.cgi?id=117063

        Reviewed by Anders Carlsson.

        Log error message when the shared memory file can't be opened in
        Unix platform using a release build

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::create):

2013-06-07  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL][WK2] Context menu spellchecking items are not available when "Check Spelling While Typing" is off
        https://bugs.webkit.org/show_bug.cgi?id=117190

        Reviewed by Christophe Dumez.

        Context menu items (suggestions, learn and ignore word) are not available
        due to missing dictionary. To get the suggestions for the misspelled word,
        the dictionary has to be loaded first.

        WebKit loads the default dictionary when check spelling while typing is being enabled.
        However, context menu spellchecking items should be present even if this setting is off.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        Load the user's default dictionary to ensure context menu spellchecking items.
        The dictionary is loaded asynchronously so it shouldn't delay application.

        * UIProcess/API/efl/ewk_text_checker.h:
        Update doc. Spelling suggestions, learn and ignore word should be available
        independently of checking spelling while typing setting.

        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        (onContextMenuShow):
        (TEST_F):
        Add two unit tests to check whether the default dictionary is loaded and
        whether the context menu spelling items are available.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        Not set the default dictionary while enabling the setting, it's already loaded.

2013-06-07  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Implement customContextMenuItemSelected
        https://bugs.webkit.org/show_bug.cgi?id=117298

        Reviewed by Christophe Dumez.

        When custom context menu item is selected using ewk API, the feedback is not
        sent back to application, as customContextMenuItemSelected was unimplemented in
        contextMenuClientEfl.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::customContextMenuItemSelected):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_view.h: added custom_item_selected callback.
        * UIProcess/efl/ContextMenuClientEfl.cpp:
        (customContextMenuItemSelected):
        (ContextMenuClientEfl::ContextMenuClientEfl):

2013-06-06  Oliver Hunt  <oliver@apple.com>

        Completely initialize ChildProcess state on launch
        https://bugs.webkit.org/show_bug.cgi?id=117328

        Reviewed by Sam Weinig.

        Use setProcessSuppressionEnabledInternal to avoid setProcessSuppressionEnabled
        "optimizing" our initialization away.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::platformInitialize):

2013-06-06  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Gtk] Connection is leaking when WebProcess is terminated
        https://bugs.webkit.org/show_bug.cgi?id=117293

        Reviewed by Martin Robinson.

        Connection is leaking because WorkQueue::SocketEventSource inherits from
        WorkQueue::EventSource but when it is destroyed, the actual destructor running
        is the one from base class; however, subclass contains a function binded from
        Connection (m_closeFunction) and we need to do this extra cleanup, otherwise
        WorkQueue will keep Connection alive. A better explanation of this fix is provided
        on http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors

        A quick way to see the leak is to change WK2 test "ReloadPageAfterCrash" to terminate
        WebProcess N times and add a printf on Connection destructor.

        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::EventSource::~EventSource): Adds a virtual destructor to enable
        the subclass to do its own cleanup.

2013-06-06  Jae Hyun Park  <jae.park@company100.net>

        Coordinated Graphics : Refactor CoordinatedSurface to manage the lifecycle of GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=108899

        Reviewed by Noam Rosenthal.

        This is a preparation patch for Threaded Coordinated Graphics.

        This patch changes CoordinatedSurface to be responsible for the
        lifecycle of GraphicsContext used in Coordinated Graphics System.
        CoordinatedImageBacking and UpdateAtlas do not ask for the ownership
        of GraphicsContext anymore. Instead, those classes use client pattern to
        ask the CoordiantedSurface to paint to the GraphicsContext.

        This refactoring is needed to implement CoordinatedSurface for Threaded
        Coordinated Graphics.

        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::paintToSurface):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::paintToSurface):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2013-06-05  Kangil Han  <kangil.han@samsung.com>

        [EFL][WK2] Fix test_ewk2_view unit test timed out issue
        https://bugs.webkit.org/show_bug.cgi?id=117251

        Reviewed by Christophe Dumez.

        'ewk_view_contents_size_changed' unit test case has been timed out since r150802 because
        same size is filtered by WebView class. So create one different test html string that has
        different size to continue unit tests.

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

2013-06-05  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions][CSS Shapes] Split CSS Exclusions & Shapes compile & runtime flags
        https://bugs.webkit.org/show_bug.cgi?id=117172

        Reviewed by Alexandru Chiculita.

        Adding the CSS_SHAPES compile flag.

        * Configurations/FeatureDefines.xcconfig:

2013-06-05  Anders Carlsson  <andersca@apple.com>

        Crash if an IPC connection is invalidated before it's completely set up
        https://bugs.webkit.org/show_bug.cgi?id=117274
        <rdar://problem/13319035>

        Reviewed by Andreas Kling.

        Resume our dispatch sources on the connection queue so we won't get invalidation callbacks before
        all sources have been set up.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::sendOutgoingMessage):
        (CoreIPC::Connection::initializeDeadNameSource):
        (CoreIPC::Connection::receiveSourceEventHandler):

2013-06-05  Tim Horton  <timothy_horton@apple.com>

        [wk2] WebProcess' page-in-window count can be wrong
        https://bugs.webkit.org/show_bug.cgi?id=117106
        <rdar://problem/14040991>

        Reviewed by Anders Carlsson.

        If we're using a single WebProcess and a window is closed, we were
        not decrementing the page-in-window count (because we apparently don't
        setIsInWindow(false) a WebPage in a closing window before tearing it down).

        Turn the page-in-window count into a HashSet of pageIDs instead.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setIsInWindow):
        Send the pageID instead (this change is just so that I don't need to
        fetch the WebPage in WebProcess::removeWebPage).

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        Remove m_inWindowPageCount.

        (WebKit::WebProcess::removeWebPage):
        Ensure that WebPages being torn-down are removed from the in-window WebPage set.

        (WebKit::WebProcess::pageDidEnterWindow):
        (WebKit::WebProcess::pageWillLeaveWindow):
        Use our new HashSet instead of a count.

        (WebKit::WebProcess::nonVisibleProcessCleanupTimerFired):
        Make sure that we don't have any visible pages before doing cleanup.

        * WebProcess/WebProcess.h:
        Remove m_inWindowPageCount.
        Add m_inWindowPageSet.
        Make pageDidEnterWindow/pageWillLeaveWindow take pageID instead of WebPage.

2013-06-05  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r148713): Crash under waitForDidUpdateInWindowState
        https://bugs.webkit.org/show_bug.cgi?id=117268
        <rdar://problem/13822353>

        Reviewed by Anders Carlsson.

        Check if the WebProcess is valid before waiting for a message from it.
        Reset the bool that tells us that we have an outstanding didUpdateInWindowState message if the WebProcess quits.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::waitForDidUpdateInWindowState):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):

2013-06-05  Gwang Yoon Hwang  <ryumiel@company100.net>

        [Coordinated Graphics] Prevent a recursive painting in CoordinatedGraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=117222

        Reviewed by Noam Rosenthal.

        CoordinatedGraphicsLayer::flushCompositingState() will cross frame
        boundaries if the GraphicsLayers are connected. In this case,
        updateContentBuffers will invoke a painting of a sub-frame that causes
        flushCompositingState recursively.

        To prevent this behavior this patch extracts updateContentBuffers from
        flushCompositingState, and places it in
        updateContentBuffersIncludeSublayers, which traverses the tree
        separately from flushing the state for painting.

        No new tests, covered by existing tests.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):

2013-06-05  Gwang Yoon Hwang  <ryumiel@company100.net>

        [Coordinated Graphics] Rename client classes for CoordinatedImageBacking and UpdateAtlas.
        https://bugs.webkit.org/show_bug.cgi?id=111948

        Reviewed by Noam Rosenthal.

        This patch renames CoordinatedImageBacking::Coordinator to
        CoordinatedImageBacking::Client, and UpdateAtlasClient to
        UpdateAtlas::Client for naming consistency and clarification.

        No new tests, covered by existing tests.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2013-06-05  Gwang Yoon Hwang  <ryumiel@company100.net>

        [Coordinated Graphics] Unify messages related object's lifecycles into CoordinatedGraphicsState.
        https://bugs.webkit.org/show_bug.cgi?id=111919

        Reviewed by Noam Rosenthal.

        CoordinatedLayerTreeHostProxy has several methods, which simply passes
        these calls to CoordinatedGraphicsScene.

        This patch removes methods in CoordinatedLayerTreeHostProxy just for
        message chaining. Instead of that, messages for creation/deletion of objects
        (Layers, CustomFilters, UpdateAtlas, and ImageBacking) are unified into
        CommitCoordinatedGraphicsState.

        And this patch also removes codes for WebCoordinatedSurface in
        CoordinatedLayerTreeHost, except for a factory method.
        CoordinatedGraphicsArgumentCoders [en|de]codes CoordinatedSurface itself
        using WebCoordinatedSurface.

        No new tests, covered by existing tests.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::encodeCoordinatedSurface):
        (CoreIPC::decodeCoordinatedSurface):
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):
        (WebKit::CoordinatedLayerTreeHost::clearPendingStateChanges):
        (WebKit::CoordinatedLayerTreeHost::checkCustomFilterProgramProxies):
        (WebKit::CoordinatedLayerTreeHost::removeCustomFilterProgramProxy):
        (WebKit::CoordinatedLayerTreeHost::detachLayer):
        (WebKit::CoordinatedLayerTreeHost::createImageBacking):
        (WebKit::CoordinatedLayerTreeHost::updateImageBacking):
        (WebKit::CoordinatedLayerTreeHost::clearImageBackingContents):
        (WebKit::CoordinatedLayerTreeHost::removeImageBacking):
        (WebKit::CoordinatedLayerTreeHost::createGraphicsLayer):
        (WebKit::CoordinatedLayerTreeHost::createUpdateAtlas):
        (WebKit::CoordinatedLayerTreeHost::removeUpdateAtlas):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2013-06-04  Simon Cooper  <scooper@apple.com>

        Tighten plugin sandbox profiles against symlink attacks
        https://bugs.webkit.org/show_bug.cgi?id=117219
        <rdar://problem/13044569>

        Reviewed by Sam Weinig.

        This inserts deny rules for creating symbolic links. The rules are
        inserted at the end of sandbox profile compilation by overriding the
        finalizer.  The initial value of %finalize must be the last function
        called.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-04  Chris Fleizach  <cfleizach@apple.com>

        AX: WK2: accessibility position is calculated every time window frame is updated
        https://bugs.webkit.org/show_bug.cgi?id=117201

        Reviewed by Tim Horton.

        Only calculate the AX position if AX has already been enabled when updating the
        WKView's window and frame.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateWindowAndViewFrames]):
        (-[WKView _accessibilityRegisterUIProcessTokens]):
            Don't call accessibilityAttributeValue: here because it could enable accessibility prematurely.
        (-[WKView enableAccessibilityIfNecessary]):
            After enabling AX for the first time, also update the frame so that the AX position is correct.
        (-[WKView accessibilityFocusedUIElement]):
        (-[WKView accessibilityHitTest:]):
        (-[WKView accessibilityAttributeValue:]):
            Tell the AXObjectCache that AX is now enabled.

2013-06-04  Mark Rowe  <mrowe@apple.com>

        REGRESSION (r151043): Frequent crashes inside WebPageProxy::getPlugInInformation
        <http://webkit.org/b/117180>

        Reviewed by Brady Eidson.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getPlugInInformation): Return early when plugInProcessProxy is null
        since there's nothing we can do.

2013-06-04  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFl][WK2] Sub menu items should be of EWK_SUBMENU_TYPE and not checkable
        https://bugs.webkit.org/show_bug.cgi?id=116959

        Reviewed by Gyuyoung Kim.

        Currently using ewk API it is possible to create a sub menu item which is not an EWK_SUBMENU_TYPE
        or set checkable flag for it, while it is not possible for items created by WebKit. 
        This patch changes ewk context menu API to match WebKit2 behaviour, by creating sub menus with
        proper type and checkable flags.

        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        (ewk_context_menu_item_new_with_submenu):
        * UIProcess/API/efl/ewk_context_menu_item.h:
        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp:
        (showContextMenu):

2013-06-04  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Custom context menu items cannot be selected
        https://bugs.webkit.org/show_bug.cgi?id=116830

        Reviewed by Gyuyoung Kim.

        Custom item added using ewk_context_menu_item_append had no
        pointer to parent menu, and custom submenu added using with the
        the same function had no pointer to EwkView. Both issues
        prevented items to be selected.

        * UIProcess/API/efl/ewk_context_menu.cpp:
        (EwkContextMenu::appendItem):
        (EwkContextMenu::contextMenuItemSelected):
        (ewk_context_menu_item_append):
        (ewk_context_menu_item_select):
        * UIProcess/API/efl/ewk_context_menu_private.h:
        (EwkContextMenu):
        (EwkContextMenu::setEwkView):

2013-06-03  Simon Cooper  <scooper@apple.com>

        Unable to play videos in Safari using QuickTime plug-in until I've played those videos in Chrome first
        https://bugs.webkit.org/show_bug.cgi?id=117174
        <rdar://problem/13711687>

        Reviewed by Alexey Proskuryakov.

        Pull in fixes that allow https connections within the plugin
        environment.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-06-03  Marcelo Lira  <marcelo.lira@openbossa.org>

        [WK2] REGRESSION(r150798): scrolling coordinator is not being enabled when WebPage is set to use fixed layout
        https://bugs.webkit.org/show_bug.cgi?id=117163

        Reviewed by Darin Adler.

        Moved call to WebPage::settings()->setScrollingCoordinatorEnabled()
        from CoordinatedLayerTreeHost constructor to WebPage::setUseFixedLayout().
        The scrolling coordinator must be enabled or disabled following the
        WebPage's use of fixed layout.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseFixedLayout):

2013-06-03  Anders Carlsson  <andersca@apple.com>

        Send mouse events to the banner for as long as the mouse button is down
        https://bugs.webkit.org/show_bug.cgi?id=117161
        <rdar://problem/13821220>

        Reviewed by Beth Dakin.

        Keep track of whether the mouse was pressed in a banner and keep sending mouse events to it,
        even if they are outside the banner's bounds for as long as the mouse is down.

        * WebProcess/WebPage/PageBanner.h:
        * WebProcess/WebPage/mac/PageBannerMac.mm:
        (WebKit::PageBanner::PageBanner):
        (WebKit::PageBanner::mouseEvent):

2013-06-03  Sergio Correia  <sergio.correia@openbossa.org>

        [EFL][WK2] Process launcher uses system() for wrapping the WebProcess when using WEB_PROCESS_CMD_PREFIX
        https://bugs.webkit.org/show_bug.cgi?id=105156

        Reviewed by Christophe Dumez.

        When using WEB_PROCESS_CMD_PREFIX - which allows us for instance to analyze
        WebProcess under tools like valgrind or gdb -, the ProcessLauncher would
        spawn the new process using system(), which would, among other things, keep
        an extra UIProcess waiting and executing the shell.

        This patch handles the normal case and the case where we have something to
        prefix WebProcess (i.e., by using WEB_PROCESS_CMD_PREFIX in a debug build)
        the same way, through a call to execvp().

        To achieve this a function was introduced to create an array with the given
        arguments to the full command to be executed, to be used by execvp(). We use
        a Vector<OwnArrayPtr<char>>, so that we can take advantage of the destructor
        of OwnArrayPtr to handle the memory deallocation when it goes out of scope.

        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::createArgsArray):  This function creates the array to be used by
        execvp(), out of the Strings given as arguments.
        (WebKit::ProcessLauncher::launchProcess): Rework the logic to accomodate
        both the cases with and without WEB_PROCESS_CMD_PREFIX. The execl() call
        was replaced with an execvp() call, since now we should deal with having
        a variable number of arguments (WEB_PROCESS_CMD_PREFIX) as well.

2013-06-02  Arunprasad Rajkumar  <arurajku@cisco.com>

        [Qt] Move Qt port off legacy clipboard
        https://bugs.webkit.org/show_bug.cgi?id=116416

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/qt/WebDragClientQt.cpp:
        (WebKit::WebDragClient::startDrag):

2013-06-02  Sergio Correia  <sergio.correia@openbossa.org>

        [WK2][CoordinatedGraphics]: Use a properly initialized WebPage when creating a PageClient
        https://bugs.webkit.org/show_bug.cgi?id=117116

        Reviewed by Tim Horton.

        Valgrind reported a "conditional jump or move depends on uninitialised value"
        at WebPageProxy constructor, when checking the m_isVisible variable inside
        the ENABLE(PAGE_VISIBILITY_API) guard.

        The issue was tracked down to the WebView constructor, which was creating a
        WebKit::PageClient* making use of `this' before having initialized all of its
        attributes.

        The solution was to move the initialization of the `page' member to inside the
        constructor itself - out of the initialization list -, where we can guarantee
        all the relevant stuff has already been properly initialized.

        Here's the relevant valgrind trace for reference:

        Conditional jump or move depends on uninitialised value(s)
            at 0x65A35A4: WebKit::WebPageProxy::WebPageProxy(WebKit::PageClient*,
                          WTF::PassRefPtr<WebKit::WebProcessProxy>,
                          WebKit::WebPageGroup*, unsigned long) (WebPageProxy.cpp:322)
            by 0x65A2BA2: WebKit::WebPageProxy::create(WebKit::PageClient*,
                          WTF::PassRefPtr<WebKit::WebProcessProxy>,
                          WebKit::WebPageGroup*, unsigned long) (WebPageProxy.cpp:233)
            by 0x65E94BB: WebKit::WebProcessProxy::createWebPage(WebKit::PageClient*,
                          WebKit::WebContext*, WebKit::WebPageGroup*)
                          (WebProcessProxy.cpp:172)
            by 0x6570957: WebKit::WebContext::createWebPage(WebKit::PageClient*,
                          WebKit::WebPageGroup*, WebKit::WebPageProxy*)
                          (WebContext.cpp:735)
            by 0x67673E3: WebKit::WebView::WebView(WebKit::WebContext*,
                          WebKit::WebPageGroup*) (WebView.cpp:52)
            by 0x6775F18: WebKit::WebViewEfl::WebViewEfl(WebKit::WebContext*,
                          WebKit::WebPageGroup*) (WebViewEfl.cpp:54)
            by 0x6775EB4: WebKit::WebView::create(WebKit::WebContext*,
                          WebKit::WebPageGroup*) (WebViewEfl.cpp:49)
            by 0x673E13D: WKViewCreate (WKView.cpp:33)
            by 0x6763ECE: EWKViewCreate (ewk_view.cpp:92)

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::WebView):

2013-05-31  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Add a null checking condition to in hide() of EwkContextMenu
        https://bugs.webkit.org/show_bug.cgi?id=117014

        Reviewed by Christophe Dumez.

        m_viewImpl is able to be null. So, we need to protect this function against such case.

        * UIProcess/API/efl/ewk_context_menu.cpp:
        (EwkContextMenu::hide):
        (ewk_context_menu_hide):
        * UIProcess/API/efl/ewk_context_menu_private.h:
        (EwkContextMenu):

2013-05-31  Oliver Hunt  <oliver@apple.com>

        Fix bug in active page tracking that lead to plugins hanging during destruction
        https://bugs.webkit.org/show_bug.cgi?id=117099

        Reviewed by Anders Carlsson.

        NPRuntimeObjectMap no longer keeps its own reference to the
        throttler, and no longer reports activity during destruction.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::NPRuntimeObjectMap):
        (WebKit::NPRuntimeObjectMap::evaluate):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):

2013-05-31  Tim Horton  <timothy_horton@apple.com>

        [wk2] All intrinsic content size changes should go through the 0-delay timer
        https://bugs.webkit.org/show_bug.cgi?id=117058
        <rdar://problem/13935042>

        Reviewed by Anders Carlsson.

        In r146913, I added a 0-delay timer so that we'd coalesce intrinsic
        content size changes. However, didUpdateGeometry was still immediately
        invalidating the intrinsic content size without coalescing.

        Move that update to the WebProcess to share the timer.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::didUpdateGeometry):
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry):
        Remove the newIntrinsicContentSize argument, and don't invalidate intrinsic
        content size inside didUpdateGeometry.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        Start the intrinsic content size update timer when we finish updateGeometry.

2013-05-31  Alexey Proskuryakov  <ap@apple.com>

        Sandbox violations when trying to access fonts in non-standard locations
        https://bugs.webkit.org/show_bug.cgi?id=117097
        <rdar://problem/9264746>

        Reviewed by Anders Carlsson.

        The issue was that lack of a main xib was resulting in font machinery being
        initialized too early, before we entered sandbox.

        * Resources/WebContentProcess.xib: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:

2013-05-31  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/14036464> Sandbox violation when using Web SpeechSynthesis

        Reviewed by Anders Carlsson

        * WebProcess/com.apple.WebProcess.sb.in: Allow com.apple.speech.synthesis.console.

2013-05-31  Jessie Berlin  <jberlin@apple.com>

        Need the ability to get the information for a plug-in with a particular process id that may
        be running on a page
        https://bugs.webkit.org/show_bug.cgi?id=117090

        Rubber-stamped by Anders Carlsson.

        Follow-up to r151043 incorprating some feedback I got from Darin after I had already
        committed the patch.

        * UIProcess/API/C/mac/WKPagePrivateMac.cpp:
        (callGetPlugInInformationBlockAndDispose):
        Renamed to be less wordy.
        (WKPageGetPlugInInformation):
        Ditto.
        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        Ditto.

        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        (WebKit::PluginProcessManager::findPlugInProcessByID):
        Renamed to not use "Cocoa method style" in non-Cocoa functions.
        (WebKit::PluginProcessManager::findPlugInProcessByToken):
        Ditto.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getPlugInInformation):
        Reduce ref count churn and fix a variable name.
        Updated for the change to findPlugInProcessByID.
        (WebKit::WebPageProxy::containsPlugInCallback):
        Updated for the change to findPlugInProcessByToken.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        Move the override of a virtual function to the private section.

2013-05-31  Jessie Berlin  <jberlin@apple.com>

        Need the ability to get the information for a plug-in with a particular process id that may
        be running on a page
        https://bugs.webkit.org/show_bug.cgi?id=117090

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/mac/WKPagePrivateMac.cpp:
        (callGetInformationForPlugInWithProcessIDBlockAndDispose):
        Get the block from the context, invoke it with the result, and dispose of it.
        (WKPageGetInformationForPlugInWithProcessID):
        Ask the WebPageProxy and provide it with a dictionary callback that uses the
        above function to invoke the passed in block.
        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        Add WKPageGetInformationForPlugInWithProcessID and a typedef for the callback block.

        * UIProcess/Plugins/PluginProcessManager.h:
        Add ways to get the PluginProcessProxy associated with a process id or process token.
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        (WebKit::PluginProcessManager::plugInProcessWithProcessID):
        Return the first PluginProcessProxy with the passed in process ID.
        (WebKit::PluginProcessManager::plugInProcessWithToken):
        Return the first PluginProcessProxy with the passed in process token.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        Invalidate any outstanding requests for plug-in information.
        * UIProcess/WebPageProxy.h:
        Keep track of the callbacks for the requests for plug-in information.
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getInformationForPlugInWithProcessID):
        If there are no known plug-ins with the provided process ID, invoke the callback with a null
        dictionary of plug-in information.
        Otherwise, keep track of the callback and send a message to the web process asking for the
        information.
        (WebKit::WebPageProxy::containsPlugInCallback):
        If the page did not contain the plug-in, invoke the callback with a null dictionary of
        plug-in information.
        Invoke the callback with a dictionary containing the PlugInModuleInfo.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Return 0 for the plugInProcessToken.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        Ditto.
        * WebProcess/Plugins/Plugin.h:
        Add a pure virtual method for plugInProcessToken so it can be accessed from from the Plugin
        on the PluginView.
        * WebProcess/Plugins/PluginProxy.h:
        Return the actual plug-in process token.

        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::plugIn):
        Make it possible to get at the plug-in process token through the Plugin.

        * WebProcess/WebPage/WebPageMac.mm:
        (WebKit::WebPage::containsPluginViewsWithPluginProcessToken):
        If there is an instance of the plug-in with that token, send a confirmation to the ui
        process.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2013-05-31  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r141445): MPEG-4 videos do not play on certain hardware configurations
        https://bugs.webkit.org/show_bug.cgi?id=117089
        <rdar://problem/13839717>

        Reviewed by Mark Rowe.

        * Configurations/WebContentProcess.xcconfig: Statically link to a framework that
        uses an XPC service to work around a libxpc limitation on Lion.

2013-05-31  Dean Jackson  <dino@apple.com>

        Don't create an accelerated compositing layer unless we have to for snapshotting plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=117076
        <rdar://problem/14030364>

        Reviewed by Beth Dakin and Anders Carlsson.

        If a plug-in can support software snapshotting, then don't create an
        accelerated compositing layer for it while in snapshot mode. This is a
        better user experience -- otherwise the page/plug-in looks like it broke.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::isAcceleratedCompositingEnabled): If we are in snapshotting mode
        and we are a Flash plugin (the only one that supports software snapshots at the moment)
        then do not create an accelerated compositing layer.

2013-05-30  Tim Horton  <timothy_horton@apple.com>

        It's easy to hit ASSERT_NOT_REACHED in WKDOMNodeClass
        https://bugs.webkit.org/show_bug.cgi?id=117051

        Reviewed by Anders Carlsson.

        Re-add the ASSERT_NOT_REACHED, and return [WKDOMNode class] in the case
        where we don't have a specific subclass.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::WKDOMNodeClass):

2013-05-31  Stephanie Lewis  <slewis@apple.com>

        Update low memory handler to use new memory pressure notifications on new OS versions.
        <rdar://problem/14027095>

        Reviewed by Mark Rowe.

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

2013-05-30  Tim Horton  <timothy_horton@apple.com>

        Remove ASSERT_NOT_REACHED from WKDOMNodeClass
        https://bugs.webkit.org/show_bug.cgi?id=117051

        Reviewed by Anders Carlsson.

        It's easy to fail this assertion in seemingly-legitimate cases.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::WKDOMNodeClass):

2013-05-29  Jeffrey Pfau  <jpfau@apple.com>

        [Mac] Enable cache partitioning and the public suffix list on 10.8
        <rdar://problem/13679019>

        Rubber-stamped by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

2013-05-30  Andreas Kling  <akling@apple.com>

        Fix double hash lookup in WebPage::determinePrimarySnapshottedPlugIn() loop.
        <http://webkit.org/b/117032>

        Reviewed by Anders Carlsson.

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

2013-05-29  Tim Horton  <timothy_horton@apple.com>

        Expose incrementalRenderingSuppressionTimeout via WK2
        https://bugs.webkit.org/show_bug.cgi?id=117015
        <rdar://problem/13992853>

        Reviewed by Darin Adler.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferencesPrivate.h:
        Add IncrementalRenderingSuppressionTimeout preference.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetIncrementalRenderingSuppressionTimeout): Added.
        (WKPreferencesGetIncrementalRenderingSuppressionTimeout): Added.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebKit::WebFrameLoaderClient::forcePageTransitionIfNeeded): Added.
        Call didCompletePageTransition, which un-freezes the layer tree.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCompletePageTransition):
        Fix some indentation.

        (WebKit::WebPage::updatePreferences):
        Forward the timeout value through to WebCore.

2013-05-29  Simon Fraser  <simon.fraser@apple.com>

        Fix paint-related milestones to not fire when the layer tree is frozen
        https://bugs.webkit.org/show_bug.cgi?id=117012

        Reviewed by Tim Horton.
        
        Implement ChromeClient::layerTreeStateIsFrozen() to return
        the frozen state of the drawing area.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::layerTreeStateIsFrozen):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

2013-05-29  Anders Carlsson  <andersca@apple.com>

        WebKit should expose HSTS APIs to determine whether a host is in the HSTS cache and to reset HSTS policies
        https://bugs.webkit.org/show_bug.cgi?id=117010
        <rdar://problem/13689666>

        Reviewed by Tim Horton.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        * UIProcess/API/C/mac/WKPagePrivateMac.cpp:
        * UIProcess/API/C/mac/WKPagePrivateMac.h:
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit):
        (WebKit::privateBrowsingSession):
        (WebKit::WebContext::isURLKnownHSTSHost):
        (WebKit::WebContext::resetHSTSHosts):

2013-05-29  Tim Horton  <timothy_horton@apple.com>

        WKViews using shouldClipToVisibleRect=YES should respect prepareContentInRect: if called
        https://bugs.webkit.org/show_bug.cgi?id=116989
        <rdar://problem/14007440>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView prepareContentInRect:]):
        If prepareContentInRect: is called, save the rect and set a flag so we know we should use it.

        (-[WKView _updateViewExposedRect]):
        Give the WebPage (and later the DrawingArea) the union of the rect handed to prepareContentInRect:
        and the WKView's visibleRect, if we're in that mode, so that applications that do their own scrolling
        can cause tiles to be created in currently offscreen views (for overdraw).

        (-[WKView setFrameSize:]):
        (-[WKView _updateWindowAndViewFrames]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (-[WKView enableFrameSizeUpdates]):
        (-[WKView setShouldClipToVisibleRect:]):
        (-[WKView forceAsyncDrawingAreaSizeUpdate:]):
        Use [_updateViewExposedRect].

2013-05-28  Oliver Hunt  <oliver@apple.com>

        Add more accurate activity state tracking
        https://bugs.webkit.org/show_bug.cgi?id=116893

        Reviewed by Gavin Barraclough.

        This extends the logic in WebCore from a Page to Process
        granularity, so we will avoid lowering the child process
        priority if there is active content.  This also plumbs in
        the logic to allow plugins to report that they have done
        something "interesting".  Currently this is somewhat conservative
        but even this is sufficient to fix some stuttering issues
        that we've seen.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::ChildProcess):
        * Shared/ChildProcess.h:
        (ChildProcess):
        (WebKit::ChildProcess::processSuppressionEnabled):
        (WebKit::ChildProcess::incrementActiveTaskCount):
        (WebKit::ChildProcess::decrementActiveTaskCount):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit):
        (WebKit::ChildProcess::setProcessSuppressionEnabledInternal):
        (WebKit::ChildProcess::setProcessSuppressionEnabled):
        (WebKit::ChildProcess::incrementActiveTaskCount):
        (WebKit::ChildProcess::decrementActiveTaskCount):
        (WebKit::ChildProcess::suspensionHysteresisTimerFired):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::NPRuntimeObjectMap):
        (WebKit::NPRuntimeObjectMap::evaluate):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        (WebCore):
        (NPRuntimeObjectMap):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::incrementActivePageCount):
        (WebKit):
        (WebKit::WebChromeClient::decrementActivePageCount):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

2013-05-29  Anders Carlsson  <andersca@apple.com>

        Return earlier if there's no session storage namespace
        https://bugs.webkit.org/show_bug.cgi?id=116984
        <rdar://problem/13976781>

        Reviewed by Tim Horton.

        If we can't find a session storage namespace, return before creating an entry in the m_storageAreasByConnection
        hash map since then we'll crash trying to remove it later.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageMap):

2013-05-29  Martin Robinson  <mrobinson@igalia.com>

        Fix more CMake GTK+ build issues after r150336

        * CMakeLists.txt: We need to allow for setting the WebProcess output name, since
        WebKitGTK+ expects it to be called WebKitWebProcess.
        * PlatformGTK.cmake: No longer set WebProcess_EXECUTABLE_NAME as it's been replaced
        by WebKit2_WebProcess_OUTPUT_NAME.

2013-05-29  Marcelo Lira  <marcelo.lira@openbossa.org>

        [WK2][CoordinatedGraphics][EFL] WKViewUserViewportToContents() function doesn't do what it says
        https://bugs.webkit.org/show_bug.cgi?id=116683

        Reviewed by Noam Rosenthal.

        WKViewUserViewportToContents now converts WebView coordinates to
        page contents coordinates, taking into account factors as content
        scale and scroll, and also device scale.

        The function WKViewUserViewportToScene was added to convert WebView
        coordinates to the coordinates of the canvas/scene where the view
        is drawn, and EwkView was fixed to use it, instead of
        WKViewUserViewportToContents.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewUserViewportToScene):
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::createGLSurface):
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::userViewportToContents):
        (WebKit):
        (WebKit::WebView::userViewportToScene):
        (WebKit::WebView::transformToScene):
        * UIProcess/CoordinatedGraphics/WebView.h:
        (WebView):

2013-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add WebCoreLayerGtk2.a to DISTCLEANFILES.

2013-05-29  Seokju Kwon  <seokju.kwon@gmail.com>

        [GTK] Clean up WebKit2 GNUmakefile.am
        https://bugs.webkit.org/show_bug.cgi?id=116907

        Reviewed by Martin Robinson.

        Removed WebNotificationManagerProxy.messages.in after r150785.

        * GNUmakefile.am:

2013-05-28  Alexey Proskuryakov  <ap@apple.com>

        Freeze when loading a particular page on washingtonpost.com with NetworkProcess enabled
        https://bugs.webkit.org/show_bug.cgi?id=116887
        <rdar://problem/12965959>

        Reviewed by Darin Adler.

        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::encode):
        (CoreIPC::decode):
        Fix for the bug: use good shared WebCore code to manipulate CFURLs. Also, added
        a FIXME about empty URLs.

        * Shared/API/c/cf/WKURLCF.cpp: (WKURLCreateWithCFURL): Fixed to not use
        CFURLGetString, as that could prevent loading certain resources, like ones with
        curly braces in resource specifiers. We want KURL normalization, not CFURL one.

2013-05-28  Tim Horton  <timothy_horton@apple.com>

        Rendering suppression extension tokens shouldn't be 0, should handle overflow
        https://bugs.webkit.org/show_bug.cgi?id=116886
        <rdar://problem/14004474>

        Reviewed by Darin Adler.

        Don't use invalid HashSet values as tokens, and ensure that
        we're not already using a token before returning it.

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

2013-05-28  Lauro Neto <lauro.neto@openbossa.org>

        [GTK] Connection issues in repeated WebProcess crash/reloads.
        https://bugs.webkit.org/show_bug.cgi?id=115880

        Reviewed by Anders Carlsson.

        When stressing the WebProcess creation/destruction, WebKitGTK can
        often run into socket issues like bad file descriptor errors or
        polling a socket indefinitely.

        Currently WebKitGTK has three places where a socket can be
        closed.

        - childFinishedFunction (in ProcessLauncherGtk.cpp)
        - Connection::platformInvalidate (in ConnectionUnix.cpp)
        - WorkQueue EventSource destruction (in WorkQueueGtk.cpp)

        To avoid these race conditions, socket closing will be handled
        by the event source callback in WorkQueueGtk.cpp.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::platformInvalidate): Do not close the socket
        when the connection is invalidated, the socket event source is
        unregistered in this method and the socket is closed when the
        GSocket associated to the event source is destroyed.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Do not monitor child
        process to close the connection on termination. This was needed in
        the past when we used DGRAM sockets, we currently use always
        connection oriented sockets, so that when the other end closes
        the connection we are notified and the connection is invalidated.

2013-05-28  Martin Robinson  <mrobinson@igalia.com>

        Fix GTK+ CMake build

        * PlatformGTK.cmake: After r150336, the name of the WebKit2
        library target is simply "WebKit2."

2013-05-28  Marcelo Lira  <marcelo.lira@openbossa.org>

        [WK2][CoordinatedGraphics] DrawingArea's visible content area must be updated when contents size changes
        https://bugs.webkit.org/show_bug.cgi?id=116845

        Reviewed by Noam Rosenthal.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::didChangeContentsSize):

2013-05-28  Noam Rosenthal  <noam@webkit.org>

        [Qt] REGRESSION(r149292): broke scrolling in Qt WK2 desktop mode
        https://bugs.webkit.org/show_bug.cgi?id=116597

        ScrollingCoordinatorCoordinatedGraphics is tailored specifically for
        fixedLayout mode. When fixedLayout is not set, it should be turned off.

        Reviewed by Allan Sandfeld Jensen.

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

2013-05-28  Andreas Kling  <akling@apple.com>

        Document::setFocusedNode() should be setFocusedElement().
        <http://webkit.org/b/116857>

        Reviewed by Antti Koivisto.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::focusPluginElement):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::focusedPluginViewForFrame):
        (WebKit::WebPage::setInitialFocus):

2013-05-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Clean up duplicated include files.
        https://bugs.webkit.org/show_bug.cgi?id=116851

        Reviewed by Christophe Dumez.

        Remove some of duplicated include file in ewk files.

        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_color_picker.cpp:
        * UIProcess/API/efl/ewk_context_menu.cpp:
        * UIProcess/API/efl/ewk_security_origin_private.h:

2013-05-28  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] pc files should have harfbuzz dependency.
        https://bugs.webkit.org/show_bug.cgi?id=116852

        Reviewed by Gyuyoung Kim.

        * efl/ewebkit2.pc.in: Added harfbuzz as Required package.

2013-05-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Remove unneeded WebCore namespace use in ewk
        https://bugs.webkit.org/show_bug.cgi?id=116707

        Reviewed by Christophe Dumez.

        * UIProcess/API/efl/ewk_security_origin.cpp: Remove "using namespace WebCore".
        * UIProcess/API/efl/ewk_text_checker.cpp: ditto.

2013-05-26  Jon Lee  <jonlee@apple.com>

        [WK2] Notifications clobber each other with multiple processes
        https://bugs.webkit.org/show_bug.cgi?id=116428
        <rdar://problem/13935191>

        Reviewed by Darin Adler.

        With multiple processes, the notification IDs, when passed up to the UI process, can clobber
        each other. To fix this, we need to maintain a global map of notification IDs. This map is
        keyed by its own unique notification ID, and maps to a pair containing the web page ID and that
        web page's ID for the notification.

        Now that we maintain groups of notifications based on the web page, we no longer send IPC messages
        from WebNotificationManager to WebNotificationManagerProxy; instead we send messages to the
        WebPageProxy. This removes the need for WebNotificationManagerProxy to be a message receiver.

        When a page closes, all of the web notifications are cleared out. However, by the time the
        WebPage::close() is called, the connection between WebPage and WebPageProxy is destroyed. Since
        the WebPage is told to close from the UI process anyway, we clear out the notifications separately,
        instead of waiting for a message from the WebPage.

        * UIProcess/Notifications/WebNotificationManagerProxy.h: Update to take into account the
        notification's web page. Remove inheritance of CoreIPC::MessageReceiver. Expose the original message
        handlers as public functions, since they will be called from WebPageProxy. Add a new map that
        associates a global ID with a notification ID that came from a web page.
            There are now two flavors of clearNotifications(). One clears out all notifications associated
        with a web page. This is called when the page is closed. The other clears out a subset of
        notifications associated with a web page. This is called when notifications associated with a sub-frame
        is closed.
        * UIProcess/Notifications/WebNotificationManagerProxy.messages.in: Removed. All messages from
        the web process go to WebPageProxy now.

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp: Update to take into account the
        notification's web page.

        (WebKit::generateGlobalNotificationID): The manager proxy now maintains its own global notification
        ID generator.
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy): The proxy is no longer a
        message receiver. Remove code that registers it as such.

        (WebKit::WebNotificationManagerProxy::show): Refactor to differentiate between the notification ID
        that came from the web process, and the global notification ID the proxy maintains. Add the mapping
        from the global ID to the (web page ID, notification ID) pair.
        (WebKit::WebNotificationManagerProxy::cancel): Refactor to take into consideration the web page.
        (WebKit::WebNotificationManagerProxy::didDestroyNotification): Refactor to take into consideration
        the web page. Fixes a leak where we did not remove the item from the maps. This function is called
        from the web process, when the ScriptExecutionContext is destroyed, so we remove it from our maps
        before we pass the message along to the provider.

        Helper functions that evaluate when a given notification in the map matches the desired parameters.
        (WebKit::pageIDsMatch): The notification is associated with the provided page.
        (WebKit::pageAndNotificationIDsMatch): The notification is associated with the provided page and is
        contained within the list of provided notifications.

        (WebKit::WebNotificationManagerProxy::clearNotifications): Changed to only remove notifications
        associated with the provided web page, and could include a specific list of notifications. This latter
        situation occurs if notifications were associated with an iframe, and that iframe was removed.
        There is an O(n) walk that could be make more efficient using another hash map, but that's overhead
        for a map that should be small in size anyway.

        (WebKit::WebNotificationManagerProxy::providerDidShowNotification): Refactor to take into
        consideration the web page.
        (WebKit::WebNotificationManagerProxy::providerDidClickNotification): Refactor to take into
        consideration the web page.
        (WebKit::WebNotificationManagerProxy::providerDidCloseNotifications): Now we need to comb through
        the list of global IDs and put them in buckets based on the notification's web pages. After that
        is done we can send the DidCloseNotifications() to those pages' processes. There is a possible
        extra optimization here where we group based on the page's process instead, to reduce the number
        of messages sent to processes.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): When a web page is closed, we clear the notifications associated
        with the page.
        (WebKit::WebPageProxy::cancelNotification): Forward call to WebNotificationManagerProxy.
        (WebKit::WebPageProxy::clearNotifications): Ditto.
        (WebKit::WebPageProxy::didDestroyNotification): Ditto.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::cancel):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::didDestroyNotification):
        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp: Remove extraneous include.

        * CMakeLists.txt: Remove WebNotificationManagerProxy.messages.in and related files.
        * DerivedSources.pri: Ditto.
        * DerivedSources.make: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.

2013-05-27  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix take 2.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:

2013-05-27  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:

2013-05-27  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Main-frame PDFPlugin Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=116563
        <rdar://problem/13458534>

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h:
        Forward-declare a variety of accessibility methods.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        Add convertFromPDFViewToScreen, boundsOnScreen, accessibilityObject, and
        storage for our accessibility wrapper.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        Add WKPDFPluginAccessibilityObject.

        (-[WKPDFPluginAccessibilityObject accessibilityIsIgnored]):
        We want to be included in the accessibility tree.

        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:]):
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:forParameter:]):
        Grab values for accessibility attributes from the relevant sources
        (mostly from PDFLayerController).

        (-[WKPDFPluginAccessibilityObject readingModel]): Ditto.
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeNames]):
        (-[WKPDFPluginAccessibilityObject accessibilityParameterizedAttributeNames]):
        (-[WKPDFPluginAccessibilityObject accessibilityActionNames]):
        Return the set of accessibility attributes, actions, and parameterized
        attributes that we support.

        (-[WKPDFPluginAccessibilityObject accessibilityIsAttributeSettable:]):
        (-[WKPDFPluginAccessibilityObject accessibilitySetValue:forAttribute:]):
        Forward some other accessibility methods to PDFLayerController.

        (-[WKPDFPluginAccessibilityObject accessibilityFocusedUIElement]):
        (-[WKPDFPluginAccessibilityObject accessibilityHitTest:]):
        We have no children, so if a hit test makes it to us, it's ours.

        (WebKit::PDFPlugin::PDFPlugin):
        Make a WKPDFPluginAccessibilityObject and hook it up.
        [FIXME: this could use some de-crapifying]

        (WebKit::PDFPlugin::convertFromPluginToPDFView):
        Transform a point from plugin space to PDFLayerController space.

        (WebKit::PDFPlugin::convertFromPDFViewToRootView):
        (WebKit::PDFPlugin::convertFromPDFViewToScreen): Added.
        (WebKit::PDFPlugin::boundsOnScreen):
        Return the PDFPlugin's frame in screen coordinates.

        (WebKit::PDFPlugin::accessibilityObject):
        Return our accessibility wrapper.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::accessibilityObject):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::accessibilityObject):
        * WebProcess/Plugins/PluginView.h:
        Add accessibilityObject(), to acquire accessibility wrappers from plugins.

        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add accessibilityObjectForMainFramePlugin();
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        (-[WKAccessibilityWebPageObject accessibilityRootObjectWrapper]):
        If the main frame has a PluginDocument that has an accessibilityObject,
        use that one instead of the WebPage's.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::accessibilityObjectForMainFramePlugin):
        Return the accessibilityObject from the main-frame PluginDocument, if
        there is one.

2013-05-27  Marcelo Lira  <marcelo.lira@openbossa.org>

        [WK2][CoordinatedGraphics] Misuse of DrawingAreaProxy::setVisibleContentsRect() in WebView::updateViewportSize()
        https://bugs.webkit.org/show_bug.cgi?id=116688

        Reviewed by Noam Rosenthal.

        Visible contents area passed to DrawingAreaProxy::setVisibleContentsRect()
        must be calculated including the page scale factor and avoid crossing the
        boundaries of the page contents size. In other words the DrawingArea
        must know the actual dimensions of what it being drawn. If the
        DrawingArea thinks the visible rectangle is bigger than it is, the
        contents will be drawn pixelated and blurry.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::didChangeContentsSize):
        (WebKit::WebView::updateViewportSize):
        (WebKit::WebView::visibleContentsSize):
        (WebKit):
        * UIProcess/CoordinatedGraphics/WebView.h:
        (WebKit::WebView::contentsSize):
        (WebView):

2013-05-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView child widgets are not rendered with recent GTK+
        https://bugs.webkit.org/show_bug.cgi?id=116794

        Reviewed by Xan Lopez.

        Since rev d22fd7223c75f4720ddb982c659efb0d8d7543c4 of GTK+ expose
        events are not propagated to child GdkWindows anymore, and child
        widgets are rendered via gtk_container_propagate_draw(). Since all
        our children have its own GdkWindow (auth widget, inspector view
        and windowed plugins) we don't propagate the draw signal making
        them invisible with current GTK+.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDraw): Chain up to the parent draw(), so it's
        propagated to the children. This shouldn't have any effect in
        previous versions of GTK+ because gtk_container_propagate_draw()
        returned early when the child widget had its own GdkWindow.

2013-05-27  Xan Lopez  <xlopez@igalia.com>

        Reset all clients on WebPage close
        https://bugs.webkit.org/show_bug.cgi?id=112334

        Reviewed by Anders Carlsson.

        We do not reset the clients on WebPage::close(), so there's a
        small chance that someone will try to access them after that. This
        won't work and will generally cause runtime warnings, crashes or
        other issues. Reset them all to null to prevent this situation.

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

2013-05-27  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Notify WebProcess in WebKitURISchemeRequest when we fail to read the user InputStream
        https://bugs.webkit.org/show_bug.cgi?id=114347

        Reviewed by Carlos Garcia Campos.

        While processing a WebKitURISchemeRequest if there is any error reading
        the InputStream provided by the user (for example the stream is already
        closed) we have to notify the WebProcess that the request has failed.

        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (webkitURISchemeRequestReadCallback): Get the error from
        g_input_stream_read_finish() and use it to call
        webkit_uri_scheme_request_finish_error() in order to finish the failing
        WebKitURISchemeRequest properly.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextURIScheme): Modify test to check the new situation using
        an already closed InputStream.

2013-05-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header file.

2013-05-26  Changhun Kang  <temoochin@company100.net>

        The public WK header file should not include WKAPICast.h
        https://bugs.webkit.org/show_bug.cgi?id=115230

        Reviewed by Darin Adler.

        Otherwise, WebKit internal headers are exposed.
        No new tests. No change in behavior.
        * UIProcess/API/C/soup/WKSoupRequestManager.h:
        * UIProcess/soup/WebSoupRequestManagerClient.h:

2013-05-26  Andreas Kling  <akling@apple.com>

        FocusController::setFocusedNode() should be setFocusedElement().
        <http://webkit.org/b/116780>

        Reviewed by Antti Koivisto.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::focusPluginElement):

2013-05-25  Andreas Kling  <akling@apple.com>

        PluginDocument::pluginNode() should be pluginElement() instead.
        <http://webkit.org/b/116774>

        Reviewed by Anders Carlsson.

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

2013-05-25  Simon Fraser  <simon.fraser@apple.com>

        Unprefix Page Visibility API
        https://bugs.webkit.org/show_bug.cgi?id=102340

        Reviewed by Tim Horton.
        
        Renaming of the "preview" state to "unloaded".

        * Shared/API/c/WKPageVisibilityTypes.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toPageVisibilityState):

2013-05-25  Andreas Kling  <akling@apple.com>

        Move Node::isMouseFocusable() to Element.
        <http://webkit.org/b/116762>

        Reviewed by Anders Carlsson.

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

            Check that the potentially activated Node is an Element before asking if it's mouse-focusable.

2013-05-25  Andreas Kling  <akling@apple.com>

        REGRESSION: WebProcess is terminated when all Safari windows are closed.
        <rdar://problem/13990901>
        <http://webkit.org/b/116766>

        Reviewed by Alexey Proskuryakov.

        When closing the last page, only disconnect the web process if we're using a network process.
        Otherwise there might be session state in the web process getting lost.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeWebPage):

2013-05-25  Santosh Mahto  <santosh.ma@samsung.com>

        WebFrameProxy::didFailLoad clears frame title for no apparent reason
        https://bugs.webkit.org/show_bug.cgi?id=116655

        Reviewed by Alexey Proskuryakov.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didFailLoad):

2013-05-24  Seokju Kwon  <seokju.kwon@gmail.com>

        [Qt][GTK] Build fix after r150669
        https://bugs.webkit.org/show_bug.cgi?id=116751

        Reviewed by Christophe Dumez.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::getEditorCommandsForKeyEvent):

2013-05-24  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Build fix after r150669
        https://bugs.webkit.org/show_bug.cgi?id=116750

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * WebProcess/Battery/WebBatteryManager.cpp:
        (WebKit::WebBatteryManager::registerWebPage):
        (WebKit::WebBatteryManager::unregisterWebPage):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.cpp:
        (WebKit::WebNetworkInfoManager::registerWebPage):
        (WebKit::WebNetworkInfoManager::unregisterWebPage):
        (WebKit::WebNetworkInfoManager::bandwidth):
        (WebKit::WebNetworkInfoManager::metered):
        * WebProcess/WebCoreSupport/WebVibrationClient.cpp:
        (WebKit::WebVibrationClient::vibrate):
        (WebKit::WebVibrationClient::cancelVibration):
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::didReceiveURIRequestData):
        (WebKit::WebSoupRequestManager::send):

2013-05-24  Anders Carlsson  <andersca@apple.com>

        MessageSender shouldn't be a class template
        https://bugs.webkit.org/show_bug.cgi?id=116743

        Reviewed by Andreas Kling.

        Change MessageSender to be a proper abstract base class. Subclasses of MessageSender must
        implement messageSenderConnection() as well as messageSenderDestinationID().

        This reduces code size and will allow us to be more flexible with MessageSender in the future.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure):
        (WebKit::NetworkResourceLoader::messageSenderConnection):
        (WebKit):
        (WebKit::NetworkResourceLoader::messageSenderDestinationID):
        * NetworkProcess/NetworkResourceLoader.h:
        (NetworkResourceLoader):
        * NetworkProcess/mac/DiskCacheMonitor.h:
        (DiskCacheMonitor):
        * NetworkProcess/mac/DiskCacheMonitor.mm:
        (WebKit::DiskCacheMonitor::messageSenderConnection):
        (WebKit::DiskCacheMonitor::messageSenderDestinationID):
        (WebKit):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC):
        (MessageSender):
        (CoreIPC::MessageSender::send):
        (CoreIPC::MessageSender::sendSync):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::messageSenderConnection):
        (WebKit):
        (WebKit::ChildProcess::messageSenderDestinationID):
        * Shared/ChildProcess.h:
        (ChildProcess):
        * Shared/Downloads/Download.cpp:
        (WebKit::Download::messageSenderConnection):
        (WebKit):
        (WebKit::Download::messageSenderDestinationID):
        * Shared/Downloads/Download.h:
        (Download):
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (WebKit::CustomProtocolManager::initialize):
        * Shared/WebConnection.h:
        (WebConnection):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):
        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::hasValidConnection):
        (WebKit::WebConnectionToWebProcess::messageSenderConnection):
        (WebKit::WebConnectionToWebProcess::messageSenderDestinationID):
        * UIProcess/WebConnectionToWebProcess.h:
        (WebConnectionToWebProcess):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::registerWebPage):
        (WebKit::WebGeolocationManager::unregisterWebPage):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::retainIconForPageURL):
        (WebKit::WebIconDatabaseProxy::releaseIconForPageURL):
        (WebKit::WebIconDatabaseProxy::synchronousIconForPageURL):
        (WebKit::WebIconDatabaseProxy::loadDecisionForIconURL):
        (WebKit::WebIconDatabaseProxy::setIconURLForPageURL):
        (WebKit::WebIconDatabaseProxy::setIconDataForIconURL):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::messageSenderConnection):
        (WebKit::WebResourceLoader::messageSenderDestinationID):
        * WebProcess/Network/WebResourceLoader.h:
        (WebResourceLoader):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::cancel):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::didDestroyNotification):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::~StorageAreaMap):
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        (WebKit::StorageAreaMap::loadValuesIfNeeded):
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::hasValidConnection):
        (WebKit::WebConnectionToUIProcess::messageSenderConnection):
        (WebKit::WebConnectionToUIProcess::messageSenderDestinationID):
        * WebProcess/WebConnectionToUIProcess.h:
        (WebConnectionToUIProcess):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowRect):
        (WebKit::WebChromeClient::focusedFrameChanged):
        (WebKit::WebChromeClient::createWindow):
        (WebKit::WebChromeClient::toolbarsVisible):
        (WebKit::WebChromeClient::statusbarVisible):
        (WebKit::WebChromeClient::menubarVisible):
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::shouldInterruptJavaScript):
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        * WebProcess/WebCoreSupport/WebColorChooser.cpp:
        (WebKit::WebColorChooser::WebColorChooser):
        (WebKit::WebColorChooser::setSelectedColor):
        (WebKit::WebColorChooser::endChooser):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveIcon):
        (WebKit::WebFrameLoaderClient::updateGlobalHistory):
        (WebKit::WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebKit::WebFrameLoaderClient::setTitle):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::populatePluginCache):
        (WebKit::WebPlatformStrategies::getTypes):
        (WebKit::WebPlatformStrategies::bufferForType):
        (WebKit::WebPlatformStrategies::getPathnamesForType):
        (WebKit::WebPlatformStrategies::stringForType):
        (WebKit::WebPlatformStrategies::copy):
        (WebKit::WebPlatformStrategies::changeCount):
        (WebKit::WebPlatformStrategies::uniqueName):
        (WebKit::WebPlatformStrategies::color):
        (WebKit::WebPlatformStrategies::url):
        (WebKit::WebPlatformStrategies::addTypes):
        (WebKit::WebPlatformStrategies::setTypes):
        (WebKit::WebPlatformStrategies::setBufferForType):
        (WebKit::WebPlatformStrategies::setPathnamesForType):
        (WebKit::WebPlatformStrategies::setStringForType):
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::show):
        (WebKit::WebPopupMenu::hide):
        * WebProcess/WebCoreSupport/WebSearchPopupMenu.cpp:
        (WebKit::WebSearchPopupMenu::saveRecentSearches):
        (WebKit::WebSearchPopupMenu::loadRecentSearches):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::sendDidReceiveEvent):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::updateBackForwardItem):
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        (WebKit::WebBackForwardListProxy::backListCount):
        (WebKit::WebBackForwardListProxy::forwardListCount):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::createInspectorPage):
        (WebKit::WebInspector::didClose):
        (WebKit::WebInspector::bringToFront):
        (WebKit::WebInspector::inspectedURLChanged):
        (WebKit::WebInspector::save):
        (WebKit::WebInspector::append):
        (WebKit::WebInspector::attachBottom):
        (WebKit::WebInspector::attachRight):
        (WebKit::WebInspector::detach):
        (WebKit::WebInspector::setAttachedWindowHeight):
        (WebKit::WebInspector::setAttachedWindowWidth):
        (WebKit::WebInspector::setToolbarHeight):
        (WebKit::WebInspector::updateDockingAvailability):
        (WebKit::WebInspector::sendMessageToRemoteFrontend):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::messageSenderConnection):
        (WebKit):
        (WebKit::WebPage::messageSenderDestinationID):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal):
        (WebKit::WebPage::handleEditingKeyboardEvent):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        (WebKit::WebProcess::shouldTerminate):

2013-05-24  Tim Horton  <timothy_horton@apple.com>

        Animated GIFs don't repaint after TiledCoreAnimationDrawingArea un-suspends painting
        https://bugs.webkit.org/show_bug.cgi?id=116744
        <rdar://problem/13973514>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::resumePainting):
        Force WebCore to repaint animated images when painting is resumed.

2013-05-24  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Remove custom code for webkitAudioContext global constructor getter
        https://bugs.webkit.org/show_bug.cgi?id=116530

        Reviewed by Geoffrey Garen.

        Use RuntimeEnabledFeatures instead of WebCore Settings to toggle Web Audio support.

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

2013-05-24  Thomas Deniau  <deniau@apple.com>

        Add more lines to the context during Dictionary lookups
        https://bugs.webkit.org/show_bug.cgi?id=115256

        Reviewed by Ryosuke Niwa.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        Instead of using the current paragraph as the context (which stops at
        line breaks), get a few lines before and after the point, so that the
        context contains at least four lines in each direction.
        This way the Dictionary will be able to look up things that extend past
        the current line.

2013-05-24  Anders Carlsson  <andersca@apple.com>

        Intermittent crash when typing in Address Bar
        https://bugs.webkit.org/show_bug.cgi?id=116728
        <rdar://problem/13976781>

        Reviewed by Sam Weinig.

        If a web process connection has been removed from the storage manager because we disconnected it
        since there were no more active pages associated with the web process, we'll fail to find it here
        so just return early instead of crashing.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::destroyStorageMap):

2013-05-24  Andreas Kling  <akling@apple.com>

        Typing in Safari's unified field causes unnecessary web content repaints.
        <http://webkit.org/b/116703>

        Reviewed by Andy Estes.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::countStringMatches):

            Call WebCore::Page::countMatchesForText() instead of markAllMatchesForText(). If the search string
            is found inside the page content, the renderer containing that text will no longer be repainted.

2013-05-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [WK2][EFL][QT] Build break after r150610
        https://bugs.webkit.org/show_bug.cgi?id=116699

        Reviewed by Csaba Osztrogonác.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin): Initialized pluginProcessSandboxPolicy.

2013-05-23  Anders Carlsson  <andersca@apple.com>

        Shim Flash plug-in to allow its updater to run
        https://bugs.webkit.org/show_bug.cgi?id=116692
        <rdar://problem/13938510>

        Reviewed by Sam Weinig.

        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::replacedNSConcreteTask_launch):
        (WebKit::initializeCocoaOverrides):
        Patch -[NSConcreteTask launch] to call PluginProcess::launchProcess.

        (WebKit::PluginProcess::launchProcess):
        Send a LaunchProcess message to the UI process.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        * UIProcess/Plugins/PluginProcessProxy.h:
        Remove PluginProcessProxy::didReceiveMessage.

        (PluginProcessProxy):
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        Add LaunchProcess message and remove LegacyReceiver attribute.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::isFlashUpdater):
        Helper function to determine whether the process is the flash updater.

        (WebKit::shouldLaunchProcess):
        Return whether we should launch this process.

        (WebKit::PluginProcessProxy::launchProcess):
        Determine if we should launch this process and then do so.

2013-05-23  Anders Carlsson  <andersca@apple.com>

        Don't run all plug-ins unsandboxed
        https://bugs.webkit.org/show_bug.cgi?id=116690
        <rdar://problem/13975569>

        Reviewed by Jessie Berlin.

        Remove debugging code.

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

2013-05-23  Anders Carlsson  <andersca@apple.com>

        Crash in convertMainResourceLoadToDownload when downloading file by option-return
        https://bugs.webkit.org/show_bug.cgi?id=116451

        Reviewed by Andreas Kling.

        If the main resource loader is null, create a new download instead since there's no existing loader to convert.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::convertMainResourceLoadToDownload):

2013-05-22  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13849260> Sandbox violations reading .CFUserTextEncoding

        Reviewed by Dan Bernstein.

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

2013-05-23  Gavin Barraclough  <barraclough@apple.com>

        Move posix_spawn onto a zero delay timer
        https://bugs.webkit.org/show_bug.cgi?id=116682

        Reviewed by Anders Carlson.

        <rdar://problem/13973468>

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        (ReexecInfo):
            - struct to hold info from the XPC message.
        (WebKit::reexec):
            - moved call to posix_spawn out to this helper.
        (WebKit::reexecCallBack):
            - calls reexec.
        (WebKit::XPCServiceEventHandler):
            - removed call to posix_spawn; schedule a call to reexecCallBack.

2013-05-23  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Fix generating-forwarding-headers rule after r150460
        https://bugs.webkit.org/show_bug.cgi?id=116659

        Reviewed by Christophe Dumez.

        * CMakeLists.txt: Typo fix.

2013-05-23  Anton Obzhirov  <a.obzhirov@samsung.com>

        [GTK] Remote Web Inspector sometimes won't serve any content
        https://bugs.webkit.org/show_bug.cgi?id=116225

        Reviewed by Gustavo Noronha Silva.

        Added an option to use environment variable to set up path to
        inspector server files. Implementation is similar to InspectorClientGtk
        implementation.

        * UIProcess/InspectorServer/WebInspectorServer.h:
        (WebInspectorServer):
        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
        (WebKit::WebInspectorServer::platformResourceForPath):
        (WebKit::WebInspectorServer::inspectorServerFilesPath):
        (WebKit):

2013-05-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Use WK2 C API in ewk_view_pagination_mode_set|get
        https://bugs.webkit.org/show_bug.cgi?id=116657

        Reviewed by Christophe Dumez.

        WKPageGet|SetPaginationMode APIs is present in WK2 C APIs. So, we need to use them for
        ewk_view_pagination_mode_set|get.

        Besides we don't need to use WebCore namespace anymore.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_pagination_mode_set):
        (ewk_view_pagination_mode_get):

2013-05-23  Roland Takacs  <rtakacs@inf.u-szeged.hu>

        Support frame instrumentation for coordinated graphics
        https://bugs.webkit.org/show_bug.cgi?id=115260

        Reviewed by Andreas Kling.

        Enabled supportsFrameInstrumentation on ports that use coordinated graphics
        by calling didBeginFrame().

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::supportsFrameInstrumentation):
        (WebKit):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::syncDisplayState):

2013-05-22  Dean Jackson  <dino@apple.com>

        Don't snapshot plugins that can't be snapshotted
        https://bugs.webkit.org/show_bug.cgi?id=116490

        Reviewed by Tim Horton.

        Some plugins, such as QuickTime, don't support snapshotting. We're
        planning on another way to capture snapshots, but in the meantime make
        sure that they don't fail to initialise because they were told to
        not use accelerated rendering.

        Expose a new message on the plugins so that they can tell the PluginView
        if they support snapshotting or not.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::supportsSnapshotting): New method.
        * PluginProcess/PluginControllerProxy.h: Ditto.
        * PluginProcess/PluginControllerProxy.messages.in: Message signature.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Add supportsSnapshotting.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Ditto.
        * WebProcess/Plugins/Plugin.h: Ditto - pure virtual here.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::supportsSnapshotting): Send the message to the plugin process and return the results.
        * WebProcess/Plugins/PluginProxy.h:

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin): If the snapshotting plugin has a layer, make
            sure to add it to the tree.
        (WebKit::PluginView::isAcceleratedCompositingEnabled): Snapshotting plugins can use
            accelerated compositing, just like normal plugins.
        (WebKit::PluginView::pluginSnapshotTimerFired): If the plugin doesn't allow snapshotting,
            immediately restart it.

2013-05-22  Anders Carlsson  <andersca@apple.com>

        Fix crash when closing a page that's trying to access session storage
        https://bugs.webkit.org/show_bug.cgi?id=116634
        <rdar://problem/13904054>

        Reviewed by Geoffrey Garen.

        It is possible for the StorageManager to get messages from a web page that has already been closed by the UI process.
        If that happens, just ignore the messages.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::getValues):
        (WebKit::StorageManager::setItem):
        (WebKit::StorageManager::removeItem):
        (WebKit::StorageManager::clear):
        (WebKit::StorageManager::destroySessionStorageNamespaceInternal):

2013-05-22  Alexey Proskuryakov  <ap@apple.com>

        Crashes in NetworkProcess due to incorrect private browsing session tracking
        https://bugs.webkit.org/show_bug.cgi?id=116628

        Reviewed by Brady Eidson.

        The current API for private browsing makes it extremely difficult to track sessions.
        Private browsing is enabled via WKPreferences, but the session is shared, so it
        has to be maintained while there is any chance that any page group anywhere still
        needs it.

        This patch fixes some of the issues, but ultimately, I think that we'll just need
        to deprecate and replace the API.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp: (WebKit::storageSession):
        There are valid scenarios where privateBrowsingEnabled is true, but there is no
        private browsing session. Handle that without crashing, although this unfortunately
        means that it will be harder to spot logic errors when using a wrong session.
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL): Removed an obsolete FIXME.

        * NetworkProcess/mac/RemoteNetworkingContext.h: Changed privateBrowsingSession()
        to return a pointer, as no caller could know when it was safe to call it.

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::storageSession): Handle the case where private
        browsing session is unexpectedly missing without crashing.
        (WebKit::RemoteNetworkingContext::privateBrowsingSession): Changed to return a pointer.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::ensureNetworkProcess):
        Actually initialize privateBrowsingEnabled creation parameter. It would be very
        difficult to figure out 100% reliably whether NetworkProcess needs a private browsing
        session with the current API, but for existing clients, looking at
        m_privateBrowsingEnterCount is good enough. Certainly better than not initializing.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled): Added a FIXME.

2013-05-22  Tim Horton  <timothy_horton@apple.com>

        [wk2] Should be able to make tiled WKViews clip to the view's exposed rect without using autolayout
        https://bugs.webkit.org/show_bug.cgi?id=116625
        <rdar://problem/13962816>

        Reviewed by Anders Carlsson.

        The two modes are not dependent; it should be possible to enable
        clips-to-exposed-rect without using autolayout. This enables apps to
        make very large tiled WKViews that don't create tiles for the whole
        area of the view (and also disables scrolling, since that is currently
        incompatible with clipping to the exposed rect).

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setFrameSize:]):
        (-[WKView _updateWindowAndViewFrames]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (-[WKView enableFrameSizeUpdates]):
        (-[WKView forceAsyncDrawingAreaSizeUpdate:]):
        Rename _expandsToFitContentViaAutoLayout to _clipsToVisibleRect for accuracy.

        (-[WKView setMinimumWidthForAutoLayout:]):
        Factor clips-to-sisible-rect toggle out into setShouldClipToVisibleRect.

        (-[WKView shouldClipToVisibleRect]):
        (-[WKView setShouldClipToVisibleRect:]):
        Allow setting clips-to-visible-rect without autolayout.

        * UIProcess/API/mac/WKViewPrivate.h:
        Add shouldClipToVisibleRect property.

2013-05-22  Alexey Proskuryakov  <ap@apple.com>

        Remove unused private browsing override support
        <rdar://problem/11969491>

        Rubber-stamped by Sam Weinig.

        Private browsing override is unused, and it complicates tracking of private
        browsing sessions in UI process (in fact, it doesn't plug into this tracking at all,
        so we would just assert if we used the API).

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2013-05-22  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Change Ewk_Context_Menu_Item's parent menu to raw pointer
        https://bugs.webkit.org/show_bug.cgi?id=116549

        Reviewed by Christophe Dumez.

        A context menu item should have only a pointer to parent menu instead
        of owning parent menu.

        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        (EwkContextMenuItem::EwkContextMenuItem):
        * UIProcess/API/efl/ewk_context_menu_item_private.h:
        (EwkContextMenuItem::create):
        (EwkContextMenuItem::parentMenu):
        (EwkContextMenuItem):

2013-05-22  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed buildfix after r150484.

        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):

2013-05-21  Andreas Kling  <akling@apple.com>

        REGRESSION(r150491): WebKit2.CloseThenTerminate asserting below WebContext::disconnectProcess().
        <http://webkit.org/b/116588>

        Reviewed by Sam Weinig.

        Do an early return from WebProcessProxy::requestTermination() if there is no child process
        connection to terminate.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):

2013-05-21  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/13915556> Sluggish scrolling in web content

        Reviewed by Gavin Barraclough.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setProcessSuppressionEnabled): When process suppression is disabled, low latency is important.

2013-05-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break after r150484

        Unreviewed, fix build break on EFL, GTK.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::defaultLoadPolicyForPlugin):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):

2013-05-21  Andreas Kling  <akling@apple.com>

        PPT: Closing tab that is hung or chewing 100% CPU leaves abandoned WebProcess.
        <http://webkit.org/b/116464>
        <rdar://problem/10103795>

        Reviewed by Anders Carlsson.

        Simplify the web process sacrifice ritual. Instead of murderizing the process when its last tab closes,
        just shut down the CoreIPC connection from the UI process. The web process, upon noticing this,
        will start a 10 second watchdog timer, and if it hasn't shut down by the time it fires, well, it'll shut down.

        (WebKit::WebProcessProxy::removeWebPage):

            When the last page is removed from a WebProcessProxy, disconnect the process so that it'll die off
            eventually, even if the WebPage::Close message never gets properly handled.

        * Shared/ChildProcessProxy.h:
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::abortProcessLaunchIfNeeded):

            Added a helper to abort any in-progress launch of a new web process. Otherwise we'll have a race
            where the exiting web process may get re-used for a new tab.

        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::enableSuddenTermination):
        (WebKit::WebProcessProxy::disableSuddenTermination):

            Remove WebProcessProxy's sudden termination counter. The web process will do what it needs in
            response to the WebPage::Close message. We still forward these calls to NSProcessInfo on Mac though.

2013-05-21  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        Stop using lambdas :(

2013-05-21  Anders Carlsson  <andersca@apple.com>

        Provide an API to run sandboxed plug-ins outside of their sandbox
        https://bugs.webkit.org/show_bug.cgi?id=116578

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new overload.

        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        (WebKit::PluginProcessMainDelegate::getExtraInitializationData):
        Handle "disable-sandbox".

        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (WebKit::PluginServiceInitializerDelegate::getExtraInitializationData):
        Handle "disable-sandbox".
        
        * PluginProcess/PluginProcess.h:
        Move Type to PluginProcessAttributes and remove hash traits for type.
        
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        Update for new type name.

        (WebKit::PluginProcess::initializeSandbox):
        Return early if the sandbox is disabled.

        * Shared/Plugins/Netscape/PluginInformation.cpp:
        (WebKit::getPluginModuleInformation):
        PluginInfoStore::policyForPlugin has been renamed to PluginInfoStore::defaultLoadPolicyForPlugin.

        * Shared/Plugins/PluginModuleInfo.h:
        Add PluginModuleLoadUnsandboxed.

        * Shared/Plugins/PluginProcessAttributes.h: Added.
        Add new header with various plug-in process attributes.

        * Shared/Plugins/PluginProcessCreationParameters.h:
        Change type enum.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toWKPluginLoadPolicy):
        (WebKit::toPluginModuleLoadPolicy):
        Handle the unsandboxed enum.

        * UIProcess/API/C/WKPage.h:
        Add kWKPluginLoadPolicyLoadUnsandboxed.

        * UIProcess/Plugins/PluginInfoStore.h:
        Rename policyForPlugin to defaultLoadPolicyForPlugin.

        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::pluginProcessToken):
        Add new helper function for getting a token given plug-in attributes.

        (WebKit::PluginProcessManager::getPluginProcessConnection):
        This now takes a pluginProcessToken.

        (WebKit::PluginProcessManager::getSitesWithData):
        Make sure to call pluginProcessToken.

        (WebKit::PluginProcessManager::clearSiteData):
        Ditto.

        (WebKit::PluginProcessManager::getOrCreatePluginProcess):
        This now takes a token.

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::create):
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        Pass the PluginProcessAttributes as well as the plug-in process token.

        (WebKit::PluginProcessProxy::getLaunchOptions):
        Pass the plug-in process attributes to platformGetLaunchOptions.

        (WebKit::PluginProcessProxy::didClose):
        Pass the token to PluginProcessCrashed.

        (WebKit::PluginProcessProxy::didFinishLaunching):
        Update for type change.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::shouldBlockPlugin):
        (WebKit::PluginInfoStore::defaultLoadPolicyForPlugin):
        Rename policyForPlugin to defaultLoadPolicyForPlugin.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):
        Set the "disable-sandbox" data if needed.

        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        (WebKit::PluginProcessProxy::openPluginPreferencePane):
        Get the module info from m_pluginProcessAttributes.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        This now returns a token.

        * UIProcess/WebPageProxy.messages.in:
        FindPlugin now returns a token instead of the path.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection):
        Pass the token to the plug-in process manager.

        * UIProcess/WebProcessProxy.messages.in:
        This now takes a token.

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

        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        This now takes a token.

        * WebProcess/Plugins/PluginProcessConnection.h:
        (WebKit::PluginProcessConnection::create):
        (WebKit::PluginProcessConnection::pluginProcessToken):
        Create this with a token instead of a path and process type.

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection):
        This now takes a token.

        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
        Ditto.

        * WebProcess/Plugins/PluginProcessConnectionManager.messages.in:
        PluginProcessCrashed now takes a token.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::create):
        (WebKit::PluginProxy::PluginProxy):
        These now take tokens.

        (WebKit::PluginProxy::initialize):
        Pass the token when getting the connection.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Get the token from the UI process and pass it to the PluginProxy.

        (WebKit::WebPage::canPluginHandleResponse):
        Update now that FindPlugin returns a token.

2013-05-21  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=116372

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Add common directories to the common include list and remove UIProcess/PageViewportController.cpp
        from the source list since it should only be compiled for WebKitEFL. Instead of taking explicit forwarding-header
        dependencies accept a list of "tacked-on" dependencies for WebKit2. This allows GTK+ to specify its extra fake
        installed header step.
        * PlatformEfl.cmake: Remove common include directories and add UIProcess/PageViewportController.cpp to the source
        list. Fix up forwarding header dependencies now.
        * PlatformGTK.cmake: Added.
        * config.h: First check whether this is a CMake build and then fall back to the autotools header.

2013-05-21  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Compile everything in C++11 mode
        https://bugs.webkit.org/show_bug.cgi?id=116452

        Reviewed by Anders Carlsson.

        * GNUmakefile.am: Remove the -std=c++11 flags from the various CPPFLAGS lists, the mode is now specified
        by default for all the C++ source code in SetupCompilerFlags.m4.

2013-05-21  Jessie Berlin  <jberlin@apple.com>

        Expose a way to know when forms are added to a page or when form controls are added to a form
        in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=116334

        Reviewed by Alexey Proskuryakov.

        Add shouldNotifyOnFormChanges and didAssociateFormControls to the WKBundlePageFormClient.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        Add the new callbacks as part of version 2 of the WKBundlePageFormClient.

        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::didAssociateFormControls):
        Pass the message along to the client if the client has a handler.
        (WebKit::InjectedBundlePageFormClient::shouldNotifyOnFormChanges):
        Ditto.
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didAssociateFormControls):
        Tell the injected bundle form client for the page.
        (WebKit::WebChromeClient::shouldNotifyOnFormChanges):
        Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2013-05-21  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] Fix Mountain Lion builds after r150277.
        https://bugs.webkit.org/show_bug.cgi?id=116467

        Reviewed by Jocelyn Turcotte.

        * Shared/API/c/WKBase.h:

2013-05-20  Lucas Forschler  <lforschler@apple.com>

    Rollout r150398.

2013-05-20  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Fix concatenations of string literals that are not C++11-compliant
        https://bugs.webkit.org/show_bug.cgi?id=116449

        Reviewed by Martin Robinson.

        Fix the problematic concatenations of string literals so they are compilable under the C++11 standard. This
        is simply a matter of separating the string and the string literal that are being concatenated with a space.

        * UIProcess/API/gtk/tests/TestPrinting.cpp:
        (testPrintOperationPrint):
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
        (methodCallCallback):

2013-05-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r150384.
        http://trac.webkit.org/changeset/150384
        https://bugs.webkit.org/show_bug.cgi?id=116513

        Not ready for primetime. (Requested by kling on #webkit).

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::removeWebPage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2013-05-20  Martin Robinson  <mrobinson@igalia.com>

        Remove SharedMemoryGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=116457

        Reviewed by Andreas Kling.

        * Platform/gtk/SharedMemoryGtk.cpp: Removed.

2013-05-20  Jessie Berlin  <jberlin@apple.com>

        Expose a way to know when forms are added to a page or when form controls are added to a form
        in the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=116334

        Reviewed by Alexey Proskuryakov.

        Add shouldNotifyOnFormChanges and didAssociateFormControls to the WKBundlePageFormClient.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        Add the new callbacks as part of version 2 of the WKBundlePageFormClient.

        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::didAssociateFormControls):
        Pass the message along to the client if the client has a handler.
        (WebKit::InjectedBundlePageFormClient::shouldNotifyOnFormChanges):
        Ditto.
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didAssociateFormControls):
        Tell the injected bundle form client for the page.
        (WebKit::WebChromeClient::shouldNotifyOnFormChanges):
        Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2013-05-20  Tim Horton  <timothy_horton@apple.com>

        Clients should have a way to extend rendering suppression
        https://bugs.webkit.org/show_bug.cgi?id=116463
        <rdar://problem/13738496>

        Reviewed by Andy Estes.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageExtendIncrementalRenderingSuppression): Added.
        (WKBundlePageStopExtendingIncrementalRenderingSuppression): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        These only have any effect if SuppressesIncrementalRendering is also enabled.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        Inform the FrameView if there are any outstanding rendering suppression tokens.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::extendIncrementalRenderingSuppression):
        Return the next available rendering suppression token.
        Add it to the list of active tokens.
        Inform the FrameView that we want to suppress rendering.

        (WebKit::WebPage::stopExtendingIncrementalRenderingSuppression):
        Remove the given token from the list of active tokens.
        Un-suppress rendering if appropriate.

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::shouldExtendIncrementalRenderingSuppression):
        Return if there are any active rendering suppression tokens.

2013-05-20  Andreas Kling  <akling@apple.com>

        PPT: Closing tab that is hung or chewing 100% CPU leaves abandoned WebProcess.
        <http://webkit.org/b/116464>
        <rdar://problem/10103795>

        Reviewed by Anders Carlsson.

        Give the web process a 10 second chance to exit nicely after closing the last tab belonging to it.
        This code only runs if there was something on the page (e.g an unload/beforeunload event handler)
        preventing the UI process from killing it right away.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::forcefulTerminationTimerFired):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2013-05-20  Anders Carlsson  <andersca@apple.com>

        Add helper function for converting a KeyedCodingValue to a CFTypeRef
        https://bugs.webkit.org/show_bug.cgi?id=116461

        Reviewed by Tim Horton.

        * Shared/cf/KeyedCodingValueCF.cpp: Added.
        * Shared/cf/KeyedCodingValueCF.h: Added.

        * WebKit2.xcodeproj/project.pbxproj:

2013-05-20  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out a new KeyedEncoder class
        https://bugs.webkit.org/show_bug.cgi?id=116456

        Reviewed by Sam Weinig.

        This class (and it's coming counterpart, KeyedDecoder) will be used for serializing
        object graphs to a tree-like structure of dictionaries. It is up to individual ports to
        serialize them further (for example, on Mac they could be serialized to CFPropertyList objects).
        
        This will be used for serializing session storage state but I hope that it can be used for serializing
        back forward state in the future as our current implementation of back forward state serialization
        is fragile and depends on our IPC layer's binary encoding(!).
        
        * Shared/KeyedCodingValue.h: Added.
        * Shared/KeyedEncoder.cpp: Added.
        * Shared/KeyedEncoder.h: Added.

        * WebKit2.xcodeproj/project.pbxproj:

2013-05-19  Sam Weinig  <sam@webkit.org>

        Bump WKBundlePageLoaderClient version number so as not to break some clients
        https://bugs.webkit.org/show_bug.cgi?id=116426

        Reviewed by Anders Carlsson.

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2013-05-19  Anders Carlsson  <andersca@apple.com>

        Remove link prerendering code
        https://bugs.webkit.org/show_bug.cgi?id=116415

        Reviewed by Darin Adler.

        This code was only used by Chromium and is dead now.

        * Configurations/FeatureDefines.xcconfig:

2013-05-18  Anders Carlsson  <andersca@apple.com>

        Simplify the StorageArea setter functions
        https://bugs.webkit.org/show_bug.cgi?id=116402

        Reviewed by Sam Weinig.

        Remove security checking code that lives in Storage now.

        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::setItem):
        (WebKit::StorageAreaImpl::removeItem):
        (WebKit::StorageAreaImpl::clear):
        * WebProcess/Storage/StorageAreaImpl.h:

2013-05-18  Sam Weinig  <sam@webkit.org>

        Fix some builds.

        * UIProcess/API/mac/WKTypeRefWrapper.mm:

2013-05-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r150305): WebKit2 build broken with INDEXED_DATABASE enabled
        https://bugs.webkit.org/show_bug.cgi?id=116389

        Reviewed by Martin Robinson.

        There's no longer WebKeyValueStorageManager in the web process
        after r150305.

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

2013-05-17  Sam Weinig  <sam@webkit.org>

        Add a way to pass WebKit2 WKTypeRefs in Objective-C style user data messages
        https://bugs.webkit.org/show_bug.cgi?id=116345

        Reviewed by Anders Carlsson.

        In order to efficiently send a WKImageRef to another process when using the
        Objective-C WKConnection (or other user data messages), we need a way to encode
        WKTypeRefs in the objective-c object graph. Thus was born WKTypeRefWrapper.

        * Shared/mac/ObjCObjectGraphCoders.mm:
        (WebKit::typeFromObject):
        (WebKit::WebContextObjCObjectGraphEncoderImpl::encode):
        (WebKit::WebContextObjCObjectGraphDecoderImpl::decode):
        (WebKit::InjectedBundleObjCObjectGraphEncoderImpl::encode):
        (WebKit::InjectedBundleObjCObjectGraphDecoderImpl::decode):
        * UIProcess/API/mac/WKTypeRefWrapper.h: Added.
        * UIProcess/API/mac/WKTypeRefWrapper.mm: Added.
        (-[WKTypeRefWrapper initWithObject:]):
        (-[WKTypeRefWrapper object]):
        * WebKit2.xcodeproj/project.pbxproj:

2013-05-18  Anders Carlsson  <andersca@apple.com>

        Simplify StorageArea getter functions
        https://bugs.webkit.org/show_bug.cgi?id=116399

        Reviewed by Sam Weinig.

        Remove security and private browsing checks.

        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::key):
        (WebKit::StorageAreaImpl::item):
        (WebKit::StorageAreaImpl::contains):
        * WebProcess/Storage/StorageAreaImpl.h:

2013-05-18  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Replace *_LIBRARY_NAME with *_OUTPUT_NAME
        https://bugs.webkit.org/show_bug.cgi?id=114554

        Reviewed by Gyuyoung Kim.

        Using variables as target names is very uncommon in CMake.
        The usual way to specify the name of the resulting binary
        is to set the OUTPUT_NAME target property.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * efl/ewebkit2.pc.in:

2013-05-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GTK port off legacy clipboard
        https://bugs.webkit.org/show_bug.cgi?id=116221

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp: Remove ClipboardGtk.h
        include.
        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag): Get the DataObjectGtk from the
        Pasteboard associated to the given Clipboard.

2013-05-18  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Refactor ewk_view_custom_encoding_set/get API
        https://bugs.webkit.org/show_bug.cgi?id=116386

        Reviewed by Christophe Dumez.

        Refactor the API to handle 'const char*' parameter in right way and
        enable the unit test which was disabled in r136230 as there is no assertion now.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::setCustomTextEncodingName):
        * UIProcess/API/efl/EwkView.h:
        (EwkView::customTextEncodingName):
        (EwkView):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_custom_encoding_set):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2013-05-18  Csaba Osztrogonác  <ossy@webkit.org>

        [CMake] Unreviewed speculative build fix after r150305 and r150306.

        * CMakeLists.txt:

2013-05-18  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][WK2] Unreviewed build fix after r150305 and r150306.

        * DerivedSources.pri:
        * Target.pri:

2013-05-18  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for the GTK port after r150305 and r150306.

        * GNUmakefile.list.am:

2013-05-17  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13819878> Disable SharedWorker when in multiple web process model
        https://bugs.webkit.org/show_bug.cgi?id=116359

        The condition was accidentally negated, fixing.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::isAvailable):

2013-05-17  Gavin Barraclough  <barraclough@apple.com>

        Only allow 1 WebProcess to hold a PageCache
        https://bugs.webkit.org/show_bug.cgi?id=116368
        <rdar://problem/13392600>

        Reviewed by Geoff Garen & Anders Carlson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::processDidSaveToPageCache):
        (WebKit):
        (WebKit::WebContext::disconnectProcess):
        * UIProcess/WebContext.h:
            - Added m_processWithPageCache, only allow one process to keep a PageCache.
        (WebContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didSaveToPageCache):
        (WebKit):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
            - Forward didSaveToPageCache to the WebProcessProxy.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addBackForwardItem):
        (WebKit::WebProcessProxy::didSaveToPageCache):
        (WebKit):
        (WebKit::WebProcessProxy::releasePageCache):
            - Forward releasePageCache to the WebProcess.
            - Forward didSaveToPageCache to the WebContext.
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didSaveToPageCache):
            - Forward didSaveToPageCache to the WebPageProxy.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::releasePageCache):
        (WebKit):
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/WebProcess.messages.in:
            - Added 'ReleasePageCache' to instruct a web process to drop any cached pages.

2013-05-17  Anders Carlsson  <andersca@apple.com>

        Share code between WebKit1 and WebKit2 StorageArea subclasses
        https://bugs.webkit.org/show_bug.cgi?id=116367

        Reviewed by Andreas Kling.

        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::length):
        Remove code that's now in Storage::length.

        (WebKit::StorageAreaImpl::storageType):
        Make this a virtual member function.

        * WebProcess/Storage/StorageAreaImpl.h:

2013-05-17  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13819878> Disable SharedWorker when in multiple web process model
        https://bugs.webkit.org/show_bug.cgi?id=116359

        Reviewed by Anders Carlsson.

        Implement SharedWorkerStrategy::isAvailable.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::isAvailable):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2013-05-17  Beth Dakin  <bdakin@apple.com>

        Headers and footers will sometimes disappear and re-appear during page loads
        https://bugs.webkit.org/show_bug.cgi?id=116336
        -and corresponding-
        <rdar://problem/13886753>

        Reviewed by Simon Fraser.

        This patch changes the WebCore-level API that WebKit uses to create a banner. 
        Specifically this patch removes FrameView::setWantsLayerForHeader(), which created 
        and returned a layer. Instead, WK2 will call Page::addHeaderWithHeight(). When the 
        layer has been created, it will call back into WK2 via ChromeClient. This will 
        allow WebCore to re-create the header/footer layers as needed whenever the 
        FrameView/RenderLayerCompositor have been destroyed and recreated.

        Send the layers over to PageBanner.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::didAddHeaderLayer):
        (WebKit::WebChromeClient::didAddFooterLayer):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

        PageBanner::addToPage() now does much less work since it can’t get the parent 
        layer right away. The work that is used to do once it had the parent layer is now 
        performed in didAddParentLayer()
        * WebProcess/WebPage/PageBanner.cpp:
        (WebKit::PageBanner::didAddParentLayer):
        * WebProcess/WebPage/PageBanner.h:
        * WebProcess/WebPage/mac/PageBannerMac.mm:
        (WebKit::PageBanner::addToPage):
        (WebKit::PageBanner::didAddParentLayer):

2013-05-17  Anders Carlsson  <andersca@apple.com>

        Rename WebKeyValueStorageManagerProxy to WebKeyValueStorageManager
        https://bugs.webkit.org/show_bug.cgi?id=116361

        Reviewed by Andreas Kling.

        There's nothing proxy about this class anymore!

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        * UIProcess/WebKeyValueStorageManager.cpp: Renamed from Source/WebKit2/UIProcess/WebKeyValueStorageManagerProxy.cpp.
        * UIProcess/WebKeyValueStorageManager.h: Renamed from Source/WebKit2/UIProcess/WebKeyValueStorageManagerProxy.h.
        * WebKit2.xcodeproj/project.pbxproj:

2013-05-17  Anders Carlsson  <andersca@apple.com>

        Remove dead local storage code
        https://bugs.webkit.org/show_bug.cgi?id=116360

        Reviewed by Beth Dakin.

        Storage is all handled in the UI process now so we no longer need a WebKeyValueStorageManager in the web process.

        * DerivedSources.make:
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        (WebKit):
        (WebKit::didGetKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebKeyValueStorageManagerProxy.messages.in: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebKeyValueStorageManager.cpp: Removed.
        * WebProcess/Storage/WebKeyValueStorageManager.h: Removed.
        * WebProcess/Storage/WebKeyValueStorageManager.messages.in: Removed.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):

2013-05-17  Anders Carlsson  <andersca@apple.com>

        Use the UI process storage manager for deleting local storage data
        https://bugs.webkit.org/show_bug.cgi?id=116358
        <rdar://problem/13852829>

        Reviewed by Andreas Kling.

        * Shared/WebSecurityOrigin.h:
        (WebKit::WebSecurityOrigin::protocol):
        (WebKit::WebSecurityOrigin::host):
        (WebKit::WebSecurityOrigin::databaseIdentifier):
        (WebKit::WebSecurityOrigin::toString):
        Remove unneeded consts.

        (WebKit::WebSecurityOrigin::securityOrigin):
        Add getter.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::close):
        deleteEmptyDatabaseWithOrigin has been renamed to deleteDatabaseWithOrigin.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::deleteDatabaseWithOrigin):
        Rename since this is no longer used only for empty databases.

        (WebKit::LocalStorageDatabaseTracker::deleteAllDatabases):
        Loop over the tracker database and delete all database files.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::clear):
        Clear the map, close the database and tell all event listeners to reset their caches.

        (WebKit::StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin):
        Loop over all storage areas and call clear on those matching the security origin.

        (WebKit::StorageManager::LocalStorageNamespace::clearAllStorageAreas):
        Loop over all storage areas and call clear on them.
        
        (WebKit::StorageManager::deleteEntriesForOrigin):
        Dispatch deleteEntriesForOriginInternal on the work queue.

        (WebKit::StorageManager::deleteAllEntries):
        Dispatch deleteAllEntriesInternal on the work queue.

        (WebKit::StorageManager::deleteEntriesForOriginInternal):
        Call clearStorageAreasMatchingOrigin on all local storage namespaces and then delete the database.

        (WebKit::StorageManager::deleteAllEntriesInternal):
        Call clearAllStorageAreas on all local storage namespaces and then delete all databases.

        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::deleteEntriesForOrigin):
        Call out to the storage manager.

        (WebKit::WebKeyValueStorageManagerProxy::deleteAllEntries):
        Ditto.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::clearCache):
        Call resetValues which will null out the storage map.

        * WebProcess/Storage/StorageAreaMap.messages.in:
        Add ClearCache message.

2013-05-17  Anders Carlsson  <andersca@apple.com>

        Only import local storage items from the database once
        https://bugs.webkit.org/show_bug.cgi?id=116354

        Reviewed by Andreas Kling.

        We import items from the database over and over, when we only want to do it once. Use a 
        boolean flag to guard against doing it more than once. 
        
        Also, rename importItemsFromDatabase to openDatabaseAndImportItemsIfNeeded since it now
        also opens the database (even if it doesn't need to import anything). This is preparation for an
        upcoming patch where the database will be closed when it's cleared.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        (WebKit::StorageManager::StorageArea::StorageArea):
        (WebKit::StorageManager::StorageArea::setItem):
        (WebKit::StorageManager::StorageArea::removeItem):
        (WebKit::StorageManager::StorageArea::clear):
        (WebKit::StorageManager::StorageArea::items):
        (WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded):

2013-05-17  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13869765> Lion: Crashes in islcCanLoadInputMethodFromBundleID.

        Reviewed by Anders Carlsson.

        * WebProcess/com.apple.WebProcess.sb.in: Allow text input directories.

2013-05-17  Anders Carlsson  <andersca@apple.com>

        WKKeyValueStorageManagerGetKeyValueStorageOrigins should get origins from the UI process
        https://bugs.webkit.org/show_bug.cgi?id=116346
        <rdar://problem/13852829>

        Reviewed by Andreas Kling.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::origins):
        New helper function to return all the tracked origins.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageManager):
        Initialize the UTF-8 encoding.

        (WebKit::StorageManager::getOrigins):
        Call getOriginsInternal on our queue.

        (WebKit::callCallbackFunction):
        Helper function for calling the callback function.

        (WebKit::StorageManager::getOriginsInternal):
        Get the origins and make sure we call the callback with the given function dispatcher.

        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::didGetKeyValueStorageOriginsCallback):
        Construct the array of WebSecurityOrigin objects and call the callback.

        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        Call StorageManager::getOrigins.

2013-05-16  Alexey Proskuryakov  <ap@apple.com>

        Text input is largely broken when there are subframes loading
        http://bugs.webkit.org/show_bug.cgi?id=59121
        <rdar://problem/9320468>

        Reviewed by Darin Adler.

        * UIProcess/PageClient.h:
        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::updateSecureInputState): Separated secure input state
        updating into a separate function. Removed updateTextInputState, we don't need
        to go through PageClient to implement its behavior at all.
        (WebKit::PageClientImpl::dismissDictionaryLookupPanel): Added a FIXME.

        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewInternal.h:
        Removed _updateTextInputStateIncludingSecureInputState.

        * UIProcess/WebPageProxy.h: Added m_temporarilyClosedComposition, which helps
        to figure out that WebCore decided to close a composition. The issue is that WebCore
        would first send an EditorState with hasComposition set to false, and with
        shouldIgnoreCompositionSelectionChange set to true, at which time we forget the
        previous m_editorState, but can't make any decisions based on this transient state.
        We should find a way to simplify this (maybe not send these updates with
        shouldIgnoreCompositionSelectionChange at all?)

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_temporarilyClosedComposition.
        (WebKit::WebPageProxy::didCommitLoadForFrame): Removed the code to kill a composition
        when any frame commits a load, which made no sense (along with surrounding code,
        which will unfortunately survive longer).
        (WebKit::WebPageProxy::editorStateChanged): Implemented state updating here,
        we don't need to go to WKView.mm to implement this logic. Figure out when WebCore
        discards a composition, and notify input methods about this.
        (WebKit::WebPageProxy::resetStateAfterProcessExited): Reset m_temporarilyClosedComposition.
        Added some FIXMEs.

2013-05-17  Manuel Rego Casasnovas  <rego@igalia.com>

        [WK2] Add support for selectTrailingWhitespaceEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=112426

        Reviewed by Ryosuke Niwa.

        * Shared/WebPreferencesStore.h:
        (WebKit): Add macro for selectTrailingWhitespaceEnabled.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetSelectTrailingWhitespaceEnabled):
        (WKPreferencesGetSelectTrailingWhitespaceEnabled): Implement methods
        using the new setting.
        * UIProcess/API/C/WKPreferencesPrivate.h: Add new methods headers.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::isSelectTrailingWhitespaceEnabled): Implement
        method delegating in WebPage.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Set
        selectTrailingWhitespaceEnabled setting.
        (WebKit::WebPage::setSmartInsertDeleteEnabled): Set
        selectTrailingWhitespaceEnabled as they are mutually exclusive.
        (WebKit):
        (WebKit::WebPage::isSelectTrailingWhitespaceEnabled): Implement method
        using settings.
        (WebKit::WebPage::setSelectTrailingWhitespaceEnabled): Implement method
        using settings and set smartInsertDeleteEnabled as they are mutually
        exclusive.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add new methods headers.

2013-05-17  Brady Eidson  <beidson@apple.com>

        Fix crash introduced by http://trac.webkit.org/changeset/150282
        Followup to https://bugs.webkit.org/show_bug.cgi?id=116253

        Reviewed by Andreas Kling.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedFrameChanged): Frame might be null.

2013-05-17  Brady Eidson  <beidson@apple.com>

        Replace WebFrameLoaderClient static_casts with a function that might return null.
        https://bugs.webkit.org/show_bug.cgi?id=116253

        The general approach here is:
        1 - Introduce a toWebFrameLoaderClient() function to convert FrameLoaderClients, and that may return null.
        2 - Adopt toWebFrameLoaderClient() everywhere we used to do a direct static_cast<WebFrameLoaderClient*>
        3 - In functions that already support a "return 0" scenario, a failed cast results in a return 0.
        4 - In other functions that assume no failure to get the WebFrameLoaderClient, add an ASSERT.

        Reviewed by Alexey Proskuryakov.

        Add the utility function to cast:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebKit::toWebFrameLoaderClient):

        Adopt it everywhere:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::documentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlFrameElementContentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlIFrameElementContentFrame):

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        (WebKit::InjectedBundleDOMWindowExtension::frame):

        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::frame):
        (WebKit::InjectedBundleHitTestResult::targetFrame):

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

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::webPage):
        (WebKit::PluginView::performFrameLoadURLRequest):

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedNodeChanged):
        (WebKit::WebChromeClient::focusedFrameChanged):
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::print):
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::runOpenPanel):

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::textFieldDidBeginEditing):
        (WebKit::WebEditorClient::textFieldDidEndEditing):
        (WebKit::WebEditorClient::textDidChangeInTextField):
        (WebKit::WebEditorClient::textDidChangeInTextArea):
        (WebKit::WebEditorClient::doTextFieldCommandFromEvent):
        (WebKit::WebEditorClient::textWillBeDeletedInTextField):

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSendSubmitEvent):
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::contentsAsString):
        (WebKit::WebFrame::parentFrame):
        (WebKit::WebFrame::childFrames):
        (WebKit::WebFrame::frameForContext):
        (WebKit::WebFrameFilter::shouldIncludeSubframe):

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

2013-05-17  Sam Weinig  <sam@webkit.org>

        Expose new load-with-userData API to Objective-C
        https://bugs.webkit.org/show_bug.cgi?id=116335

        Reviewed by Anders Carlsson.

        - Adds loadRequest:userData:, loadFileURL:restrictToFilesWithin:userData:, loadHTMLString:baseURL:userData:
          loadData:MIMEType:textEncodingName:baseURL:, and loadData:MIMEType:textEncodingName:baseURL:userData.
        - Adds a WKObjCTypeWrapperRef (which is a ObjCObjectGraph under the covers) to allow the userData to be unwrapped
          in the injected bundles willLoadURLRequest and willLoadDataRequest C-SPI callbacks.

        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKSharedAPICast.h:
        * Shared/API/c/mac/WKBaseMac.h: Added.
        * Shared/API/c/mac/WKObjCTypeWrapperRef.h: Added.
        * Shared/API/c/mac/WKObjCTypeWrapperRef.mm: Added.
        (WKObjCTypeWrapperGetTypeID):
        (WKObjCTypeWrapperCreate):
        (WKObjCTypeWrapperGetObject):
        * UIProcess/API/mac/WKBrowsingContextController.h:
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (+[WKBrowsingContextController registerSchemeForCustomProtocol:]):
        (+[WKBrowsingContextController unregisterSchemeForCustomProtocol:]):
        (-[WKBrowsingContextController loadRequest:]):
        (-[WKBrowsingContextController loadRequest:userData:]):
        (-[WKBrowsingContextController loadFileURL:restrictToFilesWithin:]):
        (-[WKBrowsingContextController loadFileURL:restrictToFilesWithin:userData:]):
        (-[WKBrowsingContextController loadHTMLString:baseURL:]):
        (-[WKBrowsingContextController loadHTMLString:baseURL:userData:]):
        (-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:]):
        (-[WKBrowsingContextController loadData:MIMEType:textEncodingName:baseURL:userData:]):
        * WebKit2.xcodeproj/project.pbxproj:

2013-05-17  Sam Weinig  <sam@webkit.org>

        Add WKPageLoadData and WKPageLoadDataWithUserData SPI to support loading arbitrary data blobs
        https://bugs.webkit.org/show_bug.cgi?id=116325

        Reviewed by Simon Fraser.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadData):
        (WKPageLoadDataWithUserData):
        Add new SPI.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadData):
        * UIProcess/WebPageProxy.h:
        Pipe through to the WebProcess.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadHTMLString):
        (WebKit::WebPage::loadAlternateHTMLString):
        (WebKit::WebPage::loadPlainTextString):
        (WebKit::WebPage::loadWebArchiveData):
        Rename existing loadData function to loadDataImpl (I hate it) to avoid overload conflict
        from IPC magic.


2013-05-17  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Fix sub menu initialization in ewk_context_menu_item
        https://bugs.webkit.org/show_bug.cgi?id=116321

        Reviewed by Christophe Dumez.

        During sub menu creation, after initializing m_parentMenu, parentMenu
        pointer became null which may cause segfaults. This patch fixes it by
        using m_parentMenu.

        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        (EwkContextMenuItem::EwkContextMenuItem):

2013-05-17  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Support sub menu in ewk context menus
        https://bugs.webkit.org/show_bug.cgi?id=114729

        Reviewed by Christophe Dumez.

        Added submenu support in EwkContextMenu and an API function to receive
        Ewk_Context_Menu from submenu context menu item. A test case was added
        for new API function.
        EwkContextMenu is now an EwkObject allowing multiple instances of submenu
        to be used in different submenu type context menu items.

        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        (EwkContextMenuItem::EwkContextMenuItem):
        (ewk_context_menu_item_new):
        (ewk_context_menu_item_parent_menu_get):
        (ewk_context_menu_item_submenu_get):
        * UIProcess/API/efl/ewk_context_menu_item.h:
        * UIProcess/API/efl/ewk_context_menu_item_private.h:
        (EwkContextMenuItem::create):
        (EwkContextMenuItem::parentMenu):
        (EwkContextMenuItem::subMenu):
        (EwkContextMenuItem):
        * UIProcess/API/efl/ewk_context_menu_private.h:
        (EwkContextMenu::ewkView):
        (EwkContextMenu):
        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp:
        (showContextMenu):

2013-05-17  Zoltan Arvai  <zarvai@inf.u-szeged.hu>, Ádám Kallai  <kadam@inf.u-szeged.hu>

        [Qt] Unreviewed build fix.

        Add missing Qt specific initializer for willLoadURLRequest and willLoadDataRequest.

        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):

2013-05-16  Beth Dakin  <bdakin@apple.com>

        Remove WKBundlePageGetHeaderLayer/Footer SPI
        https://bugs.webkit.org/show_bug.cgi?id=116254

        Reviewed by Benjamin Poulain.

        We should remove the Remove WKBundlePageGetHeaderLayer/Footer SPI. It was only 
        recently added and have been replaced by WKBundlePageSetHeaderBanner/Footer.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePagePrivateMac.h: Removed.
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePagePrivateMac.mm: Removed.
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit):
        (WebKit::WebPage::updateHeaderAndFooterLayersForDeviceScaleChange):

2013-05-14  Sam Weinig  <sam@webkit.org>

        Add variants of the loading APIs that take user data and a way for the injected bundle to find out about them
        https://bugs.webkit.org/show_bug.cgi?id=116132

        Reviewed by Anders Carlsson.

        Adds "WithUserData" versions of all the load APIs and two new WKBundlePageLoaderClient functions,
        willLoadURLRequest and willLoadDataRequest to let the bundle access them.

        Adds WebKit2WillLoadTest.* API tests.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageLoadURLWithUserData):
        (WKPageLoadURLRequestWithUserData):
        (WKPageLoadFile):
        (WKPageLoadFileWithUserData):
        (WKPageLoadHTMLStringWithUserData):
        (WKPageLoadAlternateHTMLStringWithUserData):
        (WKPageLoadPlainTextStringWithUserData):
        (WKPageLoadWebArchiveDataWithUserData):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::willLoadURLRequest):
        (WebKit::InjectedBundlePageLoaderClient::willLoadDataRequest):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        (WebCore):
        (InjectedBundlePageLoaderClient):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2013-05-16  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Fix memory leak in WebKitBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=116222

        Reviewed by Carlos Garcia Campos.

        Due to the use of leakRef() the ImmutableArray is not being released
        automatically. Adding a local variable in the methods to make sure that
        the ImmutableArray is freed.

        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        (webkit_back_forward_list_get_back_list_with_limit): Add local variable
        RefPtr and pass the ImmutableArray to
        WebKitBackForwardList::webkitBackForwardListCreateList() using
        RefPtr::get().
        (webkit_back_forward_list_get_forward_list_with_limit): Ditto.

2013-05-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r150034.
        http://trac.webkit.org/changeset/150034
        https://bugs.webkit.org/show_bug.cgi?id=116257

        This work around doesn't work due to another bug NSUndoManager
        has (Requested by rniwa on #webkit).

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::registerEditCommand):

2013-05-16  Tim Horton  <timothy_horton@apple.com>

        PDFPlugins don't load when plugins are disabled, but they should
        https://bugs.webkit.org/show_bug.cgi?id=75790
        <rdar://problem/11650197>

        Reviewed by Anders Carlsson.

        Support loading "application" plug-ins even if plug-ins are explicitly disabled.

        Make PDFPlugin and SimplePDFPlugin "application" plug-ins, so they can
        be loaded even if plug-ins are disabled.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add a 5-argument, 3-reply version of callMemberFunction.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        NPAPI plug-ins are not application plug-ins.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        Encode/decode the new isApplicationPlugin field on PluginInfo.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::findPluginForMIMEType):
        (WebKit::PluginInfoStore::findPluginForExtension):
        (WebKit::PluginInfoStore::findPlugin):
        * UIProcess/Plugins/PluginInfoStore.h:
        (PluginInfoStore):
        Give PluginInfoStore's findPlugin method and its private helper
        methods an argument allowing them to only match application plug-ins.

        (WebKit::WebPageProxy::findPlugin):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        Add an argument allowing findPlugin to restrict its search to only application plug-ins.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::objectContentType):
        Previously, this caller depended on pluginData() returning null if
        plug-ins were disabled. Since that is no longer the case, we have to
        check if we can use plug-ins, and otherwise ignore non-application-plug-ins.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        When going to search for a plug-in, ask subframeLoader whether or not
        it's OK to use ordinary non-application plug-ins, and pass that information
        on to the UIProcess when performing the search.

        (WebKit::WebPage::canPluginHandleResponse): Ditto.
        (WebKit::WebPage::canShowMIMEType):
        Ensure that canShowMIMEType returns true if we have an application plug-in
        that can display a particular MIME type, even if we're not allowed to load plug-ins.

2013-05-16  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Make Ewk_Context_Menu Ewk_Object
        https://bugs.webkit.org/show_bug.cgi?id=116097

        Reviewed by Gyuyoung Kim.

        Changed Ewk_Context_Menu to be an Ewk_Object so pointer to menu
        object can be shared between different modules.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::showContextMenu):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        * UIProcess/API/efl/ewk_context_menu.cpp:
        (EwkContextMenu::appendItem):
        (EwkContextMenu::removeItem):
        (ewk_context_menu_new):
        (ewk_context_menu_new_with_items):
        (ewk_context_menu_item_append):
        (ewk_context_menu_item_remove):
        (ewk_context_menu_hide):
        (ewk_context_menu_items_get):
        (ewk_context_menu_item_select):
        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        (EwkContextMenuItem::EwkContextMenuItem):
        (ewk_context_menu_item_new_with_submenu):
        * UIProcess/API/efl/ewk_context_menu_item_private.h:
        (EwkContextMenuItem):
        * UIProcess/API/efl/ewk_context_menu_private.h:
        (EwkContextMenu):
        (EwkContextMenu::create):
        * UIProcess/API/efl/ewk_defines.h:

2013-05-16  Andreas Kling  <akling@apple.com>

        Page::chrome() should return a reference.
        <http://webkit.org/b/116185>

        Reviewed by Anders Carlsson.

2013-05-16  Brady Eidson  <beidson@apple.com>

        svg/as-image/img-zoom-svg-stylesheet.html crashes with NetworkProcess enabled.
        <rdar://problem/13837408> and https://bugs.webkit.org/show_bug.cgi?id=115917

        Reviewed by Sam Weinig.

        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader): ASSERT that either there’s a frame and page ID, or
          that the client cannot be asked for credentials.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad): Only cast the FrameLoaderClient and get WebFrame/WebPage
          if that is actually possible. Set the clientCredentialPolicy based on whether or not WebFrame/WebPage are
          available since they are needed to ask the UIProcess for credentials. ASSERT that either there’s both
          a frame and page ID or that the client won’t be asked for credentials.

2013-05-16  Timothy Hatcher  <timothy@apple.com>

        Make the Find Banner in Safari work again with the docked Web Inspector.

        https://webkit.org/b/116182
        rdar://problem/13857423

        Reviewed by Benjamin Poulain.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        (WebKit::WebInspectorProxy::platformDetach):
        Preserve the top position of the inspected view so banners in Safari still work.

2013-05-16  Tim Horton  <timothy_horton@apple.com>

        [wk2] didGetImageForFindMatch can return a null image
        https://bugs.webkit.org/show_bug.cgi?id=116251
        <rdar://problem/13277246>

        Reviewed by Simon Fraser.

        Don't send didGetImageForFindMatch if we didn't get an image for
        the find match, which can happen if the selection is not visible.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::getImageForFindMatch):

2013-05-16  Tim Horton  <timothy_horton@apple.com>

        [wk2] Minimum layout width is lost if the WebProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=116202
        <rdar://problem/13202320>

        Reviewed by Darin Adler.

        Send the minimum layout width to the WebProcess upon initialization,
        so that crashed-and-restarted WebProcesses have the correct width.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        Add minimumLayoutWidth WebPage creation parameter.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        Send the current minimumLayoutWidth to the WebPage when it's created.

        (WebKit::WebPageProxy::setMinimumLayoutWidth):
        Store minimumLayoutWidth changes that come in while the WebProcess is
        not valid, so that the correct width is sent once it is restarted.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Set minimumLayoutWidth to the value provided by our creation parameters.

2013-05-16  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Win] Unreviewed buildfix after r150161.

        'Unknown' in HTTPRequest.cpp is ambiguous symbol with MSVC,
        because it is also defined in MS SDK 7.1 winioctl.h.

        * UIProcess/InspectorServer/HTTPRequest.cpp:
        (WebKit::HTTPRequest::HTTPRequest):

2013-05-16  Andras Becsi  <andras.becsi@digia.com>

        [WK2] PluginInformation.cpp fails to build because of missing ENABLE(NETSCAPE_PLUGIN_API) guard
        https://bugs.webkit.org/show_bug.cgi?id=116018

        Rubber-stamped by Jocelyn Turcotte.

        * Shared/Plugins/Netscape/PluginInformation.cpp:
        (WebKit::getPluginModuleInformation):

2013-05-15  Simon Cooper  <scooper@apple.com>

        Enable printing in plugins
        https://bugs.webkit.org/show_bug.cgi?id=116201
        <rdar://problem/12347902>

        Reviewed by Alexey Proskuryakov.

        Add the printing entitlement so that legacy printing drivers can
        customize the print panel. Update the printing rules and enable them
        for the plugins.

        * Configurations/PluginService.entitlements:
        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.microsoft.SilverlightPlugin.sb:
        * Resources/PlugInSandboxProfiles/com.oracle.java.JavaAppletPlugin.sb:

2013-05-15  Anders Carlsson  <andersca@apple.com>

        Move HTTPRequest class to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=116192

        Reviewed by Darin Adler.

        Move HTTPRequest to WebKit2 and put it in the WebKit namespace.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/InspectorServer/HTTPRequest.cpp: Renamed from Source/WebCore/platform/network/HTTPRequest.cpp.
        * UIProcess/InspectorServer/HTTPRequest.h: Renamed from Source/WebCore/platform/network/HTTPRequest.h.
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        * UIProcess/InspectorServer/WebInspectorServer.h:
        (WebInspectorServer):
        * UIProcess/InspectorServer/WebSocketServerClient.h:
        (WebKit::WebSocketServerClient::didReceiveUnrecognizedHTTPRequest):
        (WebKit::WebSocketServerClient::didReceiveWebSocketUpgradeHTTPRequest):
        (WebKit::WebSocketServerClient::didEstablishWebSocketConnection):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        * UIProcess/InspectorServer/WebSocketServerConnection.h:
        (WebKit):
        (WebSocketServerConnection):

2013-05-15  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [GTK] [WebKit2] enable displaying console.log messages to system console
        https://bugs.webkit.org/show_bug.cgi?id=115578

        Reviewed by Martin Robinson.

        Add a setting to enable/disable displaying of page messages to system
        console. Property is called enable-write-console-messages-to-stdout.
        Getter API function is
        webkit_settings_get_enable_write_console_messages_to_stdout
        Setter API function is
        webkit_settings_set_enable_write_console_messages_to_stdout

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        (webKitSettingsGetProperty):
        (webkit_settings_class_init):
        (webkit_settings_get_enable_write_console_messages_to_stdout):
        (webkit_settings_set_enable_write_console_messages_to_stdout):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings):

2013-05-08  Gavin Barraclough  <barraclough@apple.com>

        Process suppression should throttle scripted animations
        https://bugs.webkit.org/show_bug.cgi?id=115812

        Reviewed by Simon Fraser.

        <rdar://problem/13799726>

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setThrottled):
        (WebKit):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
            - Added setThrottled, forwards to WebCore::Page.
        * WebProcess/WebProcess.cpp:
        (WebKit):
        (WebKit::WebProcess::setProcessSuppressionEnabled):
        * WebProcess/WebProcess.h:
        (WebProcess):
            - Intercept calls to setProcessSuppressionEnabled, also mark all pages as being throttled.

2013-05-15  Anders Carlsson  <andersca@apple.com>

        WKPageGetPluginInformationDisplayNameKey doesn't return the right key
        https://bugs.webkit.org/show_bug.cgi?id=116188

        Reviewed by Andreas Kling.

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

2013-05-15  Alexey Proskuryakov  <ap@apple.com>

        More fixing after WebProcessShim renaming in r149074.

        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer): Updated a comment to mention the shim by its new name.

2013-05-15  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13902706> Lion: com.apple.tsm.uiserver sandbox error in Console when
        launching Safari

        Reviewed by Anders Carlsson.

        * WebProcess/com.apple.WebProcess.sb.in: Silence the violation.

2013-05-13  Anders Carlsson  <andersca@apple.com>

        Frame::editor() should return a reference
        https://bugs.webkit.org/show_bug.cgi?id=116037

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::updateGlobalSelection):
        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::executePendingEditorCommands):
        (WebKit::WebEditorClient::handleKeyboardEvent):
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::searchWithGoogle):
        (WebKit::WebContextMenuClient::searchWithSpotlight):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::changeWordCase):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::selectionAsString):
        (WebKit::WebFrame::setTextDirection):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        (WebKit::WebPage::executeEditingCommand):
        (WebKit::WebPage::isEditingCommandEnabled):
        (WebKit::WebPage::validateCommand):
        (WebKit::WebPage::handleEditingKeyboardEvent):
        (WebKit::WebPage::advanceToNextMisspelling):
        (WebKit::WebPage::uppercaseWord):
        (WebKit::WebPage::lowercaseWord):
        (WebKit::WebPage::capitalizeWord):
        (WebKit::WebPage::replaceSelectionWithText):
        (WebKit::WebPage::handleAlternativeTextUIResult):
        (WebKit::WebPage::setCompositionForTesting):
        (WebKit::WebPage::hasCompositionForTesting):
        (WebKit::WebPage::confirmCompositionForTesting):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::cancelComposition):
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::confirmComposition):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::cancelComposition):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal):
        (WebKit::WebPage::handleEditingKeyboardEvent):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::confirmComposition):
        (WebKit::WebPage::cancelComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::firstRectForCharacterRange):
        (WebKit::WebPage::readSelectionFromPasteboard):
        (WebKit::WebPage::getStringSelectionForPasteboard):
        (WebKit::WebPage::getDataSelectionForPasteboard):

2013-05-15  Anders Carlsson  <andersca@apple.com>

        Need a way for NPAPI plug-ins to open preference panes
        https://bugs.webkit.org/show_bug.cgi?id=116173
        <rdar://problem/13503848>

        Reviewed by Sam Weinig.

        * PluginProcess/PluginControllerProxy.h:
        Add openPluginPreferencePane().

        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::openPluginPreferencePane):
        Send OpenPluginPreferencePane to the UI process.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        Get the preference pane path.
        
        * Shared/Plugins/PluginModuleInfo.h:
        Add preferencePanePath member variable.

        * UIProcess/Plugins/PluginProcessProxy.h:
        Add openPluginPreferencePane message handler.

        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        ADd OpenPluginPreferencePane message.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::openPluginPreferencePane):
        Get the path to the preference pane and use LS to open it.

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

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        Handle WKNVPlugInContainer.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add WKNVPlugInContainer member variable.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::openPluginPreferencePane):
        Call through to the plug-in controller.

        (WebKit::NetscapePlugin::plugInContainer):
        Create a WKNPAPIPlugInContainer object if necessary.

        (WebKit::NetscapePlugin::platformDestroy):
        Invalidate the WKNPAPIPlugInContainer object.

        * WebProcess/Plugins/Netscape/mac/WKNPAPIPlugInContainer.h:
        New file with the protocol definition.

        * WebProcess/Plugins/Netscape/mac/WKNPAPIPlugInContainer.mm:
        (-[WKNPAPIPlugInContainer dealloc]):
        Assert that the plug-in is null (that we've been invalidated).

        (-[WKNPAPIPlugInContainer _invalidate]):
        Set the plug-in to null.

        (-[WKNPAPIPlugInContainer openPlugInPreferencePane]):
        Call through to the plug-in.

        * WebProcess/Plugins/Netscape/mac/WKNPAPIPlugInContainerInternal.h:
        New file with the interface declaration for the object that implements the protocol.

        * WebProcess/Plugins/PluginController.h:
        Add openPluginPreferencePane member function.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::openPluginPreferencePane):
        Add stub; this should never be called since we always go through the UI process.

2013-05-15  Alexey Proskuryakov  <ap@apple.com>

        [WK2][Mac] Split resetTextInputState into two functions
        https://bugs.webkit.org/show_bug.cgi?id=116174

        Reviewed by Anders Carlsson.

        Splitting resetTextInputState into resetSecureInputState and
        notifyInputContextAboutDiscardedComposition, paving the way for a fix where these
        won't be happening simultaneously.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::resetSecureInputState):
        (WebKit::PageClientImpl::notifyInputContextAboutDiscardedComposition):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView resignFirstResponder]):
        (-[WKView _resetSecureInputState]):
        (-[WKView _notifyInputContextAboutDiscardedComposition]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):

2013-05-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add padding to all public class structs for future expansion without breaking ABI
        https://bugs.webkit.org/show_bug.cgi?id=112565

        Reviewed by Anders Carlsson.

        Use 4 pointers for most of the classes that are unlikely to grow
        and 8 for WebKitWebView and WebKitWebContext.

        * UIProcess/API/gtk/WebKitBackForwardList.h:
        (_WebKitBackForwardListClass):
        * UIProcess/API/gtk/WebKitBackForwardListItem.h:
        (_WebKitBackForwardListItemClass):
        * UIProcess/API/gtk/WebKitContextMenu.h:
        (_WebKitContextMenuClass):
        * UIProcess/API/gtk/WebKitContextMenuItem.h:
        (_WebKitContextMenuItemClass):
        * UIProcess/API/gtk/WebKitCookieManager.h:
        (_WebKitCookieManagerClass):
        * UIProcess/API/gtk/WebKitDownload.h:
        (_WebKitDownloadClass):
        * UIProcess/API/gtk/WebKitFaviconDatabase.h:
        (_WebKitFaviconDatabaseClass):
        * UIProcess/API/gtk/WebKitFileChooserRequest.h:
        (_WebKitFileChooserRequestClass):
        * UIProcess/API/gtk/WebKitFindController.h:
        (_WebKitFindControllerClass):
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.h:
        (_WebKitFormSubmissionRequestClass):
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequest.h:
        (_WebKitGeolocationPermissionRequestClass):
        * UIProcess/API/gtk/WebKitHitTestResult.h:
        (_WebKitHitTestResultClass):
        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.h:
        (_WebKitNavigationPolicyDecisionClass):
        * UIProcess/API/gtk/WebKitPlugin.h:
        (_WebKitPluginClass):
        * UIProcess/API/gtk/WebKitPolicyDecision.h:
        (_WebKitPolicyDecisionClass):
        * UIProcess/API/gtk/WebKitPrintOperation.h:
        (_WebKitPrintOperationClass):
        * UIProcess/API/gtk/WebKitResponsePolicyDecision.h:
        (_WebKitResponsePolicyDecisionClass):
        * UIProcess/API/gtk/WebKitSecurityManager.h:
        (_WebKitSecurityManagerClass):
        * UIProcess/API/gtk/WebKitSettings.h:
        (_WebKitSettingsClass):
        * UIProcess/API/gtk/WebKitURIRequest.h:
        (_WebKitURIRequestClass):
        * UIProcess/API/gtk/WebKitURIResponse.h:
        (_WebKitURIResponseClass):
        * UIProcess/API/gtk/WebKitURISchemeRequest.h:
        (_WebKitURISchemeRequestClass):
        * UIProcess/API/gtk/WebKitWebContext.h:
        (_WebKitWebContextClass):
        * UIProcess/API/gtk/WebKitWebInspector.h:
        (_WebKitWebInspectorClass):
        * UIProcess/API/gtk/WebKitWebResource.h:
        (_WebKitWebResourceClass):
        * UIProcess/API/gtk/WebKitWebView.h:
        (_WebKitWebViewClass):
        * UIProcess/API/gtk/WebKitWebViewBase.h:
        (_WebKitWebViewBaseClass):
        * UIProcess/API/gtk/WebKitWebViewGroup.h:
        (_WebKitWebViewGroupClass):
        * UIProcess/API/gtk/WebKitWindowProperties.h:
        (_WebKitWindowPropertiesClass):

2013-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove WTF_USE_PLATFORM_STRATEGIES
        https://bugs.webkit.org/show_bug.cgi?id=114431

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):

2013-05-14  Simon Cooper  <scooper@apple.com>

        Add a preference that can disable the fake SYSV SHM shim
        https://bugs.webkit.org/show_bug.cgi?id=116127
        <rdar://problem/13810524>

        Reviewed by Alexey Proskuryakov.

        * PluginProcess/mac/PluginProcessShim.mm:
        (WebKit::shim_disabled):
        (WebKit::shim_shmdt):
        (WebKit::shim_shmat):
        (WebKit::shim_shmget):
        (WebKit::shim_shmctl):

2013-05-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Not updating tiled backing coverage when main frame scrollability changes
        https://bugs.webkit.org/show_bug.cgi?id=116123
        <rdar://problem/13836559>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        Add updateMainFrameClipsToExposedRect.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        Remove m_clipsToExposedRect. We don't actually need it.

        (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged):
        Call updateMainFrameClipsToExposedRect so that we can always update
        tiled backing coverage and can factor out our calls to setClipsToExposedRect.

        (WebKit::TiledCoreAnimationDrawingArea::updateMainFrameClipsToExposedRect):
        Factor out setClipsToExposedRect calls to here, and also call
        FrameView::adjustTiledBackingCoverage so that the FrameView's tiled
        backing is informed to allow overdraw in the UI-process-scrolling case.

        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
        Use updateMainFrameClipsToExposedRect.

2013-05-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Add a testing shim for secure event input functions
        https://bugs.webkit.org/show_bug.cgi?id=116122

        Reviewed by Mark Rowe.

        Moved DyldInterpose.h to WebCore, as we now use it there too.

        * PluginProcess/mac/PluginProcessShim.mm:
        * Shared/mac/CookieStorageShimLibrary.cpp:
        * Shared/mac/DyldInterpose.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/mac/SecItemShimLibrary.mm:

2013-05-14  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Win] REGRESSION(r149944): mmap is not available on Windows
        https://bugs.webkit.org/show_bug.cgi?id=116015

        Reviewed by Anders Carlsson.

        Use fastAlloc/fastFree for platforms other than OS(DARWIN) where
        using mmap is not necessary and maybe not available.

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::allocBuffer):
        (CoreIPC::freeBuffer):
        (CoreIPC::ArgumentEncoder::~ArgumentEncoder):
        (CoreIPC::ArgumentEncoder::grow):

2013-05-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move generated ColorData.cpp, WebKitFontFamilyNames.(cpp|h) build targets into libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=115921

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Add platform_cppflags to the list of libwebkit2gtk CPPFLAGS.

2013-05-14  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [WK2][Win] Fix ASSERT(DeleteTimerQueueTimer...)
        https://bugs.webkit.org/show_bug.cgi?id=116039

        Reviewed by Benjamin Poulain.

        According to the documentation, DeleteTimerQueueTimer can be expected to return
        false with an ERROR_IO_PENDING error when called from the timer's callback.

        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::timerCallback):

2013-05-14  Alexey Proskuryakov  <ap@apple.com>

        Remove unused "type" field from DictionaryPopupInfo
        https://bugs.webkit.org/show_bug.cgi?id=116011

        Reviewed by Darin Adler.

        It is unused, and furthermore, PDFPlugin sets it incorrectly anyway.

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::showDefinitionForAttributedString):
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::lookUpInDictionary):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForSelection):
        (WebKit::WebPage::performDictionaryLookupForRange):

2013-05-14  Michael Brüning  <michael.bruning@digia.com>

        [WK2] Make WebPageProxy use deviceScaleFactor() in creationParameters().
        https://bugs.webkit.org/show_bug.cgi?id=110218

        Reviewed by Darin Adler.

        Make the WebPageProxy::creationParameters use the accessor
        deviceScaleFactor() instead of using m_intrinsicDeviceScaleFactor
        directly. This will restore the custom device scale factor when
        reattaching to the WebProcess after a crash.

        Moreover, it will enable the Qt and ELF ports to use the
        existing C API for overriding the device scale factor instead
        of using the WebPageProxy directly or adding new C API to set
        the intrinsic device scale factor.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::setDeviceScaleFactor):
        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPage::updatePaintNode):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):

2013-05-13  Alex Christensen  <achristensen@apple.com>

        Added testRunner.setPrinting.
        https://bugs.webkit.org/show_bug.cgi?id=42693
        rdar://problem/8213845

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyRenderTreeExternalRepresentationForPrinting): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        Added WKBundlePageCopyRenderTreeExternalRepresentationForPrinting declaration.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::renderTreeExternalRepresentationForPrinting): Added.
        * WebProcess/WebPage/WebPage.h:
        Added renderTreeExternalRepresentationForPrinting declaration.

2013-05-13  Timothy Hatcher  <timothy@apple.com>

        Add support for updating the Web Inspector toolbar height.

        https://bugs.webkit.org/show_bug.cgi?id=115996

        Reviewed by Joseph Pecoraro and Benjamin Poulain.

        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::setToolbarHeight):
        (WebInspectorProxy):
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformSetToolbarHeight):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSetToolbarHeight):
        (WebKit):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformSetToolbarHeight):
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformSetToolbarHeight):
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::setToolbarHeight):
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
        (WebInspectorFrontendClient):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::setToolbarHeight):
        * WebProcess/WebPage/WebInspector.h:

2013-05-13  Ryosuke Niwa  <rniwa@webkit.org>

        Sometimes NSUndoManager can get into an inconsistent state
        https://bugs.webkit.org/show_bug.cgi?id=116050

        Reviewed by Enrica Casucci.

        Always group undo items to work around a bug in NSUndoManager that manifests
        when we call removeAllActionsWithTarget.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::registerEditCommand):

2013-05-13  Anders Carlsson  <andersca@apple.com>

        [WK2] Crash in WebKit::StorageAreaMap::didSetItem()
        https://bugs.webkit.org/show_bug.cgi?id=116026

        Reviewed by Andreas Kling.

        Make sure that we ignore any leftover messages from the UI process after we've reset
        the storage map. Achieve this by keeping a seed count in the StorageAreaMap object that's incremented
        everytime the map is reset. Associate every storage area change with the seed and ignore any incoming 
        notification messages from the UI process if the seeds are different.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC):
        (CoreIPC::callMemberFunction):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getValues):
        (WebKit::StorageManager::setItem):
        (WebKit::StorageManager::removeItem):
        (WebKit::StorageManager::clear):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/Storage/StorageManager.messages.in:
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::removeItem):
        (WebKit::StorageAreaMap::clear):
        (WebKit::StorageAreaMap::resetValues):
        (WebKit::StorageAreaMap::loadValuesIfNeeded):
        (WebKit::StorageAreaMap::didGetValues):
        (WebKit::StorageAreaMap::didSetItem):
        (WebKit::StorageAreaMap::didRemoveItem):
        (WebKit::StorageAreaMap::didClear):
        (WebKit::StorageAreaMap::applyChange):
        * WebProcess/Storage/StorageAreaMap.h:
        (StorageAreaMap):
        * WebProcess/Storage/StorageAreaMap.messages.in:

2013-05-13  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [WK2][CoordinatedGraphics] Avoid dispensable calls to WebView::updateViewportSize()
        https://bugs.webkit.org/show_bug.cgi?id=116045

        Reviewed by Darin Adler.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::setSize):

2013-05-13  Jon Lee  <jonlee@apple.com>

        [WK2] Notification manager removal should not be tied to termination of web processes
        https://bugs.webkit.org/show_bug.cgi?id=116038
        <rdar://problem/10968680>

        Reviewed by Ryosuke Niwa.

        WebNotificationManagerProxy incorrectly removes the manager when web processes close.
        Since it is a supplemental on the web context, the manager should only be removed
        when the context is destroyed.

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        * UIProcess/Notifications/WebNotificationManagerProxy.h: Remove implementation of
        processDidClose().

2013-05-13  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Use a template file for generated GObject enum files
        https://bugs.webkit.org/show_bug.cgi?id=115867

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Use a template file instead of specifying portions of the file on the command-line.
        * UIProcess/API/gtk/WebKitEnumTypes.cpp.template: Added.
        * UIProcess/API/gtk/WebKitEnumTypes.h.template: Added.
        * UIProcess/API/gtk/WebKitFindController.cpp: We can no longer rely on WebKitEnumTypes.h to pull in WebKitWebView.h.

2013-05-13  Noam Rosenthal  <noam@webkit.org>

        [CoordGfx] requestAnimationFrame performance issues
        https://bugs.webkit.org/show_bug.cgi?id=112345

        Reviewed by Jocelyn Turcotte.

        Changed the logic of requestAnimationFrame in Coordinated Graphics.
        We don't send any IPC messages for requestAnimationFrame. Instead, we do one of two things:
        - If there is already a frame pending in the UI process, do nothing, as the animations would
          be serviced when the frame is returned to the web process.
        - If there is no frame pending, we schedule a flush, making sure that that flush occurs at 
          least 1/60 seconds after the last animation service, so that we don't get an infinite loop
          of flushes.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::requestAnimationFrame):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):
        (WebKit::CoordinatedLayerTreeHost::scheduleAnimation):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.messages.in:

2013-05-13  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [WK2][CoordinatedGraphics] WKView needs API for handling opacity
        https://bugs.webkit.org/show_bug.cgi?id=116032

        Reviewed by Kenneth Rohde Christiansen.

        Add WKViewSetOpacity and WKViewOpacity APIs and use them in
        WebView.cpp.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewSetOpacity):
        (WKViewOpacity):
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::paintToCurrentGLContext):
        * UIProcess/CoordinatedGraphics/WebView.h:
        (WebKit::WebView::setOpacity):
        (WebKit::WebView::opacity):
        (WebView):

2013-05-13  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Use WebCore layer archives for TestWebCore, WebKitPluginProcess
        https://bugs.webkit.org/show_bug.cgi?id=115918

        Reviewed by Gustavo Noronha Silva.

        Due to layer violations and circular dependencies the WebKitPluginProcess requires for the
        libraries containing the built code of the intertwining Platform and WebCore layers to be
        specified multiple times when linking. This can be avoided by packing the two layers' archives
        into one big archive, named after the WebCore layer due to no clear boundary between it and the
        Platform layer. The big archive can then be specified only once when linking, simplifying the code
        and suppressing all the layering violations so they do not cause build problems.

        First the libtool libraries that the WebCore layer (as required by the WebKitPluginProcess) depends on
        are specified. These are then used as dependencies for the archive creation rule as well as the list
        from which the archive file paths are constructed and then used to dump the member files from these archives.
        The member files are then added to the big archive. The latter is added to the list of libraries the
        WebKitPluginProcess requires to successfully link.

        * GNUmakefile.am:

2013-05-13  Zalan Bujtas  <zalan@apple.com>

        WebProcess consuming very high CPU on linkedin.com
        https://bugs.webkit.org/show_bug.cgi?id=115601

        Reviewed by Andreas Kling.

        Disable WEB_TIMING_MINIMAL.
        Turn off window.performance and performance.now(). Some JS frameworks expect
        additional Web Timing APIs, when performance.now() is available.

        * Configurations/FeatureDefines.xcconfig:

2013-05-12  Anders Carlsson  <andersca@apple.com>

        Stop including UnusedParam.h
        https://bugs.webkit.org/show_bug.cgi?id=116003

        Reviewed by Sam Weinig.

        UnusedParam.h is empty now so there's no need to include it anymore.

        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKInspector.cpp:
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/efl/ewk_text_checker.cpp:
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:

2013-05-12  Andreas Kling  <akling@apple.com>

        Unload event listeners should prevent Safari from insta-killing the web process on last tab close.
        <http://webkit.org/b/115988>
        <rdar://problem/13870943>

        Reviewed by Anders Carlsson.

        Let WebCore control the UI process's suppression of the sudden termination mechanism.
        This is implemented by having WebChromeClient push Enable/DisableSuddenTermination messages
        over to the UI process where the appropriate NSProcessInfo calls are made.

        We also use this information when deciding whether to insta-kill a web process when its last
        page is closed. This mechanism is re-usable in WebCore to protect against sudden termination
        by the UI process.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::removeWebPage):
        (WebKit::WebProcessProxy::enableSuddenTermination):
        (WebKit::WebProcessProxy::disableSuddenTermination):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::enableSuddenTermination):
        (WebKit::WebChromeClient::disableSuddenTermination):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

2013-05-12  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13402976> Sandbox violations in com.nvidia.OpenGL on Lion.

        Reviewed by Dan Bernstein.

        * WebProcess/com.apple.WebProcess.sb.in: Silence the violations (on Lion only).

2013-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unnecessary GTK_CHECK_VERSION #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=115914

        Reviewed by Martin Robinson.

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

2013-05-12  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Unreviewed build fix after r149944.

        * Platform/CoreIPC/ArgumentEncoder.cpp: Include <sys/mman.h> for mmap(2).

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

        Don't pass malloced pointers as out-of-line data when sending Mach messages
        https://bugs.webkit.org/show_bug.cgi?id=115970
        <rdar://problem/13144680>

        Reviewed by Sam Weinig.

        Give ArgumentEncoder an inline buffer of 512 bytes. If we need more than that, use mmap to allocate data
        since that gives us fresh zero-filled memory that we can safely share.

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::ArgumentEncoder):
        Set up the buffer pointers to point to the inline buffer.

        (CoreIPC::ArgumentEncoder::~ArgumentEncoder):
        Unmap the buffer if necessary.

        (CoreIPC::ArgumentEncoder::grow):
        Grow the allocation exponentially, rounded up to the nearest page. This is a simplification from the
        current strategy, but most messages are either tiny in which case they will fit inside the inline buffer,
        or big in which case we'll end up doing less allocations + memory copying.

        * Platform/CoreIPC/ArgumentEncoder.h:
        (ArgumentEncoder):

2013-05-11  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r149904.

        * GNUmakefile.list.am: Adding missing build targets.

2013-05-11  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed, Fix WK2 EFL build after r149904.

        Add new PluginInformation.cpp file to CMake.

        * CMakeLists.txt:

2013-05-11  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed, fix WK2 EFL build after r149904.

        Add new WKPluginInformation.cpp file to CMake.

        * CMakeLists.txt:

2013-05-11  Andreas Kling  <akling@apple.com>

        When possible, terminate web processes immediately when closing their last page.
        <http://webkit.org/b/115964>
        <rdar://problem/13869266>

        Reviewed by Geoffrey Garen.

        When we're using a network process, there's no need for the UI process to wait for web processes
        to clear resource caches and terminate nicely.

        We can just kill them off right away in WebProcessProxy::removeWebPage() when the last page is closed.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeWebPage):

            Terminate the child process immediately if possible.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::canTerminateChildProcess):
        (WebKit::WebProcessProxy::shouldTerminate):

            Broke out the logic from the shouldTerminate() IPC message handler into a separate function
            so we can call it from removeWebPage().

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

        Crash when terminating a process that has not been fully launched
        https://bugs.webkit.org/show_bug.cgi?id=115962
        <rdar://problem/13660916>

        Reviewed by Andreas Kling.

        Handle terminating a process that has not been fully launched.

        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::didFinishLaunchingProcess):
        If we have been invalidated, dispose the connection identifier.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::ProcessLauncher::terminateProcess):
        If we're still launching the process, invalidate so the client won't get an unexpected
        didFinishLaunching callback.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):
        Check if webConnection() is null before calling it. (It will be null if the process isn't fully launched).

2013-05-10  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: Implement WK2 version of WebInspectorFrontendClient::save
        https://bugs.webkit.org/show_bug.cgi?id=115564

        Reviewed by Benjamin Poulain.

        Implement InspectorFrontendHost's save() and append() methods for
        Mac WebKit2. Add canSave() for all ports.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::save):
        (WebKit):
        (WebKit::WebInspectorProxy::append):
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy):
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformSave):
        (WebKit):
        (WebKit::WebInspectorProxy::platformAppend):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformSave):
        (WebKit):
        (WebKit::WebInspectorProxy::platformAppend):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformSave):
        (WebKit):
        (WebKit::WebInspectorProxy::platformAppend):
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformSave):
        (WebKit):
        (WebKit::WebInspectorProxy::platformAppend):
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::canSave):
        (WebKit):
        (WebKit::WebInspectorFrontendClient::save):
        (WebKit::WebInspectorFrontendClient::append):
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
        (WebInspectorFrontendClient):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::save):
        (WebKit):
        (WebKit::WebInspector::append):
        (WebKit::WebInspector::didSave):
        (WebKit::WebInspector::didAppend):
        * WebProcess/WebPage/WebInspector.h:
        (WebInspector):
        * WebProcess/WebPage/WebInspector.messages.in:
        * WebProcess/WebPage/efl/WebInspectorEfl.cpp:
        (WebKit::WebInspector::canSave):
        (WebKit):
        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        (WebKit::WebInspector::canSave):
        (WebKit):
        * WebProcess/WebPage/mac/WebInspectorMac.mm:
        (WebKit::WebInspector::canSave):
        (WebKit):
        * WebProcess/WebPage/qt/WebInspectorQt.cpp:
        (WebKit::WebInspector::canSave):
        (WebKit):

2013-05-10  Remy Demarest  <rdemarest@apple.com>

        Copy WKPluginInformation.h header to the WebKit2 Framework private headers.
        https://bugs.webkit.org/show_bug.cgi?id=115940

        Reviewed by Darin Adler.

        * WebKit2.xcodeproj/project.pbxproj:
        Move WKPluginInformation.h file from the framework's Project Headers to
        Private Headers.

2013-05-10  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt][Mac] Unreviewed. Roll out the fix attempt in r149912.

        * Target.pri:

2013-05-10  Simon Cooper  <scooper@apple.com>

        Fix AppleConnect issues for WiFi interfaces
        <rdar://problem/13776227&13776240&13776281>
        https://bugs.webkit.org/show_bug.cgi?id=115932

        Reviewed by Alexey Proskuryakov.

        Add support for WiFi interfaces for the AppleConnect plugin.
        Remove the FIXME.

        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:

2013-05-10  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt][Mac] Unreviewed speculative build fix after r149904.

        * Target.pri:

2013-05-10  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] Unreviewed buildfix after r149904.

        * Target.pri:

2013-05-09  Sam Weinig  <sam@webkit.org>

        Unify plug-in information dictionaries
        <rdar://problem/13852080>
        https://bugs.webkit.org/show_bug.cgi?id=115891

        Reviewed by Anders Carlsson.

        This unifies the plug-in information dictionaries vended by WKContextCopyPlugInInfoForBundleIdentifier
        and WKContextGetInfoForInstalledPlugIns with those from the WKPageLoaderClient and WKPageUIClient.

        All the old keys will continue to work, but have been deprecated in favor of new keys defined in 
        WKPluginInformation.h

        * Shared/API/c/WKPluginInformation.cpp: Added.
        * Shared/API/c/WKPluginInformation.h: Added.
        Export new keys as SPI.

        * Shared/Plugins/Netscape/PluginInformation.h: Added.
        * Shared/Plugins/Netscape/PluginInformation.cpp: Added.
        (WebKit::pluginInformationBundleIdentifierKey):
        (WebKit::pluginInformationBundleVersionKey):
        (WebKit::pluginInformationPathKey):
        (WebKit::pluginInformationDisplayNameKey):
        (WebKit::pluginInformationDefaultLoadPolicyKey):
        (WebKit::pluginInformationUpdatePastLastBlockedVersionIsKnownAvailableKey):
        (WebKit::pluginInformationHasSandboxProfileKey):
        (WebKit::pluginInformationFrameURLKey):
        (WebKit::pluginInformationMIMETypeKey):
        (WebKit::pluginInformationPageURLKey):
        (WebKit::pluginInformationPluginspageAttributeURLKey):
        (WebKit::pluginInformationPluginURLKey):
        Add new keys.

        (WebKit::pluginModuleInformation):
        (WebKit::createPluginInformationDictionary):
        Add creation functions to simplify multiple sites.

        * Shared/Plugins/Netscape/mac/PluginInformationMac.mm: Added.
        (WebKit::platformPluginModuleInformation):
        Add platform specific data to the dictionary.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetPluginInformationBundleIdentifierKey):
        (WKPageGetPluginInformationBundleVersionKey):
        (WKPageGetPluginInformationDisplayNameKey):
        (WKPageGetPluginInformationFrameURLKey):
        (WKPageGetPluginInformationMIMETypeKey):
        (WKPageGetPluginInformationPageURLKey):
        (WKPageGetPluginInformationPluginspageAttributeURLKey):
        (WKPageGetPluginInformationPluginURLKey):
        * UIProcess/API/C/WKPage.h:
        Deprecate the old keys.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextCopyPlugInInfoForBundleIdentifier):
        (WKContextGetInfoForInstalledPlugIns):
        Simplify by using the new createPluginInformationDictionary functions.

        (WKPlugInInfoPathKey):
        (WKPlugInInfoBundleIdentifierKey):
        (WKPlugInInfoVersionKey):
        (WKPlugInInfoLoadPolicyKey):
        (WKPlugInInfoUpdatePastLastBlockedVersionIsKnownAvailableKey):
        (WKPlugInInfoIsSandboxedKey):
        Deprecate the old keys.

        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didFailToInitializePlugin):
        (WebKit::WebLoaderClient::didBlockInsecurePluginVersion):
        (WebKit::WebLoaderClient::pluginLoadPolicy):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::unavailablePluginButtonClicked):
        * UIProcess/WebUIClient.h:
        Optimize for the most recent callback type which takes a dictionary,
        and pull out the necessary bits from it for deprecated callbacks as necessary.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin):
        (WebKit::WebPageProxy::unavailablePluginButtonClicked):
        (WebKit::WebPageProxy::didFailToInitializePlugin):
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
        Use createPluginInformationDictionary() consistently, to get consistent results for callbacks.

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

2013-05-10  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: implement runOpenPanel callback for WebKit2 inspector
        https://bugs.webkit.org/show_bug.cgi?id=115865

        Reviewed by Sam Weinig.

        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::inspectorWindow):
        Add an accessor for m_inspectorWindow.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::runOpenPanel):
        Show the open panel dialog when requested.

        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Register the callback when the inspector page is created.

2013-05-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        [WK2][CoordinatedGraphics] WKViewSetThemePath is EFL specific
        https://bugs.webkit.org/show_bug.cgi?id=115928

        Reviewed by Kenneth Rohde Christiansen.

        WKViewSetThemePath was moved to WKViewEfl.h since it is EFL specific.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/C/efl/WKViewEfl.cpp:
        (WKViewSetThemePath):
        * UIProcess/API/C/efl/WKViewEfl.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        * UIProcess/CoordinatedGraphics/WebView.h:
        (WebView):
        * UIProcess/efl/ViewClientEfl.cpp:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebViewEfl::setThemePath):
        * UIProcess/efl/WebViewEfl.h:
        (WebViewEfl):

2013-05-10  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r149439): Video turns blank upon entering full screen for the first time
        https://bugs.webkit.org/show_bug.cgi?id=115617

        Reviewed by Eric Carlson.

        Partially revert the change introduced in r149439 for OS X 10.8 and previous. On these
        platforms, create a window with a NSZeroSize initial frame, which fixes the "blank"
        first-full screen behavior.

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

2013-05-10  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Make the WebSoupRequestManager a supplement to the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=115717

        Reviewed by Andreas Kling.

        WebSoupRequestManager should inherit from WebProcessSupplement and should be used as such
        by the WebProcess. This removes the need for the m_soupRequestManager member variable in
        the WebProcess class and brings the WebSoupRequestManager in line with other manager classes
        of which instances are controlled by the WebProcess class.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Add  the WebSoupRequestManager as a supplement.
        * WebProcess/WebProcess.h:
        (WebProcess): Remove the m_soupRequestManager member variable and its getter method.
        * WebProcess/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericSendAsync): Access the WebSoupRequestManager as a supplement.
        (webkitSoupRequestGenericSendFinish): Ditto.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Access the WebSoupRequestManager as a supplement.
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::supplementName): Specify the supplement's name.
        * WebProcess/soup/WebSoupRequestManager.h:
        (WebSoupRequestManager): Inherit from the WebProcessSupplement interface.

2013-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unnecessary GLIB_CHECK_VERSION #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=115904

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/tests/TestInspectorServer.cpp:
        (startTestServerMonitor):
        * UIProcess/API/gtk/tests/TestWebKitAccessibility.cpp:
        (startTestServerMonitor):

2013-05-09  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:

2013-05-09  Anders Carlsson  <andersca@apple.com>

        Enable UI process storage
        https://bugs.webkit.org/show_bug.cgi?id=115879
        <rdar://problem/12239765>

        Reviewed by Beth Dakin.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        Flip the switch.

2013-05-09  Anders Carlsson  <andersca@apple.com>

        Remove extra spaces between right angle brackets in template declarations
        https://bugs.webkit.org/show_bug.cgi?id=115877

        Reviewed by Beth Dakin.

        C++11 doesn't require spaces between right angle brackets so remove all of them.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        (WebKit::NetworkBlobRegistry::sandboxExtensions):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        (NetworkBlobRegistry):
        * NetworkProcess/HostRecord.h:
        (HostRecord):
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (NetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.h:
        (NetworkProcess):
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::servePendingRequests):
        (WebKit::NetworkResourceLoadScheduler::removeScheduledLoaders):
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader):
        * NetworkProcess/SchedulableLoader.h:
        (SchedulableLoader):
        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/Connection.cpp:
        (Connection::SyncMessageState):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/WorkQueue.h:
        (WorkQueue):
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * Scripts/webkit2/messages_unittest.py:
        (CoreIPC):
        * Shared/BlockingResponseMap.h:
        (BlockingResponseMap):
        * Shared/ChildProcessProxy.h:
        (ChildProcessProxy):
        * Shared/ImmutableArray.cpp:
        (WebKit::ImmutableArray::ImmutableArray):
        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::adopt):
        (ImmutableArray):
        * Shared/ImmutableDictionary.cpp:
        (WebKit::ImmutableDictionary::keys):
        * Shared/ImmutableDictionary.h:
        (ImmutableDictionary):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        (CustomProtocolManager):
        * Shared/SecurityOriginData.cpp:
        (WebKit::performAPICallbackWithSecurityOriginDataVector):
        * Shared/SessionState.cpp:
        * Shared/StatisticsData.h:
        (StatisticsData):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebArchive.cpp:
        (WebKit::WebArchive::WebArchive):
        (WebKit::WebArchive::subresources):
        (WebKit::WebArchive::subframeArchives):
        * Shared/WebContextMenuItem.cpp:
        (WebKit::WebContextMenuItem::submenuItemsAsImmutableArray):
        * Shared/WebOpenPanelParameters.cpp:
        (WebKit::WebOpenPanelParameters::acceptMIMETypes):
        (WebKit::WebOpenPanelParameters::selectedFileNames):
        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::encode):
        * SharedWorkerProcess/SharedWorkerProcess.h:
        (SharedWorkerProcess):
        * UIProcess/API/mac/WKPrintingView.h:
        (WebFrameProxy):
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _drawPreview:]):
        * UIProcess/API/mac/WKView.mm:
        (WebKit):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::processDidClose):
        * UIProcess/Downloads/DownloadProxyMap.h:
        (DownloadProxyMap):
        * UIProcess/GeolocationPermissionRequestManagerProxy.h:
        (GeolocationPermissionRequestManagerProxy):
        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.h:
        (DynamicLinkerEnvironmentExtractor):
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        (CustomProtocolManagerProxy):
        * UIProcess/Network/NetworkProcessProxy.h:
        (NetworkProcessProxy):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.h:
        (NotificationPermissionRequestManagerProxy):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        (WebNotificationManagerProxy):
        * UIProcess/Plugins/PluginProcessManager.h:
        (PluginProcessManager):
        * UIProcess/Plugins/PluginProcessProxy.h:
        (PluginProcessProxy):
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::didGetSitesWithData):
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        (WebPluginSiteDataManager):
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.h:
        (SharedWorkerProcessManager):
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h:
        (SharedWorkerProcessProxy):
        * UIProcess/StatisticsRequest.cpp:
        (WebKit::StatisticsRequest::completedRequest):
        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        (WebKit::StorageManager::StorageArea::dispatchEvents):
        (StorageManager::SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::SessionStorageNamespace::cloneTo):
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        (WebKit::StorageManager::invalidateConnectionInternal):
        (WebKit::StorageManager::findStorageArea):
        (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem):
        (WebKit::WebBackForwardList::backListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::forwardListAsImmutableArrayWithLimit):
        (WebKit::WebBackForwardList::clear):
        * UIProcess/WebBackForwardList.h:
        (WebKit):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::enableProcessTermination):
        (WebKit::WebContext::pluginInfoStoreDidLoadPlugins):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::didGetHostnamesWithCookies):
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::didGetDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::didGetDatabaseOrigins):
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebDatabaseManagerProxy):
        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::willSubmitForm):
        * UIProcess/WebFormClient.h:
        (WebFormClient):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didChangeBackForwardList):
        * UIProcess/WebLoaderClient.h:
        (WebLoaderClient):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::didGetHostnamesWithMediaCache):
        * UIProcess/WebMediaCacheManagerProxy.h:
        (WebMediaCacheManagerProxy):
        * UIProcess/WebPageContextMenuClient.cpp:
        (WebKit::WebPageContextMenuClient::showContextMenu):
        * UIProcess/WebPageProxy.cpp:
        (ExceededDatabaseQuotaRecords):
        (WebKit::WebPageProxy::relatedPages):
        (WebKit::WebPageProxy::didChangeBackForwardList):
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::processNextQueuedWheelEvent):
        (WebKit::WebPageProxy::findStringMatches):
        (WebKit::WebPageProxy::willSubmitForm):
        (WebKit::WebPageProxy::pluginInformationDictionary):
        (WebKit::WebPageProxy::didFindStringMatches):
        (WebKit::WebPageProxy::didReceiveEvent):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::disconnect):
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::didBecomeUnresponsive):
        (WebKit::WebProcessProxy::interactionOccurredWhileUnresponsive):
        (WebKit::WebProcessProxy::didBecomeResponsive):
        (WebKit::WebProcessProxy::disconnectFramesFromPage):
        (WebKit::WebProcessProxy::frameCountInPage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebResourceCacheManagerProxy.h:
        (WebResourceCacheManagerProxy):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::populateNSMenu):
        (WebKit::nsMenuItemVector):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::didChangePosition):
        (WebKit::WebGeolocationManager::didFailToDeterminePosition):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        (WebIconDatabaseProxy):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::originsWithApplicationCache):
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.cpp:
        (WebKit::InjectedBundleBackForwardListItem::children):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::getPasteboardDataForRange):
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        (InjectedBundlePageEditorClient):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::willSendSubmitEvent):
        (WebKit::InjectedBundlePageFormClient::willSubmitForm):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:
        (InjectedBundlePageFormClient):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::featuresUsedInPage):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::internallyFailedLoadTimerFired):
        (WebKit::WebResourceLoadScheduler::networkProcessCrashed):
        * WebProcess/Network/WebResourceLoadScheduler.h:
        (WebResourceLoadScheduler):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        (NotificationPermissionRequestManager):
        * WebProcess/Notifications/WebNotificationManager.h:
        (WebNotificationManager):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::invalidate):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        (NPRuntimeObjectMap):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::stopAllStreams):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (NetscapePlugin):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        (NetscapePluginStream):
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm:
        (getAllScriptsInPDFDocument):
        (WebKit::SimplePDFPlugin::runScriptsInPDFDocument):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        (PluginProcessConnectionManager):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::cancelAllStreams):
        * WebProcess/Plugins/PluginView.h:
        (PluginView):
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::storageArea):
        * WebProcess/Storage/StorageNamespaceImpl.h:
        (StorageNamespaceImpl):
        * WebProcess/Storage/WebKeyValueStorageManager.cpp:
        (WebKit::keyValueStorageOriginIdentifiers):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::getClientPasteboardDataForRange):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::documentFragmentFromAttributedString):
        * WebProcess/WebPage/EventDispatcher.h:
        (EventDispatcher):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findStringMatches):
        * WebProcess/WebPage/FindController.h:
        (FindController):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::childFrames):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::trackedRepaintRects):
        * WebProcess/WebPage/WebPage.h:
        (WebKit):
        (WebPage):
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        (WebKit::WebProcess::focusedWebPage):
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::didClose):
        (WebKit::WebProcess::webPageGroup):
        (WebKit::addCaseFoldedCharacters):
        (WebKit::getWebCoreMemoryCacheStatistics):
        (WebKit::WebProcess::setTextCheckerState):
        * WebProcess/WebProcess.h:
        (WebProcess):

2013-05-09  Anders Carlsson  <andersca@apple.com>

        Implement WebPlatformStrategies::transientLocalStorageNamespace
        https://bugs.webkit.org/show_bug.cgi?id=115876
        <rdar://problem/13852871>

        Reviewed by Beth Dakin.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::transientLocalStorageNamespace):
        Return a session storage namespace for a random page when UI process storage is enabled,
        otherwise call the base class implementation.

2013-05-09  Anders Carlsson  <andersca@apple.com>

        Use explicit qualifiers for names in the std:: namespace
        https://bugs.webkit.org/show_bug.cgi?id=115868

        Reviewed by Andreas Kling.

        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::encode):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerClearAllSiteData):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::findPluginForExtension):
        * UIProcess/WebFrameProxy.cpp:
        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parsePostBuffer):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::loadURL):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::deliverDataToPlugin):
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::countStringMatches):
        (WebKit::FindController::updateFindUIAfterPageScroll):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::drawPDFPage):
        * WebProcess/mac/WebProcessMac.mm:

2013-05-09  Max Feil  <mfeil@rim.com>

        shouldUsePluginDocument() needs to be respected when a document is created
        https://bugs.webkit.org/show_bug.cgi?id=110308

        Reviewed by Rob Buis.

        Renaming shouldUsePluginDocument() to shouldAlwaysUsePluginDocument()
        for clarity.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::shouldAlwaysUsePluginDocument):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):

2013-05-09  Timothy Hatcher  <timothy@apple.com>

        Make dragging off a tab in Safari with a docked Inspector reattach the Inspector.

        https://webkit.org/b/115832
        rdar://problem/13605661

        Reviewed by Benjamin Poulain.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformBringToFront):
        If the Web Inspector is no longer in the same window as the inspected view,
        then we need to reopen the Inspector to get it attached to the right window.

2013-05-08  Anders Carlsson  <andersca@apple.com>

        Fix a typo in a comment.

        Rubber-stamped by Darin Adler.

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

2013-05-08  Anders Carlsson  <andersca@apple.com>

        Remove bogus StorageAreaMap assertions
        https://bugs.webkit.org/show_bug.cgi?id=115838

        Reviewed by Sam Weinig.

        It is possible for didGetValues, and didClear to be called even if m_hasPendingClear is false so remove the assertions.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::didGetValues):
        (WebKit::StorageAreaMap::didClear):

2013-05-08  Anders Carlsson  <andersca@apple.com>

        Handle incoming clear operations
        https://bugs.webkit.org/show_bug.cgi?id=115829

        Reviewed by Sam Weinig.

        Handle clear by building up a new storage map with our pending changes.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::applyChange):

2013-05-08  Anders Carlsson  <andersca@apple.com>

        Don't apply changes while we're clearing the database
        https://bugs.webkit.org/show_bug.cgi?id=115826

        Reviewed by Darin Adler.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::openDatabase):
        Only call didOpenDatabaseWithOrigin if we actually did open the database.

        (WebKit::LocalStorageDatabase::updateDatabaseWithChangedItems):
        Create the database if needed.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getValues):
        Send back a DidGetValues message.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        Initialize m_hasPendingClear.

        (WebKit::StorageAreaMap::clear):
        Set m_hasPendingClear to true.

        (WebKit::StorageAreaMap::resetValues):
        Set m_hasPendingClear back to false.

        (WebKit::StorageAreaMap::loadValuesIfNeeded):
        Set m_hasPendingClear to true so we'll ignore any changes that are already part of the returned items.

        (WebKit::StorageAreaMap::didGetValues):
        Set m_hasPendingClear back to false.

        (WebKit::StorageAreaMap::didClear):
        Set m_hasPendingClear back to false.

        (WebKit::StorageAreaMap::applyChange):
        Don't apply the change if m_hasPendingClear is true.

        * WebProcess/Storage/StorageAreaMap.messages.in:
        Add DidGetValues message.

2013-05-08  Andy Estes  <aestes@apple.com>

        [WebKit2] REGRESSION (Custom Protocols): Reproducible crash when navigating to URL with an invalid scheme
        https://bugs.webkit.org/show_bug.cgi?id=115790

        Reviewed by Alexey Proskuryakov.

        NSMutableSet does not support adding or removing nil objects, and
        WTF::HashSet does not support adding, removing, or checking for null
        WTF::Strings.

        For the NSMutableSet case, make sure that we don't try to add or remove
        nil NSStrings.

        For the WTF::HashSet case, NSURL will return a nil NSString if we ask
        it for its scheme when it is invalid, which we will convert to a null
        WTF::String. Don't try to check if our HashSet of registered schemes
        contains a null String.

        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (WebKit::CustomProtocolManager::registerScheme): Assert that the scheme
        isn't null. We reject null schemes at the WKBrowsingContextController level.
        (WebKit::CustomProtocolManager::unregisterScheme): Ditto.
        (WebKit::CustomProtocolManager::supportsScheme): If scheme is null, return false.
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (+[WKBrowsingContextController registerSchemeForCustomProtocol:]): Do not register a nil scheme.
        (+[WKBrowsingContextController unregisterSchemeForCustomProtocol:]): Ditto.

2013-05-08  Anders Carlsson  <andersca@apple.com>

        Apply remote changes to storage maps locally
        https://bugs.webkit.org/show_bug.cgi?id=115825

        Reviewed by Beth Dakin.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::resetValues):
        Clear the pending values map.

        (WebKit::StorageAreaMap::didSetItem):
        If we failed to set the item, forget everything we know about this storage map.
        Otherwise, remove the pending item.

        (WebKit::StorageAreaMap::didRemoveItem):
        Remove the pending item.

        (WebKit::StorageAreaMap::shouldApplyChangeForKey):
        Helper function that returns whether a change for a given key should be applied.

        (WebKit::StorageAreaMap::applyChange):
        Apply the change. Currently only adds and removes are handled.

        (WebKit::StorageAreaMap::dispatchStorageEvent):
        Apply the change locally as well if needed.

        * WebProcess/Storage/StorageAreaMap.h:

2013-05-08  Anders Carlsson  <andersca@apple.com>

        Assert at compile time that we don't pass Objective-C object pointers to adoptCF
        https://bugs.webkit.org/show_bug.cgi?id=115823

        Reviewed by Geoffrey Garen.

        Fix adoptNS/adoptCF mismatches. For the adopt(leakRef()) case we'd ideally want a static_pointer_cast overload for RetainPtr,
        but this will do for now.
        
        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::decode):

2013-05-08  Sam Weinig  <sam@webkit.org>

        Add SPI to determine if a plugin is sandboxed
        https://bugs.webkit.org/show_bug.cgi?id=115810

        Reviewed by Anders Carlsson.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::initializeSandbox):
        * Shared/Plugins/mac/PluginSandboxProfile.h: Added.
        * Shared/Plugins/mac/PluginSandboxProfile.mm: Added.
        (WebKit::pluginSandboxProfileDefaultDirectory):
        (WebKit::pluginSandboxProfileDirectories):
        (WebKit::pluginSandboxProfileName):
        (WebKit::pluginSandboxCommonProfile):
        (WebKit::pluginSandboxProfileForDirectory):
        (WebKit::pluginSandboxProfile):
        (WebKit::pluginHasSandboxProfileForDirectory):
        (WebKit::pluginHasSandboxProfile):
        Move sandbox code to its own file and refactor to use cocoa. Also adds pluginHasSandboxProfile function
        which uses the newly refactored code.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKPlugInInfoIsSandboxedKey):
        (createInfoDictionary):
        Add WKPlugInInfoIsSandboxedKey.

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

2013-05-08  Anders Carlsson  <andersca@apple.com>

        Safari unexpectedly quits with invalid message from the web process with message ID 0x323002f (WebPageProxy.DecidePolicyForNavigationAction)
        https://bugs.webkit.org/show_bug.cgi?id=115814
        <rdar://problem/12331258>

        Reviewed by Andreas Kling.

        To ensure that any asynchronous messages are delivered to the UI process before
        synchronous messages (except when doing so would lead to a deadlock), Call
        setOnlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage on the UI process connections.

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

2013-05-08  Tim Horton  <timothy_horton@apple.com>

        Coalesce WKView visibleRect changes
        https://bugs.webkit.org/show_bug.cgi?id=115792
        <rdar://problem/13776842>

        Reviewed by Simon Fraser.

        The system can call renewGState much more often than we actually want
        to update the WebProcess' notion of the exposed rect. Most importantly,
        within an autolayout pass it is called many times, and often sees
        [WKView visibleRect] be an intermediate value which will never be
        flushed to the screen. We only care about the final value, so we should
        wait until AppKit has finished - with a zero-delay timer - to inform the
        WebProcess of exposed rect changes.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Add exposedRectChangedTimer.
        (WebKit::WebPageProxy::close):
        Cancel exposedRectChangedTimer when tearing down the WebPageProxy.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        Add exposedRectChangedTimerFired, the timer itself, and two rects:
        the most recent exposed rect from the WKView, and the last one we actually
        sent across to the WebProcess.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::viewExposedRectChanged):
        Instead of immediately sending exposed rect changes to the WebProcess,
        start a zero-delay timer to do so.
        (WebKit::WebPageProxy::exposedRectChangedTimerFired):
        Once the zero-delay timer fires, send the new exposed rect to the WebProcess.

2013-05-08  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13776220> 13A451: PluginProcess(2225) deny file-read-data ~/Library/InputManagers
        <rdar://problem/13642510> PluginProcess logs sandbox violations initializing TextServices

        Reviewed by Anders Carlsson.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb: Allow more
        TextServices and NSInputManager directories.

2013-05-08  Anders Carlsson  <andersca@apple.com>

        Remove BinarySemaphoreWin.cpp.

        Rubber-stamped by Beth Dakin.

        BinarySemaphoreWin has been moved to WTF, but the original was never removed.

        * Platform/CoreIPC/win/BinarySemaphoreWin.cpp: Removed.

2013-05-08  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Make the WebNetworkInfoManager a supplement to the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=115716

        Reviewed by Andreas Kling.

        WebNetworkInfoManager should inherit from WebProcessSupplement and should be used
        as such by the WebProcess. This removes the need for the m_networkInfoManager member
        variable in the WebProcess class and brings the WebNetworkInfoManager in line with
        other manager classes of which instances are controlled by the WebProcess class.

        * WebProcess/NetworkInfo/WebNetworkInfoManager.cpp:
        (WebKit::WebNetworkInfoManager::supplementName): Specify the supplement's name.
        (WebKit):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.h:
        (WebKit): Alphabetically reorder the two forwarding declarations.
        (WebNetworkInfoManager): Inherit from the WebProcessSupplement interface.
        * WebProcess/WebCoreSupport/WebNetworkInfoClient.cpp:
        (WebKit::WebNetworkInfoClient::bandwidth): Access the WebNetworkInfoManager as a supplement.
        (WebKit::WebNetworkInfoClient::metered): Ditto.
        (WebKit::WebNetworkInfoClient::startUpdating): Ditto.
        (WebKit::WebNetworkInfoClient::stopUpdating): Ditto.
        (WebKit::WebNetworkInfoClient::networkInfoControllerDestroyed): Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Add the WebNetworkInfoManager instance as a supplement.
        * WebProcess/WebProcess.h:
        (WebProcess): Remove the m_networkInfoManager member variable and its getter method.

2013-05-08  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Make the WebBatteryManager a supplement to the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=115715

        Reviewed by Andreas Kling.

        WebBatteryManager should inherit from WebProcessSupplement and should be used as such
        by the WebProcess. This removes the need for the m_batteryManager member variable in
        the WebProcess class and brings the WebBatteryManager in line with other manager classes
        of which instances are controlled by the WebProcess class.

        * WebProcess/Battery/WebBatteryManager.cpp:
        (WebKit::WebBatteryManager::supplementName): Specify the supplement's name.
        (WebKit):
        * WebProcess/Battery/WebBatteryManager.h:
        (WebBatteryManager): Inherit from the WebProcessSupplement interface.
        * WebProcess/WebCoreSupport/WebBatteryClient.cpp:
        (WebKit::WebBatteryClient::startUpdating): Access the WebBatteryManager as a supplement.
        (WebKit::WebBatteryClient::stopUpdating): Ditto.
        (WebKit::WebBatteryClient::batteryControllerDestroyed): Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Add the WebBatteryManager instance as a supplement.
        * WebProcess/WebProcess.h:
        (WebProcess): Remove the m_batteryManager member variable and its getter method.

2013-05-06  Darin Adler  <darin@apple.com>

        Use adoptCF and adoptNS in more places
        https://bugs.webkit.org/show_bug.cgi?id=115657

        Reviewed by Sam Weinig.

        * Shared/Downloads/cfnet/DownloadCFNet.cpp:
        (WebKit::Download::useCredential):
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::cancel):
        (WebKit::Download::didDecideDestination):
        Use adoptCF and adoptNS.

2013-05-06  Sam Weinig  <sam@webkit.org>

        Add SPI to get an array of all the installed plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=115688

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (createInfoDictionary):
        Extract creation of info dictionary into helper.
        (WKContextCopyPlugInInfoForBundleIdentifier):
        Modified to use the new helper.
        (WKContextGetInfoForInstalledPlugIns):
        Added.

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Clean up KeyframeValueList and related classes
        https://bugs.webkit.org/show_bug.cgi?id=115738

        Reviewed by Simon Fraser.

        Update for WebCore changes.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::decode):

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Add and remove databases and origins from the database tracker
        https://bugs.webkit.org/show_bug.cgi?id=115752

        Reviewed by Andreas Kling.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        Rename m_databaseFilename to m_databasePath.

        (WebKit::LocalStorageDatabase::tryToOpenDatabase):
        Rename m_databaseFilename to m_databasePath.

        * UIProcess/Storage/LocalStorageDatabase.h:
        Rename m_databaseFilename to m_databasePath.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasePath):
        Rename databaseFilename to databasePath.

        (WebKit::LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin):
        Call addDatabaseWithOriginIdentifier.

        (WebKit::LocalStorageDatabaseTracker::deleteEmptyDatabaseWithOrigin):
        Call removeDatabaseWithOriginIdentifier.

        (WebKit::LocalStorageDatabaseTracker::trackerDatabasePath):
        Call databasePath instead of databaseFile.

        (WebKit::LocalStorageDatabaseTracker::openTrackerDatabase):
        Bail if the database is already open.

        (WebKit::LocalStorageDatabaseTracker::updateTrackerDatabaseFromLocalStorageDatabaseFiles):
        Call addDatabaseWithOriginIdentifier if this is an origin we don't know about.

        (WebKit::LocalStorageDatabaseTracker::addDatabaseWithOriginIdentifier):
        Add the database to the Origins table.

        (WebKit::LocalStorageDatabaseTracker::removeDatabaseWithOriginIdentifier):
        remove the database from the Origins table and delete it.

        (WebKit::LocalStorageDatabaseTracker::pathForDatabaseWithOriginIdentifier):
        Helper function that looks up a database path given its identifier.
        
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        Rename databaseFile to databasePath.

2013-05-07  Anders Carlsson  <andersca@apple.com>

        The storage database tracker should know when databases come and go
        https://bugs.webkit.org/show_bug.cgi?id=115748

        Reviewed by Andreas Kling.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::openDatabase):
        If we've opened the database successfully, call LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin.

        (WebKit::LocalStorageDatabase::tryToOpenDatabase):
        Remove a FIXME; we run all storage related things on the same thread.

        (WebKit::LocalStorageDatabase::close):
        Close the database. If it's empty, call LocalStorageDatabaseTracker::deleteEmptyDatabaseWithOrigin.

        (WebKit::LocalStorageDatabase::databaseIsEmpty):
        Helper function for determining whether a database is empty.
        
        * UIProcess/Storage/LocalStorageDatabase.h:
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databaseFilename):
        Add ".localstorage" to the filename.

        (WebKit::LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin):
        (WebKit::LocalStorageDatabaseTracker::deleteEmptyDatabaseWithOrigin):
        Add empty stubs.

2013-05-07  Brady Eidson  <beidson@apple.com>

        Add JoinExistingSession to the Networking XPC.
        <rdar://problem/12902288> and https://bugs.webkit.org/show_bug.cgi?id=114991

        Reviewed by Sam Weinig.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/Info.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info.plist:

2013-05-07  Anders Carlsson  <andersca@apple.com>

        REGRESSION(r149647): Assertion failure in LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal
        https://bugs.webkit.org/show_bug.cgi?id=115711

        Reviewed by Andreas Kling.

        Handle setting the local storage directory more than once.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal):
        Close the database (if necessary) and clear the origins map before importing the origin identifiers.

2013-05-07  Antoine Quint  <graouts@apple.com>

        Re-establish autostart timeout extension on user interaction
        https://bugs.webkit.org/show_bug.cgi?id=113232

        Change WebProcess::pluginDidReceiveUserInteraction to use a tuple of
        (pluginOrigin, pageOrigin, mimeType) arguments like the other similar
        WebProcess methods and gather these arguments from the PlugInView's
        plug-in element.

        Reviewed by Dean Jackson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginDidReceiveUserInteraction):
        Cast the m_pluginElement to a HTMLPlugInImageElement so we can obtain the
        tuple of (pluginOrigin, pageOrigin, mimeType) to pass to pluginDidReceiveUserInteraction().

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::plugInDidReceiveUserInteraction):
        * WebProcess/WebProcess.h:
        (WebProcess):
        Update method signature to a tuple of (pluginOrigin, pageOrigin, mimeType)
        and obtain the plug-in origin hash from that.

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Each local storage database should know its origin
        https://bugs.webkit.org/show_bug.cgi?id=115737

        Reviewed by Andreas Kling.

        Store the security origin in a member variable. It'll be used to communicate database state changes to the tracker.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        * UIProcess/Storage/LocalStorageDatabase.h:
        (LocalStorageDatabase):

2013-05-07  Brady Eidson  <beidson@apple.com>

        Remove some unnecessary soft linking in NetworkProcess. (Take 2)
        <rdar://problem/13821779> and https://bugs.webkit.org/show_bug.cgi?id=115683

        Reviewed by Dean Jackson and owned by Andreas Kling.

        As a followup to r149651, include the private headers conditionally.
        Also, fix a bug introduced with r149651 (bool vs CFBooleanRef).

        * NetworkProcess/mac/DiskCacheMonitor.mm:
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer):

2013-05-07  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add ewk APIs for setting and getting user agent
        https://bugs.webkit.org/show_bug.cgi?id=114429

        Reviewed by Andreas Kling.

        Provide ewk_view_user_agent_get/set APIs which wraps WK APIs.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::setUserAgent):
        * UIProcess/API/efl/EwkView.h:
        (EwkView::userAgent):
        (EwkView):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_user_agent_get):
        (ewk_view_user_agent_set):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2013-05-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        HashTraits<RefPtr<P> >::PeekType should be raw pointer for better performance
        https://bugs.webkit.org/show_bug.cgi?id=115646

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::hostForURL):
        * Shared/ImmutableDictionary.h:
        (WebKit::ImmutableDictionary::get):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageMap):
        (WebKit::StorageManager::cloneSessionStorageNamespaceInternal):
        (WebKit::StorageManager::findStorageArea):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::supplement):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::webBackForwardItem):
        (WebKit::WebProcessProxy::webFrame):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::ewkDownloadJob):
        * WebProcess/Network/WebResourceLoadScheduler.h:
        (WebKit::WebResourceLoadScheduler::webResourceLoaderForIdentifier):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::streamFromID):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::cancelStreamLoad):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::itemForID):
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::webUndoStep):
        (WebKit::WebPage::didFinishCheckingText):
        (WebKit::WebPage::didCancelCheckingText):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::webPage):
        (WebKit::WebProcess::webPageGroup):
            Updated accordingly to new HashMap<.., RefPtr>::get() semantics.

2013-05-06  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] Unreviewed buildfix after r149637.

        * Target.pri:

2013-05-06  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r149647): Assertion failure in LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal
        https://bugs.webkit.org/show_bug.cgi?id=115711    

        Rubber-stamped by Anders Carlsson.

        Temporarily removed the assertion. Andres is going to investigate it tomorrow.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal):

2013-05-06  Darin Adler  <darin@apple.com>

        Use OwnPtr instead of deleteAllValues in KeyframeValueList
        https://bugs.webkit.org/show_bug.cgi?id=115652

        Reviewed by Simon Fraser.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::ArgumentCoder<GraphicsLayerAnimation>::decode): Added adoptPtr
        next to new when calling KeyframeValueList::insert.

2013-05-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, build fix on EFL port

        * CMakeLists.txt: Add LocalStorageDatabaseTracker.cpp

2013-05-06  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r149637.

        * GNUmakefile.list.am: Add LocalStorageDatabaseTracker sources to
        the build.

2013-05-06  Brady Eidson  <beidson@apple.com>

        Remove some unnecessary soft linking in NetworkProcess.
        <rdar://problem/13821779> and https://bugs.webkit.org/show_bug.cgi?id=115683

        Reviewed by Sam Weinig.

        Replace some unneeded soft linking with forward declarations.

        * NetworkProcess/mac/DiskCacheMonitor.mm:
        (WebKit::DiskCacheMonitor::DiskCacheMonitor):
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromCFURLCachedResponse):
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer):

2013-05-06  Anders Carlsson  <andersca@apple.com>

        More work on LocalStorageDatabaseTracker
        https://bugs.webkit.org/show_bug.cgi?id=115680

        Reviewed by Andreas Kling.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databaseFilename):
        Call the new databaseFilename that takes a string.

        (WebKit::LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal):
        Assert that we don't call this more than once. Dispatch a call to import origin identifiers.

        (WebKit::LocalStorageDatabaseTracker::trackerDatabasePath):
        New helper function that returns the tracker database path.

        (WebKit::LocalStorageDatabaseTracker::openTrackerDatabase):
        Open the database and create the Origins table if needed.

        (WebKit::LocalStorageDatabaseTracker::importOriginIdentifiers):
        Open the database and import the origin identifiers from it, then synchronize it with whatever files are on disk.

        (WebKit::LocalStorageDatabaseTracker::updateTrackerDatabaseFromLocalStorageDatabaseFiles):
        Bring the tracker database up to date from the database files on disk.

        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        (LocalStorageDatabaseTracker):

2013-05-06  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13479806> [Mac] Pass information about open pages to LaunchServices
        https://bugs.webkit.org/show_bug.cgi?id=115665

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::didCommitLoad): Moved repeated
        check for frame->isMainFrame() to the top, matching oter similar functions.
        Call updateActivePages().

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed): Removed an obsolete FIXME.
        (WebKit::WebProcess::updateActivePages): Empty implementation for platforms
        that don't need to do anything here.

        * WebProcess/WebProcess.h: Added updateActivePages().

        * WebProcess/mac/WebProcessMac.mm: (WebKit::WebProcess::updateActivePages):
        Collect user visible origins of pages in the process and pass them to LS.

2013-05-06  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/13775921> Switch off a deprecated API.

        Reviewed by Oliver Hunt.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setProcessSuppressionEnabled): When disabling process suppression,
        begin an activity that doesn't disable idle sleep, sudden termination or automatic termination.
        When enabling process suppression, end the activity.

2013-05-06  Anders Carlsson  <andersca@apple.com>

        Move local storage directory handling to LocalStorageDatabaseTracker
        https://bugs.webkit.org/show_bug.cgi?id=115676

        Reviewed by Andreas Kling.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        * UIProcess/Storage/LocalStorageDatabase.h:
        (WebCore):
        (LocalStorageDatabase):
        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::setLocalStorageDirectory):
        (WebKit):
        (WebKit::LocalStorageDatabaseTracker::databaseFilename):
        (WebKit::LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h:
        (WebCore):
        (LocalStorageDatabaseTracker):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::StorageArea):
        (WebKit::StorageManager::setLocalStorageDirectory):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):

2013-05-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Add webkit_uri_scheme_request_finish_error
        https://bugs.webkit.org/show_bug.cgi?id=94316

        Reviewed by Anders Carlsson.

        This new method will allow to finish WebKitURISchemeRequest with a
        GError that will be passed to the WebKitWebView through the
        "load-failed" signal.

        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (webkit_uri_scheme_request_finish_error): Implement new method using
        WebSoupRequestManagerProxy::didFailURIRequest().
        * UIProcess/API/gtk/WebKitURISchemeRequest.h: Add new method header.
        * UIProcess/API/gtk/WebKitWebContext.cpp: Include the usage of the new
        method in the code example at webkit_web_context_register_uri_scheme()
        documentation.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Include the new
        method.
        * UIProcess/API/gtk/tests/LoadTrackingTest.cpp:
        (loadFailedCallback): Set m_error to monitor it from the tests.
        (LoadTrackingTest::loadURI): Clear m_error before each load.
        (LoadTrackingTest::loadHtml): Ditto.
        (LoadTrackingTest::loadPlainText): Ditto.
        (LoadTrackingTest::loadRequest): Ditto.
        (LoadTrackingTest::reload): Ditto.
        (LoadTrackingTest::goBack): Ditto.
        (LoadTrackingTest::goForward): Ditto.
        * UIProcess/API/gtk/tests/LoadTrackingTest.h: Add new member m_error.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (testWebContextURIScheme): Modify test to check the behavior of the new
        method.
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::didFailURIRequest):
        (WebKit): Implement new method using
        WebSoupRequestManager::DidFailURIRequest().
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy): Add new method header.
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit):
        (WebKit::WebSoupRequestManager::didFailURIRequest): Implement new method
        setting the error and completing the request.
        * WebProcess/soup/WebSoupRequestManager.h:
        (WebSoupRequestManager): Add new method header.
        * WebProcess/soup/WebSoupRequestManager.messages.in: Add new method
        signature.

2013-05-06  Anders Carlsson  <andersca@apple.com>

        Every LocalStorageDatabase should know about its tracker
        https://bugs.webkit.org/show_bug.cgi?id=115673

        Reviewed by Andreas Kling.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::create):
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        * UIProcess/Storage/LocalStorageDatabase.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::StorageArea):

2013-05-06  Anders Carlsson  <andersca@apple.com>

        Add LocalStorageDatabaseTracker class
        https://bugs.webkit.org/show_bug.cgi?id=115671

        Reviewed by Andreas Kling.

        Somewhat unsurprisingly, this class will be used for tracking local storage databases.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp: Added.
        (WebKit::LocalStorageDatabaseTracker::create):
        (WebKit::LocalStorageDatabaseTracker::LocalStorageDatabaseTracker):
        (WebKit::LocalStorageDatabaseTracker::~LocalStorageDatabaseTracker):
        * UIProcess/Storage/LocalStorageDatabaseTracker.h: Added.
        (LocalStorageDatabaseTracker):
        
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageManager):
        Create a local storage database tracker.

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

2013-05-06  Anders Carlsson  <andersca@apple.com>

        Handle closing the local storage database
        https://bugs.webkit.org/show_bug.cgi?id=115669

        Reviewed by Beth Dakin.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        Initialize m_isClosed.
    
        (WebKit::LocalStorageDatabase::~LocalStorageDatabase):
        Assert that m_isClosed is false.

        (WebKit::LocalStorageDatabase::close):
        Set m_isClosed to true and write any pending changes to disk.

        (WebKit::LocalStorageDatabase::updateDatabase):
        Compute the changed items and pass them to updateDatabaseWithChangedItems.

        (WebKit::LocalStorageDatabase::updateDatabaseWithChangedItems):
        Split out the code that actually writes to the database from updateDatabase and into this function.

        * UIProcess/Storage/LocalStorageDatabase.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::~StorageArea):
        Call close().

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Make the WebNetworkInfoManagerProxy a supplement to the WebContext
        https://bugs.webkit.org/show_bug.cgi?id=115654

        Reviewed by Andreas Kling.

        Rather than holding a RefPtr to the WebNetworkInfoManagerProxy object in WebContext, change the WebNetworkInfoManagerProxy
        to implement the WebContextSupplement interface and handle the object as such in WebContext, simplifying its
        construction and cleanup, removing the specific RefPtr member variable and its correlating getter method.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetNetworkInfoManager): Retrieve the WebNetworkInfoManagerProxy object from the suppplements of the WebContext.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Add the WebNetworkInfoManagerProxy object as a supplement instead of assigning it to
        the now-removed member variable.
        (WebKit::WebContext::~WebContext): No need for the specific cleanup, the equivalent is achieved when iterating through the
        supplements vector.
        (WebKit::WebContext::disconnectProcess): Ditto.
        * UIProcess/WebContext.h:
        (WebContext): Remove the WebNetworkInfoManagerProxy RefPtr member variable and its getter method.
        * UIProcess/WebNetworkInfoManagerProxy.cpp:
        (WebKit::WebNetworkInfoManagerProxy::supplementName): Specift the supplement's name.
        (WebKit::WebNetworkInfoManagerProxy::WebNetworkInfoManagerProxy): Initialize as a WebContextSupplement.
        (WebKit::WebNetworkInfoManagerProxy::providerDidChangeNetworkInformation): Adjust to use the context() method instead of
        accessing the private m_context directly.
        (WebKit::WebNetworkInfoManagerProxy::contextDestroyed): Stop updating when invoked.
        (WebKit::WebNetworkInfoManagerProxy::processDidClose): Ditto.
        (WebKit::WebNetworkInfoManagerProxy::refWebContextSupplement): Call APIObject::ref.
        (WebKit::WebNetworkInfoManagerProxy::derefWebContextSupplement): Call APIObject::deref.
        * UIProcess/WebNetworkInfoManagerProxy.h:
        (WebNetworkInfoManagerProxy): Inherit from WebContextSupplement, declare the newly-inherited methods.

2013-05-06  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13479806> [Mac] Pass plug-in bundle ID to LaunchServices
        https://bugs.webkit.org/show_bug.cgi?id=115483

        Reviewed by Darin Adler.

        * PluginProcess/PluginProcess.h: Added m_pluginBundleIdentifier. We now need it
        in multiple places, so it's easier to pre-compute it.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::loadSandboxProfileForDirectory): Changed to use precomputed bundle ID.
        (WebKit::loadSandboxProfile): Ditto.
        (WebKit::PluginProcess::platformInitializeProcess): Pre-compute bundle ID.
        (WebKit::PluginProcess::initializeProcessName): Pass it to LaunchServices.
        (WebKit::PluginProcess::initializeSandbox): Pass precomputed bundle ID instead of
        a path.

2013-05-06  Anders Carlsson  <andersca@apple.com>

        Handle removeItem and clear in LocalStorageDatabase
        https://bugs.webkit.org/show_bug.cgi?id=115664

        Reviewed by Darin Adler.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::removeItem):
        Call itemDidChange with a null value, indicating that we want to remove this item.

        (WebKit::LocalStorageDatabase::clear):
        Clear items, set m_shouldClearItems and schedule a database update.

        (WebKit::LocalStorageDatabase::updateDatabase):
        If m_shouldClearItems is true, clear all items.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::removeItem):
        Call through to the local storage database.

        (WebKit::StorageManager::StorageArea::clear):
        Ditto.

2013-05-06  Anders Carlsson  <andersca@apple.com>

        Write storage changes to disk
        https://bugs.webkit.org/show_bug.cgi?id=115660

        Reviewed by Andreas Kling.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        Initialize new member variables.

        (WebKit::LocalStorageDatabase::tryToOpenDatabase):
        Disable database threading checks.

        (WebKit::LocalStorageDatabase::importItems):
        Only import the items once.

        (WebKit::LocalStorageDatabase::setItem):
        Call itemDidChange.

        (WebKit::LocalStorageDatabase::itemDidChange):
        Record the change and schedule a database update.

        (WebKit::LocalStorageDatabase::scheduleDatabaseUpdate):
        Use WorkQueue::dispatchAfterDelay to schedule a datbase update.

        (WebKit::LocalStorageDatabase::updateDatabase):
        Write changes to disk. If there are more than 100 pending items, only write the first 100 and then schedule
        another database update for the remaining items.

        * UIProcess/Storage/LocalStorageDatabase.h:
        Add new member variables.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::setItem):
        Call LocalStorageDatabase::setItem.

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] Make the WebBatteryManagerProxy a supplement to the WebContext
        https://bugs.webkit.org/show_bug.cgi?id=115625

        Reviewed by Andreas Kling.

        Rather than holding a RefPtr to the WebBatteryManagerProxy object in WebContext, change the WebBatteryManagerProxy
        to implement the WebContextSupplement interface and handle the object as such in WebContext, simplifying its
        construction and cleanup, removing the specific RefPtr member variable and its correlating getter method.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetBatteryManager): Retrieve the WebBatteryManagerProxy object from the supplements of the WebContext.
        * UIProcess/WebBatteryManagerProxy.cpp:
        (WebKit::WebBatteryManagerProxy::supplementName): Specify the supplement's name.
        (WebKit::WebBatteryManagerProxy::WebBatteryManagerProxy): Initialize as a WebContextSupplementable.
        (WebKit::WebBatteryManagerProxy::providerDidChangeBatteryStatus): Adjust to use the context() method instead of accessing
        the private m_context directly.
        (WebKit::WebBatteryManagerProxy::providerUpdateBatteryStatus): Ditto.
        (WebKit::WebBatteryManagerProxy::contextDestroyed): Stop updating when invoked.
        (WebKit::WebBatteryManagerProxy::processDidClose): Ditto.
        (WebKit::WebBatteryManagerProxy::refWebContextSupplement): Call APIObject::ref.
        (WebKit::WebBatteryManagerProxy::derefWebContextSupplement): Call APIObject::deref.
        (WebKit::WebBatteryManagerProxy::startUpdating): Fire up the provider if not yet updating.
        (WebKit::WebBatteryManagerProxy::stopUpdating): Wind down the provider if updating.
        * UIProcess/WebBatteryManagerProxy.h:
        (WebBatteryManagerProxy): Inherit from WebContextSupplement, declare the newly-inherited methods.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Add the WebBatteryManagerProxy object as a supplement instead of assigning it to
        the now-removed member variable.
        (WebKit::WebContext::~WebContext): No need for the specific cleanup, the equivalent is achieved when iterating through the
        supplements vector.
        (WebKit::WebContext::disconnectProcess): Ditto.
        * UIProcess/WebContext.h:
        (WebContext): Remove the WebBatteryManagerProxy RefPtr member variable and its getter method.

2013-05-06  Antoine Quint  <graouts@apple.com>

        Manage the presentation of the snapshotted plug-in using JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=115548

        Reviewed by Dean Jackson.

        Expose a new plugInExtraScript method to support the injection of
        a JS file from the chrome client to customize the rendering of a
        snapshotted plug-in's shadow tree. Additionally, it is expected
        the chrome client will want to provide localized strings taking
        into account the snapshotted plug-in's mime-type, so we're adding
        this as a parameter to both plugInStartLabelTitle and
        plugInStartLabelSubtitle methods.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelTitle):
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelSubtitle):
        (WebKit::InjectedBundlePageUIClient::plugInExtraScript):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        (InjectedBundlePageUIClient):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::plugInStartLabelTitle):
        (WebKit::WebChromeClient::plugInStartLabelSubtitle):
        (WebKit::WebChromeClient::plugInExtraScript):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

2013-05-05  Chris Fleizach  <cfleizach@apple.com>

        WEB SPEECH: deny file-read-data /Library/Speech/Synthesizers
        https://bugs.webkit.org/show_bug.cgi?id=115621

        Reviewed by Alexey Proskuryakov.

        Allow access to the location where 3rd party speech synthesizers are stored.

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

2013-05-05  Tim Horton  <timothy_horton@apple.com>

        [wk2] Page Overlays: deviceScaleFactor doesn't update when the display changes
        https://bugs.webkit.org/show_bug.cgi?id=115577
        <rdar://problem/13762583>

        Reviewed by Darin Adler.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setDeviceScaleFactor):
        Invalidate the page overlay layers' device scale factor when
        TiledCoreAnimationDrawingArea is notified that it has changed.

2013-05-05  Anders Carlsson  <andersca@apple.com>

        Remove the Vector::append overload that takes a Vector
        https://bugs.webkit.org/show_bug.cgi?id=115535

        Reviewed by Andreas Kling.

        Use Vector::appendVector instead.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader):
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::dispatchMessages):
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::pluginsDirectories):

2013-05-04  Sam Weinig  <sam@webkit.org>

        Fix * placement in a few functions as noticed by Mark Rowe.

        Rubber-stamped by Dan Bernstein.

        * WebProcess/WebPage/PageBanner.h:
        (PageBanner):
        * WebProcess/WebPage/mac/PageBannerMac.mm:
        (WebKit::PageBanner::create):
        (WebKit::PageBanner::PageBanner):

2013-05-04  Sam Weinig  <sam@webkit.org>

        REGRESSION(r148312): Crash when calling WKPageClose(page) followed by WKPageTerminate(page)
        <rdar://problem/13702008>
        https://bugs.webkit.org/show_bug.cgi?id=115607

        Reviewed by Benjamin Poulain.

        API Test: WebKit2.CloseThenTerminate

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Don't try to reset the state if the page is closed, it won't work and its not worth it.

2013-05-04  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=115574
        Crash using new WKBundlePageSetHeaderBanner() API to set a banner to null

        Reviewed by Darin Adler.

        Don't call addToPage() on a null banner.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setHeaderPageBanner):
        (WebKit::WebPage::setFooterPageBanner):

2013-05-03  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13806836> Tweak sandbox profile.

        Reviewed by Dan Bernstein.

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

2013-05-03  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Changes being made to active annotation aren't saved when the PDF is exported
        https://bugs.webkit.org/show_bug.cgi?id=115544
        <rdar://problem/13801789>

        Reviewed by Alexey Proskuryakov.

        Commit changes to the active annotation (if there is one) before
        returning the live PDF data, so that said changes are represented
        in the exported or printed output.

        * WebProcess/Plugins/PDF/PDFPlugin.h: Override liveData.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::liveData): Commit the active annotation if there is one.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        (SimplePDFPlugin): Make liveData virtual.

2013-05-03  Tim Horton  <timothy_horton@apple.com>

        Web process crashes at WebPage::determinePrimarySnapshottedPlugInTimerFired + 8
        https://bugs.webkit.org/show_bug.cgi?id=115056
        <rdar://problem/13719543>

        Reviewed by Simon Fraser.

        Null-check m_page. In theory, we shouldn't get here, because we stop
        the timer at the only point where m_page is cleared, but crash logs say
        we're still crashing here.

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

2013-05-03  Tim Horton  <timothy_horton@apple.com>

        Remove some "what" comments from FindController
        https://bugs.webkit.org/show_bug.cgi?id=115546

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::countStringMatches):
        (WebKit::FindController::updateFindUIAfterPageScroll):
        (WebKit::FindController::willMoveToWebPage):
        (WebKit::FindController::mouseEvent):
        Remove or reword some comments.

2013-05-02  Andy Estes  <aestes@apple.com>

        [WK2][CustomProtocols] NSURLProtocolClient methods should be dispatched on NSURLConnection's resource loader run loop
        https://bugs.webkit.org/show_bug.cgi?id=115539

        Reviewed by Alexey Proskuryakov.

        It turns out that calling NSURLProtocolClient methods from a different
        thread than the one running the NSURLConnection run loop is unsafe.
        Although I can't capture it reliably in a test case, doing so can
        sometimes result in a load timing out because the call to
        -[NSURLProtocolClient URLProtocolDidFinishLoading:] was ignored by
        NSURLConnection.

        Fix this by dispatching these methods on the NSURLConnection resource
        load run loop. This matches where NSURLProtocolClient methods are
        dispatched by typical NSURLProtocol implementations, and in my testing
        this solves the timeout issue.

        * Shared/Network/CustomProtocols/CustomProtocolManager.h: Declare
        dispatchOnResourceLoaderRunLoop().
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        Declare +[NSURLConnection resourceLoaderRunLoop] on a category of
        NSURLConnection. Also include the header that declares it if it's present.
        (WebKit::CustomProtocolManager::didFailWithError): Call the
        NSURLProtocolClient method via dispatchOnResourceLoaderRunLoop().
        (WebKit::CustomProtocolManager::didLoadData): Ditto.
        (WebKit::CustomProtocolManager::didReceiveResponse): Ditto.
        (WebKit::CustomProtocolManager::didFinishLoading): Ditto.
        (WebKit::CustomProtocolManager::dispatchOnResourceLoaderRunLoop):
        Dispatch a block on the NSURLConnection resource loader run loop and
        then wake up the run loop.

2013-05-02  Brady Eidson  <beidson@apple.com>

        REGRESSION (149389) Main resources converted to downloads are immediately cancelled.
        <rdar://problem/13795795> and https://bugs.webkit.org/show_bug.cgi?id=115530

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload): Call didConvertHandleToDownload
          on the NetworkResourceLoader.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::didConvertHandleToDownload): Set m_handleConvertedToDownload to true.
        (WebKit::NetworkResourceLoader::abort): Only cancel the handle if m_handleConvertedToDownload is false.
        * NetworkProcess/NetworkResourceLoader.h:

2013-05-02  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13740375> Non-ASCII downloaded file names are garbled when using NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=115520

        Reviewed by Darin Adler.

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        Send the encoding fallback array over IPC, so that it's present when NetworkProcess does its loading.

2013-05-01  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r149422): -[WKBrowsingContextController loadFileURL:restrictToFilesWithin:]
        broken when second argument is nil
        https://bugs.webkit.org/show_bug.cgi?id=115505
        <rdar://problem/13787297>

        Reviewed by Darin Adler.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadFile): Pass a URL string
        to assumeReadAccessToBaseURL, as this is what it takes.

2013-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] WebKit doesn't enable or disable autocorrections when system preferences are changed
        https://bugs.webkit.org/show_bug.cgi?id=115463

        Reviewed by Darin Adler.

        Observe the default notification center and propagate the changes to TextCheckerState and
        to all WebProcesses when system preferences are updated.

        * UIProcess/TextChecker.h:
        * UIProcess/WebContext.h:
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::shouldAutomaticTextReplacementBeEnabled):
        (WebKit::shouldAutomaticSpellingCorrectionBeEnabled):
        (WebKit::shouldAutomaticQuoteSubstitutionBeEnabled):
        (WebKit::shouldAutomaticDashSubstitutionBeEnabled):
        (WebKit::initializeState):
        (WebKit::TextChecker::didChangeAutomaticTextReplacementEnabled):
        (WebKit::TextChecker::didChangeAutomaticSpellingCorrectionEnabled):
        (WebKit::TextChecker::didChangeAutomaticQuoteSubstitutionEnabled):
        (WebKit::TextChecker::didChangeAutomaticDashSubstitutionEnabled):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::registerNotificationObservers):
        (WebKit::WebContext::unregisterNotificationObservers):

2013-05-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [GTK] Fix build break after r149449
        https://bugs.webkit.org/show_bug.cgi?id=115500

        Reviewed by Gustavo Noronha Silva.

        Unreviewed GTK build fix

        * GNUmakefile.list.am: Added LocalStorageDatabase.[cpp|h] to the list of
        sources.

2013-05-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Documentation for webkit_web_view_run_javascript should indicate what happens when JavaScript is disabled
        https://bugs.webkit.org/show_bug.cgi?id=115492

        Reviewed by Xan Lopez.

        * UIProcess/API/gtk/WebKitWebView.cpp: Clarify the documentation.

2013-05-01  Tim Horton  <timothy_horton@apple.com>

        Move knowledge of PDF/PostScript MIME types into MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=115487

        Reviewed by Darin Adler.

        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        Remove pdfAndPostScriptMIMETypes.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::canShowMIMEType): Move PDF bits to WebPageProxy.
        (WebKit::WebFrameProxy::isDisplayingPDFDocument):
        Make use of WebCore's newfound knowledge of PDF and PostScript MIME types,
        so we don't have to duplicate it unnecessarily in WebKit2.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):
        Add code which used to be in WebFrameProxy::canShowMIMEType, and adapt it
        to use WebCore's knowledge of PDF and PostScript MIME types.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm:
        (WebKit::SimplePDFPlugin::pluginInfo):
        We previously supported the "text/pdf" MIME type for PDFViewController,
        so SimplePDFPlugin and PDFPlugin should support it as well.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Adopt MIMETypeRegistry::isPDFOrPostScriptMIMEType.

        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        Remove pdfAndPostScriptMIMETypes.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformPreferencesDidChange):
        Adopt getPDFAndPostScriptMIMETypes instead of duplicating the list in WebKit2.

2013-05-01  Anders Carlsson  <andersca@apple.com>

        Implement LocalStorageDatabase::importItems
        https://bugs.webkit.org/show_bug.cgi?id=115493

        Reviewed by Andreas Kling.

        Fetch items and insert them in the storage map.
        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::importItems):

2013-05-01  Anders Carlsson  <andersca@apple.com>

        Begin work on loading items from the local storage database
        https://bugs.webkit.org/show_bug.cgi?id=115489

        Reviewed by Andreas Kling.

        Some of the LocalStorageDatabase code is originally from WebCore,
        but has been simplified due to the fact that we don't need to load
        database data asynchronously since we're already running on a non-main thread.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::LocalStorageDatabase):
        (WebKit::LocalStorageDatabase::openDatabase):
        (WebKit::LocalStorageDatabase::tryToOpenDatabase):
        (WebKit::LocalStorageDatabase::migrateItemTableIfNeeded):
        (WebKit::LocalStorageDatabase::importItems):

        * UIProcess/Storage/LocalStorageDatabase.h:
        (WebKit::StorageManager::StorageArea::setItem):
        (WebKit::StorageManager::StorageArea::removeItem):
        (WebKit::StorageManager::StorageArea::clear):
        (WebKit::StorageManager::StorageArea::items):
        Call importItemsFromDatabase().
        
        (WebKit::StorageManager::StorageArea::importItemsFromDatabase):
        Ask the database to import the items.

2013-05-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Unreviewed buildfix after r149449.

        * CMakeLists.txt:

2013-05-01  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] Unreviewed buildfix after r149449.

        * Target.pri:

2013-05-01  Anders Carlsson  <andersca@apple.com>

        Add LocalStorageDatabase class
        https://bugs.webkit.org/show_bug.cgi?id=115486

        Reviewed by Sam Weinig.

        The LocalStorageDatabase class will persist local storage data to disk.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        * UIProcess/Storage/LocalStorageDatabase.h: Added.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        (WebKit::StorageManager::LocalStorageNamespace::storageManager):
        Add getter.

        (StorageManager::LocalStorageNamespace):
        (WebKit::StorageManager::StorageArea::StorageArea):
        If this is a local storage area, create a LocalStorageDatabase.

        (WebKit::StorageManager::LocalStorageNamespace::databaseFilename):
        Helper function for getting the name of the database for the given origin.

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

2013-05-01  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13781156> Launching NetworkProcess broken on some OS versions.

        Reviewed by Anders Carlsson.

        Adapt to LaunchServices changes.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setApplicationIsDaemon):

2013-05-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Add a setting to control whether or not accelerated 2D canvas is enabled
        https://bugs.webkit.org/show_bug.cgi?id=114394

        Reviewed by Anders Carlsson.

        Add a setting to control accelerated 2D canvas, which determines whether
        or not to consider rendering HTML canvas with hardware acceleration.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Added support for enable-accelerated-2d-canvas property.
        (webKitSettingsGetProperty): Added support for enable-accelerated-2d-canvas property.
        (webkit_settings_class_init): Added support for enable-accelerated-2d-canvas property.
        (webkit_settings_get_enable_accelerated_2d_canvas): Added.
        (webkit_settings_set_enable_accelerated_2d_canvas): Added.
        * UIProcess/API/gtk/WebKitSettings.h: New methods.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Added new methods to the documentation.
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings): Added a simple test for the setting.

2013-04-30  Jer Noble  <jer.noble@apple.com>

        Entering full screen mode shows desktop linen instead of WKView the first time.
        https://bugs.webkit.org/show_bug.cgi?id=115433
        <rdar://problem/13774540>

        Reviewed by Eric Carlson.

        For certain types of windows created by subclasses of WKView, the window in question fails to paint
        when created with a zero-size rect. Create the window with an initial size of the active screen frame
        as that is the likely destination size.

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

2013-05-01  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt][Win] Fix build after r149416.
        https://bugs.webkit.org/show_bug.cgi?id=115474

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::dispatchSentMessagesUntil):

2013-05-01  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed GTK build fix after r149417.

        * GNUmakefile.list.am: Added PageBanner.[cpp|h] to the list of
        sources.

2013-05-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Unreviewed buildfix after r149416 and r149417.

        Unreviewed build fix.

        * CMakeLists.txt:

2013-05-01  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] Unreviewed buildfix after r149416 and r149417.

        * Target.pri:

2013-04-30  Dongwoo Joshua Im  <dw.im@samsung.com>

        [EFL] Unreviewed, EFL build fix after r149416
        https://bugs.webkit.org/show_bug.cgi?id=115467

        Unreviewed build fix.

        * CMakeLists.txt: Remove non-existing file, BinarySemaphore.cpp, from the list.

2013-04-30  Simon Cooper  <scooper@apple.com>

        ipc-posix-shm backwards compatibility 
        https://bugs.webkit.org/show_bug.cgi?id=115448
        <rdar://problem/13743037>

        Reviewed by Alexey Proskuryakov.

        Add compatibility for older ipc-posix-shm operations, but prefer the
        newer names when writing profiles.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2013-04-30  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r149416.

        * GNUmakefile.list.am: Remove references to non-existant
        BinarySemaphore module.

2013-04-28  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13574729> Implement file path restrictions in WebKit Objective C API
        https://bugs.webkit.org/show_bug.cgi?id=115321

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h: 
        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadFile):
        * UIProcess/WebPageProxy.h:
        Added and implemented a C API to load a file while only opening sandbox for
        a specific directory.

        * UIProcess/API/mac/WKBrowsingContextController.h: Fixed a typo in a comment.

        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController loadFileURL:restrictToFilesWithin:]):
        Respect allowedDirectory argument. Updated the function to raise an exception for
        incorrect input, as decribed in header file.

2013-04-29  Sam Weinig  <sam@webkit.org>

        Add API to allow WebKit2 banners to get mouse events
        https://bugs.webkit.org/show_bug.cgi?id=115395

        Reviewed by Beth Dakin.

        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        Add banner type.

        * WebKit2.xcodeproj/project.pbxproj:
        Add files.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        Add conversion.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetTopOverhangImage):
        (WKBundlePageSetBottomOverhangImage):
        Fix parameter names to be consistent.

        (WKBundlePageSetHeaderBanner):
        (WKBundlePageSetFooterBanner):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePageBanner.cpp: Added.
        (WKBundlePageBannerGetTypeID):
        * WebProcess/InjectedBundle/API/c/WKBundlePageBanner.h: Added.
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.h: Added.
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePageBannerMac.mm: Added.
        (PageBannerClientImpl):
        (PageBannerClientImpl::create):
        (PageBannerClientImpl::PageBannerClientImpl):
        (PageBannerClientImpl::pageBannerDestroyed):
        (PageBannerClientImpl::mouseEvent):
        (WKBundlePageBannerCreateBannerWithCALayer):
        (WKBundlePageBannerGetLayer):
        Add banner API.

        * WebProcess/WebPage/PageBanner.h: Added.
        * WebProcess/WebPage/PageBanner.cpp: Added.
        (WebKit::PageBanner::~PageBanner):
        (WebKit::PageBanner::addToPage):
        (WebKit::PageBanner::detachFromPage):
        (WebKit::PageBanner::didChangeDeviceScaleFactor):
        (WebKit::PageBanner::mouseEvent):
        Add non-mac implementations.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::setHeaderPageBanner):
        (WebKit::WebPage::headerPageBanner):
        (WebKit::WebPage::setFooterPageBanner):
        (WebKit::WebPage::footerPageBanner):
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::mouseEventSyncForTesting):
        * WebProcess/WebPage/WebPage.h:
        Add banner setter/getters and give the banners a chance to handle mouse events.

        * WebProcess/WebPage/mac/PageBannerMac.mm: Added.
        (WebKit::PageBanner::create):
        (WebKit::PageBanner::PageBanner):
        (WebKit::PageBanner::addToPage):
        (WebKit::PageBanner::detachFromPage):
        (WebKit::PageBanner::didChangeDeviceScaleFactor):
        (WebKit::PageBanner::mouseEvent):
        (WebKit::PageBanner::layer):
        Add Mac implementation.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::updateHeaderAndFooterLayersForDeviceScaleChange):
        Notify banners when the device scale changes.

2013-04-30  Anders Carlsson  <andersca@apple.com>

        Remove the WebKit2 BinarySemaphore class
        https://bugs.webkit.org/show_bug.cgi?id=115458

        Reviewed by Benjamin Poulain.

        Remove the WK2 specific BinarySemaphore class and use the one from WTF.

        * Platform/CoreIPC/BinarySemaphore.cpp: Removed.
        * Platform/CoreIPC/BinarySemaphore.h: Removed.
        * Platform/CoreIPC/Connection.cpp:
        * Platform/CoreIPC/Connection.h:
        * WebKit2.xcodeproj/project.pbxproj:

2013-04-30  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13757475> WebProcess deny ipc-posix-shm-read-data CFPBS:A2:

        Reviewed by Anders Carlsson.

        * WebProcess/com.apple.WebProcess.sb.in: Allow pbs shared memory.

2013-04-30  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Don't open window server connection in network process
        https://bugs.webkit.org/show_bug.cgi?id=115446

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcess):
        (WebKit::NetworkProcess::initializeProcessName):
        Instead of shutting down a connection after setting process name, just prevent
        it from being created.

        * Shared/ChildProcess.h:
        * Shared/mac/ChildProcessMac.mm: (WebKit::ChildProcess::setApplicationIsDaemon):
        Expose a function for client processes to call if they don't run an NSApplication
        run loop.

        * OfflineStorageProcess/OfflineStorageProcess.cpp:
        (WebKit::OfflineStorageProcess::initializeProcess):
        * OfflineStorageProcess/OfflineStorageProcess.h:
        * OfflineStorageProcess/mac/OfflineStorageProcessMac.mm:
        (WebKit::OfflineStorageProcess::initializeProcess):
        (WebKit::OfflineStorageProcess::initializeProcessName):
        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        (WebKit::SharedWorkerProcess::initializeProcess):
        (WebKit::SharedWorkerProcess::initializeProcessName):
        * SharedWorkerProcess/SharedWorkerProcess.h:
        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm:
        (WebKit::SharedWorkerProcess::initializeProcess):
        (WebKit::SharedWorkerProcess::initializeProcessName):
        Match NetworkProcess for consistency.

        * WebProcess/mac/WebProcessMac.mm: (WebKit::WebProcess::initializeProcessName):
        Don't null check UI process name. First, it can't be null, and second, some other
        processes already don't have this check.

2013-04-30  Tim Horton  <timothy_horton@apple.com>

        Disable deprecation warnings around some NSProcessInfo API.

        Rubber-stamped by Brady Eidson.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setProcessSuppressionEnabled):

2013-04-30  Brady Eidson  <beidson@apple.com>

        [WK2] Threads get stuck in NetworkProcess when canceling loads in WebProcess.
        <rdar://problem/13757687> and https://bugs.webkit.org/show_bug.cgi?id=115319

        Written and reviewed by both Alexey Proskuryakov and Brady Eidson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose): Call abort() on all loaders
          instead of connectionToWebProcessDidClose()
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier): Instead of removing
          the loader from the scheduler, call abort() which will also end up removing it.

        * NetworkProcess/SchedulableLoader.h: Add a virtual abort() call.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure): Added a messageFlags argument so 
          callers can pass DispatchMessageEvenWhenWaitingForSyncReply.
        (WebKit::NetworkResourceLoader::abort): Combined "abortInProgressLoad" and "cleanup" to
          be a general purpose "cancel"
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::willSendRequestAsync):
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        * NetworkProcess/NetworkResourceLoader.h:

        * NetworkProcess/SyncNetworkResourceLoader.cpp:
        (WebKit::SyncNetworkResourceLoader::abort):
        * NetworkProcess/SyncNetworkResourceLoader.h:

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::remove): Remove an obsolete/incorrect comment.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo): Add comment stressing
          the importance of this null check so it's not removed again.

2013-04-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WK2][GTK] MiniBrowser won't play video in <embed> tag
        https://bugs.webkit.org/show_bug.cgi?id=113107

        Reviewed by Anders Carlsson.

        The wrong clip region is used for windowed plugins, because it's
        translated to window frame coords again.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformGeometryDidChange): Do not move
        the current clip region.

2013-04-30  Timothy Hatcher  <timothy@apple.com>

        Make the Inspector dock to right button work in the WebKit nightlies on Safari 6.0.4.

        https://webkit.org/b/115428

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow): Reduce the required Safari version.
        (WebKit::WebInspectorProxy::platformDetach): Simplify the frame restoring code so it
        works on Safari 6.0.4.

2013-04-30  Artur Moryc  <a.moryc@samsung.com>

        [WK2][EFL] Spelling marker disappears while selection is being changed
        https://bugs.webkit.org/show_bug.cgi?id=115165

        Reviewed by Anders Carlsson.

        The marker for a misspelled word disappears while the cursor is being navigated along the word.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldEraseMarkersAfterChangeSelection):

2013-04-30  Zalan Bujtas  <zalan@apple.com>

        Animations fail to start on http://www.google.com/insidesearch/howsearchworks/thestory/
        https://bugs.webkit.org/show_bug.cgi?id=111244

        Reviewed by David Kilzer.
        
        Enable performance.now() as a minimal subset of Web Timing API. 
        It returns DOMHighResTimeStamp, a monotonically increasing value representing the 
        number of milliseconds from the start of the navigation of the current document.
        JS libraries use this API to check against the requestAnimationFrame() timestamp.

        * Configurations/FeatureDefines.xcconfig:

2013-04-29  Chris Fleizach  <cfleizach@apple.com>

        WEB SPEECH: need to identify the default voice per language
        https://bugs.webkit.org/show_bug.cgi?id=115366

        Reviewed by Tim Horton.

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

2013-04-29  Benjamin Poulain  <benjamin@webkit.org>

        [WK2] Streamline the use of strings in WebProcess::getWebCoreStatistics
        https://bugs.webkit.org/show_bug.cgi?id=115315

        Reviewed by Geoffrey Garen.

        Remove a couple of unjustified DEFINE_STATIC_LOCAL.
        Use ASCIILiteral when allocating new String.

        * WebProcess/WebProcess.cpp:
        (WebKit::getWebCoreMemoryCacheStatistics):
        (WebKit::WebProcess::getWebCoreStatistics):

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Remove StorageTracker::originsLoaded
        https://bugs.webkit.org/show_bug.cgi?id=115382

        Reviewed by Sam Weinig.

        Add m_didFinishLoadingOrigins.

        * WebProcess/Storage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::WebKeyValueStorageManager):
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::didFinishLoadingOrigins):
        * WebProcess/Storage/WebKeyValueStorageManager.h:
        (WebKeyValueStorageManager):

2013-04-29  Chris Fleizach  <cfleizach@apple.com>

        WEB SPEECH Update seatbelt profile to work with speech synthesis
        https://bugs.webkit.org/show_bug.cgi?id=115368

        Reviewed by Alexey Proskuryakov.

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

2013-04-28  Beth Dakin  <bdakin@apple.com>

        Need a LayoutMilestone to fire when we have done our first paint after suppressing 
        incremental layout
        https://bugs.webkit.org/show_bug.cgi?id=115330
        -and corresponding-
        <rdar://problem/12722365>

        Reviewed by Simon Fraser.

        Two new millstones.
        * Shared/API/c/WKPageLoadTypes.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toWKLayoutMilestones):
        (WebKit::toLayoutMilestones):

        This null-check is necessary now since this code ends up running at 
        WebFrame::init() time while we're setting up the Document. 
        setVisualUpdatesAllowed(true) has always been called as a part of that process, 
        and now the updateLayout(), ends up calling this code too, but we don't actually 
        have a mainFrame yet since it's still being created.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::findLargestFrameInFrameSet):

2013-04-29  Brady Eidson  <beidson@apple.com>

        REGRESSION: We see authentication challenge sheets for favicon requests.
        <rdar://problem/13753470> and https://bugs.webkit.org/show_bug.cgi?id=115288

        Reviewed by Alexey Proskuryakov.

        Have NetworkResourceLoadParameters remember the ClientCredentialPolicy:
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:

        Pass along the ClientCredentialPolicy to the NetworkProcess:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

        Have the SchedulableLoader remember the ClientCredentialPolicy:
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader):
        * NetworkProcess/SchedulableLoader.h:
        (WebKit::SchedulableLoader::clientCredentialPolicy):

        Don’t message for credentials if the ClientCredentialPolicy forbids it:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveAuthenticationChallenge):
        * NetworkProcess/NetworkResourceLoader.h:

        Update for the new loadResourceSynchronously signature (which is still a no-op on the NetworkProcess side):
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::loadResourceSynchronously):
        * NetworkProcess/NetworkProcessPlatformStrategies.h:

2013-04-29  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix. Point the Network process towards its own version of SecItemShim.dyld.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info.plist:

2013-04-29  Alexey Proskuryakov  <ap@apple.com>

        Threads get stuck in NetworkProcess when canceling loads
        https://bugs.webkit.org/show_bug.cgi?id=115319

        Backing out part of the fix, as it's causing crashes.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo):

2013-04-29  Noam Rosenthal  <noam@webkit.org>

        Get rid of "non-composited contents" in CoordinatedLayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=110355

        Reviewed by Jocelyn Turcotte.

        Instead of using a special non-composited contents layer, we let RenderLayerCompositor create
        a proper GraphicsLayer for that content.
        CoordinatedLayerTreeHost now needs to find the main contents layer for the purpose of setting
        the trajectory vector and applying the cover rect.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
            Don't create the non-composited layer, instead keep a raw pointer to the root
            compositing layer created by the WebCore compositor.

        (WebKit::CoordinatedLayerTreeHost::setNonCompositedContentsNeedDisplay):
        (WebKit::CoordinatedLayerTreeHost::setNonCompositedContentsNeedDisplayInRect):
        (WebKit::CoordinatedLayerTreeHost::scrollNonCompositedContents):
        (WebKit::CoordinatedLayerTreeHost::sizeDidChange):
        (WebKit::CoordinatedLayerTreeHost::paintContents):
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
            Remove non-composited layer specialization.

2013-04-29  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] Build fix. Enabling c++11 for Qt WK2 after r149259.
        https://bugs.webkit.org/show_bug.cgi?id=115345

        Reviewed by Anders Carlsson.

        * WebKit2.pri:

2013-04-29  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [WK2][EFL] Skip cancel fullscreen request if not made from FullScreen API
        https://bugs.webkit.org/show_bug.cgi?id=108201

        Reviewed by Andreas Kling.

        Adds a check on WebFullScreenManagerProxyEfl whether fullscreen mode was
        set from FullScreen API or not, so it can skip cancelling fullscreen
        request if fullscreen mode was set by application, preventing
        WebProcess' FullScreenManager from crashing.

        EFL unit test available: ewk_view_cancel_full_screen_request.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewExitFullScreen):
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        WKViewExitFullScreen now returns a bool, indicating whether the
        operation has succeeded or not.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_fullscreen_exit):
        Skip request if not in fullscreen mode.

        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        Added ewk_view_cancel_full_screen_request unit test.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::exitFullScreen):
        * UIProcess/CoordinatedGraphics/WebView.h:
        (WebView):
        exitFullScreen now returns a bool, indicating whether the operation has
        succeeded or not.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::WebFullScreenManagerProxy):
        * UIProcess/WebFullScreenManagerProxy.h:
        (WebFullScreenManagerProxy):
        * UIProcess/efl/WebFullScreenManagerProxyEfl.cpp:
        (WebKit::WebFullScreenManagerProxy::isFullScreen):
        (WebKit::WebFullScreenManagerProxy::enterFullScreen):
        (WebKit::WebFullScreenManagerProxy::exitFullScreen):
        Added m_hasRequestedFullScreen boolean flag to EFL port. Used to
        indicate if fullscreen mode is enabled, as well as sanity checks on both
        {enter,exit}FullScreen functions.

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Stop using range-based for syntax
        https://bugs.webkit.org/show_bug.cgi?id=115356

        Reviewed by Andreas Kling.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didClose):

2013-04-29  Sergio Correia  <sergio.correia@openbossa.org>

        [EFL][WK2]: WebProcessMain: hide call to ecore_x_shutdown() under guard
        https://bugs.webkit.org/show_bug.cgi?id=115295

        Reviewed by Andreas Kling.

        Since the mentioned function is declared in a header that is included
        conditionally depending on HAVE_ECORE_X being defined.

        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2013-04-29  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2] Remove build warnings by -Wunused-parameter
        https://bugs.webkit.org/show_bug.cgi?id=115344

        Reviewed by Noam Rosenthal.

        Fix build warnigs -Wunused-parameter.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::createContextMenuProxy):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::waitForPossibleGeometryUpdate):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::connectionWillClose):

2013-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header files to compilation.

2013-04-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed fix build break on EFL port since r149259.

        In EFL port, there is a non-compatible code when compiling based on C++11. This is a trivial build fix.

        I got a confirm from Sam about landing a trivial build fix patch without sign-off from
        WK2 owner.

        * UIProcess/API/efl/EwkViewCallbacks.h:

2013-04-28  Dean Jackson  <dino@apple.com>

        [Mac] Disable canvas backing store scaling (HIGH_DPI_CANVAS)
        https://bugs.webkit.org/show_bug.cgi?id=115310

        Reviewed by Simon Fraser.

        Remove ENABLE_HIGH_DPI_CANVAS_macosx.

        * Configurations/FeatureDefines.xcconfig:

2013-04-28  Sam Weinig  <sam@webkit.org>

        [WebKit2] Adopt new API for detecting window occlusion
        https://bugs.webkit.org/show_bug.cgi?id=115334

        Reviewed by Simon Fraser.

        Switch off of WKSI for window occlusion and use the new NSWindowDidChangeOcclusionState notification
        instead.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]):
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]):
        (-[WKView viewWillMoveToWindow:]):
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _windowDidOrderOnScreen:]):
        (-[WKView _windowDidChangeOcclusionState:]):
        (-[WKView _setIsWindowOccluded:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (-[WKView windowOcclusionDetectionEnabled]):
        (-[WKView setWindowOcclusionDetectionEnabled:]):
        Only compile occlusion detection code where supported and remove calls to register/deregister
        for detection callbacks, now that NSWindow will handle that for us. We also no longer need to
        track all the WKViews, as that was only required to lookup the view that matched the window number
        returned from the occlusion callback.

2013-04-26  Anders Carlsson  <andersca@apple.com>

        Use OwnPtr<PluginControllerProxy> for storing plug-in controllers in WebProcessConnection
        https://bugs.webkit.org/show_bug.cgi?id=115259

        Reviewed by Andreas Kling.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::addPluginControllerProxy):
        (WebKit::WebProcessConnection::removePluginControllerProxy):
        (WebKit::WebProcessConnection::didClose):
        * PluginProcess/WebProcessConnection.h:
        (WebProcessConnection):

2013-04-27  Jessie Berlin  <jberlin@apple.com>

        Build fix.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        Do not declare another variable with the same name.

2013-04-27  Darin Adler  <darin@apple.com>

        Move from constructor and member function adoptCF/NS to free function adoptCF/NS.
        https://bugs.webkit.org/show_bug.cgi?id=115307

        Reviewed by Geoffrey Garen.

        This change was done by a global replace followed by compiling and inspecting for
        cases that needed to be tweaked by hand.

        * Platform/cg/CGUtilities.cpp:
        (WebKit::paintBitmapContext):
        * Platform/mac/ModuleMac.mm:
        (WebKit::Module::load):
        (WebKit::Module::platformFunctionPointer):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::initializeSandbox):
        * Shared/API/c/mac/WKURLRequestNS.mm:
        (WKURLRequestCreateWithNSURLRequest):
        * Shared/API/c/mac/WKURLResponseNS.mm:
        (WKURLResponseCreateWithNSURLResponse):
        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.h:
        (WebKit::ChildProcessMain):
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginArchitecture):
        (WebKit::contentsOfPropertyListAtURL):
        (WebKit::getMIMETypesFromPluginBundle):
        (WebKit::getStringListResource):
        (WebKit::NetscapePluginModule::getPluginInfo):
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::Handle::tryWrapInSharedBuffer):
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::decode):
        (CoreIPC::encode):
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::createGraphicsContext):
        (WebKit::ShareableBitmap::makeCGImageCopy):
        (WebKit::ShareableBitmap::makeCGImage):
        (WebKit::ShareableBitmap::createCGImage):
        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::decode):
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::dump):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        * UIProcess/API/mac/FindIndicatorWindow.mm:
        (WebKit::FindIndicatorWindow::setFindIndicator):
        (WebKit::FindIndicatorWindow::startFadeOutTimerFired):
        * UIProcess/API/mac/PDFViewController.mm:
        (-[WKPDFView initWithFrame:PDFViewController:]):
        (WebKit::PDFViewController::PDFViewController):
        (WebKit::convertPostScriptDataSourceToPDF):
        (WebKit::PDFViewController::setPDFDocumentData):
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::setDragImage):
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (didFailProvisionalLoadWithErrorForFrame):
        (didFailLoadWithErrorForFrame):
        * UIProcess/API/mac/WKConnection.mm:
        (didReceiveMessage):
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView drawRect:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView browsingContextController]):
        (-[WKView _setAcceleratedCompositingModeRootLayer:]):
        (-[WKView _setPromisedData:WebCore::withFileName:withExtension:withTitle:withURL:withVisibleURL:withArchive:WebCore::forPasteboard:]):
        (-[WKView namesOfPromisedFilesDroppedAtDestination:]):
        (-[WKView fullScreenWindowController]):
        (-[WKView _executeSavedCommandBySelector:]):
        (-[WKView printOperationWithPrintInfo:forFrame:]):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::createProcess):
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::pluginPathsInDirectory):
        (WebKit::PluginInfoStore::getMIMETypeForExtension):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::beginModal):
        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::sessionStateData):
        (WebKit::WebPageProxy::restoreFromSessionStateData):
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):
        * UIProcess/cf/WebPreferencesCF.cpp:
        (WebKit::cfStringFromWebCoreString):
        (WebKit::setStringValueIfInUserDefaults):
        (WebKit::setBoolValueIfInUserDefaults):
        (WebKit::setUInt32ValueIfInUserDefaults):
        (WebKit::setDoubleValueIfInUserDefaults):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey):
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        * UIProcess/mac/BackingStoreMac.mm:
        (WebKit::BackingStore::resetScrolledRect):
        (WebKit::BackingStore::backingStoreContext):
        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::handleAcceptedReplacement):
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]):
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::nsMenuItemVector):
        (WebKit::WebContextMenuProxyMac::populate):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::populate):
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::load):
        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NetscapePlugin::updatePluginLayer):
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
        (WebKit::PluginProxy::pluginLayer):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::PDFPlugin):
        (WebKit::PDFPlugin::createScrollbar):
        (WebKit::PDFPlugin::pdfDocumentDidLoad):
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm:
        (getAllScriptsInPDFDocument):
        (WebKit::SimplePDFPlugin::pdfDocumentDidLoad):
        (WebKit::SimplePDFPlugin::streamDidReceiveData):
        (WebKit::SimplePDFPlugin::manualStreamDidReceiveData):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp:
        (WebKit::WebResourceCacheManager::cfURLCacheHostNames):
        (WebKit::WebResourceCacheManager::clearCFURLCacheForHostNames):
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::createNSError):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawPagesToPDF):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForRange):
        (WebKit::cachedResponseForURL):
        (WebKit::WebPage::drawPagesToPDFFromPDFDocument):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformSetCacheModel):
        Use adoptCF and adoptNS free functions.

2013-04-27  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13757007> Crashes in NetworkResourceLoader::didReceiveResponseAsync
        https://bugs.webkit.org/show_bug.cgi?id=115318

        Reviewed by Darin Adler.

        sendAbortingOnFailure may actually fail, and abort the request, making m_handle null.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync): Null check m_handle after
        sending a message, because the request will cancelled when connection is invalid.
        (WebKit::NetworkResourceLoader::didReceiveBuffer): Assert that m_handle matches
        the handle that we are called with.
        (WebKit::NetworkResourceLoader::didFinishLoading): Ditto.
        (WebKit::NetworkResourceLoader::didFail): Ditto.
        (WebKit::NetworkResourceLoader::willSendRequestAsync): Ditto.
        (WebKit::NetworkResourceLoader::didSendData): Ditto.
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorage): Ditto.
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorageAsync): Ditto.
        (WebKit::NetworkResourceLoader::didReceiveAuthenticationChallenge): Ditto.
        (WebKit::NetworkResourceLoader::didCancelAuthenticationChallenge): Ditto.
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync): Ditto.

2013-04-27  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13757687> Threads get stuck in NetworkProcess when canceling loads
        https://bugs.webkit.org/show_bug.cgi?id=115319

        Reviewed by Darin Adler.

        WebResourceLoader was second-guessing NetworkProcess as to whether it needs a response
        to DidReceiveResponseWithCertificateInfo, and it was guessing wrong if the load was
        alrady canceled on WebProcess side.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

2013-04-27  Alexey Proskuryakov  <ap@apple.com>

        Regression tests that reference a non-local resource crash with NetworkProcess enabled
        https://bugs.webkit.org/show_bug.cgi?id=115290

        Reviewed by Sam Weinig.

        Covered by fast/dom/icon-url-change.html and many other existing tests.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::remove): Handle this case. Architecturally, it
        would be better if SubresourceLoad::create just created an object an didn't do
        further checks before returning a pointer, but changing that is beyond the scope
        of the fix.

2013-04-26  Yael Aharon  <yael.aharon@intel.com>

        [WK2][EFL] Build break after r149212
        https://bugs.webkit.org/show_bug.cgi?id=115294

        Reviewed by Simon Fraser.
        r144672 bumped up the revision of WKContextClient API, and introduced a version array
        APIClientTraits<WKContextClient>::interfaceSizesByVersion .
        In r149212, the version was bumped back down and the version array was emptied but not removed.
        This causes a warning "array subscript is below array bounds", and in EFL the warning is
        treated as error.

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:

2013-04-26  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add methods to add a user style sheet to the WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=99081

        Reviewed by Carlos Garcia Campos, Gustavo Noronha Silva, and Benjamin Poulain.

        Add methods to WebKitWebViewGroup to add and remove user style sheets.
        This allows clients to inject style sheets into pages with a set of
        rules for when those style sheets apply.

        * UIProcess/API/gtk/WebKitWebViewGroup.cpp:
        (toImmutableArray): Added this helper which converts the GList* parameters into
        ImmutableArrays for use with the WebKit2 internal API.
        (webkit_web_view_group_add_user_style_sheet): Added new API for adding a style sheet.
        (webkit_web_view_group_remove_all_user_style_sheets): Add new API for clearing out all style sheets.
        * UIProcess/API/gtk/WebKitWebViewGroup.h: Added new method declarations.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Added new API to the documentation.
        * UIProcess/API/gtk/tests/TestWebKitWebViewGroup.cpp: Added a test for the new API.
        (isStyleSheetInjectedForURLAtPath): Function to check whether the style sheet has been injected for a given URL.
        (fillURLListFromPaths): Helper which converts paths passed via varargs into a whitelist or blacklist.
        (removeOldInjectedStyleSheetsAndResetLists): Function to start afresh.
        (testWebViewGroupInjectedStyleSheet): The actual test.
        (serverCallback): Server callback for use with the test. We cannot use loadHTML or
        loadAlternateHTML, because that checks the whitelist and blacklist against about:blank.
        (beforeAll): Initialize the server and new test.
        (afterAll): Clean up the server.

2013-04-26  Simon Cooper  <scooper@apple.com>

        Permit ~/Library or ~/Library/Preferences to be symlinks
        https://bugs.webkit.org/show_bug.cgi?id=115142
        <rdar://problem/12953603>

        Reviewed by Alexey Proskuryakov.

        Pass in two new parameters which are the resolved paths to ~/Library
        and ~/Library/Preferences. Added new expansion functions and
        substituted the new functions for home-regex, home-subpath and
        home-literal for places referencing resources in "~/Library" or
        "~/Library/Preferences".

        * Resources/PlugInSandboxProfiles/com.apple.QuickTime Plugin.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.microsoft.SilverlightPlugin.sb:
        * Resources/PlugInSandboxProfiles/com.oracle.java.JavaAppletPlugin.sb:
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):

2013-04-26  Alexey Proskuryakov  <ap@apple.com>

        [WK2] WKContextClient doesn't need to be versioned yet
        https://bugs.webkit.org/show_bug.cgi?id=115279

        Reviewed by Anders Carlsson.

        * Shared/APIClientTraits.cpp:
        * Shared/APIClientTraits.h:
        * UIProcess/API/C/WKContext.h:

2013-04-26  Anders Carlsson  <andersca@apple.com>

        Downloads need to be converted from the NSURLConnection, not canceled and restarted, when using the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=115277
        <rdar://problem/12890184>

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::convertMainResourceLoadToDownload):
        Ask the download manager to convert the main resource load to a download.

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        Add new message.

        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::handle):
        Add getter.

        * Shared/Downloads/mac/DownloadMac.mm:
        (dispatchOnMainThread):
        Helper function that ensures that a given block is called on the main thread.

        (-[WKDownloadAsDelegate downloadDidBegin:]):
        (-[WKDownloadAsDelegate download:didReceiveAuthenticationChallenge:]):
        (-[WKDownloadAsDelegate download:didReceiveResponse:]):
        (-[WKDownloadAsDelegate download:didReceiveDataOfLength:]):
        (-[WKDownloadAsDelegate download:shouldDecodeSourceDataOfMIMEType:]):
        (-[WKDownloadAsDelegate download:decideDestinationWithSuggestedFilename:]):
        (-[WKDownloadAsDelegate download:didCreateDestination:]):
        (-[WKDownloadAsDelegate downloadDidFinish:]):
        (-[WKDownloadAsDelegate download:didFailWithError:]):
        Use dispatchOnMainThread.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        Remove code that cancels the current load and starts a new download.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::convertMainResourceLoadToDownload):
        Send the ConvertMainResourceLoadToDownload message to the network process.

2013-04-25  Roger Fong  <roger_fong@apple.com>

        Disable sub-pixel layout on mac.
        https://bugs.webkit.org/show_bug.cgi?id=114999.

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2013-04-26  Simon Fraser  <simon.fraser@apple.com>

        Inspector window is often blank when opened
        https://bugs.webkit.org/show_bug.cgi?id=115220

        Reviewed by Tim Horton.
        
        After disabling tiled scrolling and accelerated drawing in r149006, the
        Inspector window was often missing its content after opening. This only
        happened when the user has a preference on disk to use accelerated drawing
        in the Inspector.
        
        The missing content was caused by a failure to connect the correct contextID
        for remote layer hosting. On window creation, we hook up a context using
        WindowServer layer hosting (the default), but then switch back to app-hosted
        layers for the Inspector window. This switching happens in didUpdateBackingStoreState(),
        but that can be re-entered via its call to sendUpdateBackingStoreState(). In
        that cause, on unwinding the stack it would call enterAcceleratedCompositingMode()
        with a stale layerTreeContext.
        
        Fix by moving the code that exits/enters accelerated compositing mode to before
        the call to sendUpdateBackingStoreState() that can cause re-entrancy. That avoids
        use of a possibly stale layerTreeContext.

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didUpdateBackingStoreState):

2013-04-26  Alexey Proskuryakov  <ap@apple.com>

        Crashes under ResourceHandle::continueDidReceiveResponse when loading blobs
        https://bugs.webkit.org/show_bug.cgi?id=115273

        Reviewed by Anders Carlsson.

        Covered by multiple existing tests (when using NetworkProcess), including:
        - http/tests/fileapi/blob-url-in-subframe.html
        - http/tests/fileapi/create-blob-url-from-data-url.html

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        Work around BlobResourceHandle badness.

2013-04-26  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Remove NetworkResourceLoader::cleanupOnMainThread
        https://bugs.webkit.org/show_bug.cgi?id=115268

        Reviewed by Brady Eidson.

        All cleanup() callers are now on main thread, and this indirection only complicates debugging.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::connectionToWebProcessDidClose):
        (WebKit::NetworkResourceLoader::abortInProgressLoad):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFail):
        * NetworkProcess/NetworkResourceLoader.h:

2013-04-26  Andy Estes  <aestes@apple.com>

        [WebKit2] CustomProtocolManager's m_registeredSchemes HashSet can be accessed by multiple threads
        https://bugs.webkit.org/show_bug.cgi?id=115267

        Reviewed by Alexey Proskuryakov.

        * Shared/Network/CustomProtocols/CustomProtocolManager.h: Added a Mutex to protect m_registeredSchemes.
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (WebKit::CustomProtocolManager::registerScheme): Acquired the mutex before accessing m_registeredSchemes.
        (WebKit::CustomProtocolManager::unregisterScheme): Ditto.
        (WebKit::CustomProtocolManager::supportsScheme): Ditto.

2013-04-26  Alexey Proskuryakov  <ap@apple.com>

        Blobs are not associated with connection when there are no sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=115264

        Reviewed by Brady Eidson.

        Covered by multiple fast/files tests when using NetworkProcess.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL): Fixed a logic error.

2013-04-25  Andy Estes  <aestes@apple.com>

        [WebKit2] Loading a resource from a custom protocol in a synchronous XHR times out
        https://bugs.webkit.org/show_bug.cgi?id=115223

        Reviewed by Darin Adler.

        When WebKit performs a synchronous load on the Mac, it spins a nested
        run loop in a mode that only accepts input from the NSURLConnection
        performing the load. When the load is for a custom protocol in WebKit2,
        we proxy it to the UI process via CoreIPC messages, but the response
        messages from the UI process are never processed as long as the run
        loop is in a non-common mode (and we wouldn't want to process messages
        that could re-enter WebCore in the middle of loading, anyway). Since
        these messages never make it back to the NSURLConnection handling the
        request, the connection eventually times out.

        Fix this by using a work queue to handle custom protocol messages in
        the networking process. The work queue can process incoming custom
        protocol messages while the main thread is blocked.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeConnection): Called
        initializeConnection() on all the NetworkProcess's supplements.
        * Shared/ChildProcessSupplement.h: Added a base class for
        NetworkProcessSupplement and WebProcessSupplement which defines
        initializeConnection and provides an empty default implementation.
        (WebKit::ChildProcessSupplement::~ChildProcessSupplement):
        (WebKit::ChildProcessSupplement::initializeConnection):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (WebKit::CustomProtocolManager::CustomProtocolManager): Instantiated a
        work queue for message processing.
        (WebKit::CustomProtocolManager::initializeConnection): Added the work
        queue as a message receiver on the CoreIPC connection.
        (WebKit::CustomProtocolManager::initialize): If we're in the web
        process and the network process is being used, unregister and destroy
        the work queue we previously created. It'd be better to not create it
        in the first place, but we have to register our work queue with the
        CoreIPC connection before it is established, which is before the UI
        process has told us whether the network process is in use.
        * Shared/Network/NetworkProcessSupplement.h: Inherited from
        ChildProcessSupplement.
        * WebKit2.xcodeproj/project.pbxproj: Added ChildProcessSupplement.h.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection): Called
        initializeConnection() on all the WebProcess's supplements.
        * WebProcess/WebProcessSupplement.h: Inherited from
        ChildProcessSupplement.

2013-04-26  Eduardo Lima Mitev  <elima@igalia.com>

        [GTK] Compilation of ProcessLauncherGtk.cpp fails due to unresolved symbols
        https://bugs.webkit.org/show_bug.cgi?id=115240

        Reviewed by Martin Robinson.

        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp: Includes sys/socket.h if OS is Linux

2013-04-25  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Plugin process broken due to a missing symbol
        https://bugs.webkit.org/show_bug.cgi?id=114901

        Reviewed by Gustavo Noronha Silva.

        Work around the missing symbols in the WebKitPluginProcess by specifying the required libraries
        multiple times in the program's LDADD list. Libtool fights fiercely to avoid duplicate static library
        references among the linker arguments (even if using the --preserve-dup-deps flag) so the required libraries
        are specified in various ways.

        The unresolved symbols in object files are no longer ignored as this can lead to further trouble (for instance
        this patch also adds a few missing source files to the list of WebKitPluginProcess sources). The Freetype and
        gamepad dependencies' libraries are also added to the binary's LDADD list.

        * GNUmakefile.am:
        * GNUmakefile.list.am: Add a few missing files to the build.

2013-04-24  Chris Fleizach  <cfleizach@apple.com>

        WEB SPEECH: language support does not work as expected
        https://bugs.webkit.org/show_bug.cgi?id=115119

        Reviewed by Alexey Proskuryakov.

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

2013-04-25  Anders Carlsson  <andersca@apple.com>

        Rename DecidePolicyForResponse message to DecidePolicyForResponseSync
        https://bugs.webkit.org/show_bug.cgi?id=115207

        Reviewed by Beth Dakin.

        In preparation for adding a new async DecidePolicyForResponse message,
        rename the current one to DecidePolicyForResponseSync. Also split out the async part
        into a separate WebPageProxy::decidePolicyForResponse member function.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        (WebKit::WebPageProxy::decidePolicyForResponseSync):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):

2013-04-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ConsoleMessage should include line and column number where possible
        https://bugs.webkit.org/show_bug.cgi?id=114929

        Reviewed by Timothy Hatcher.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::addMessageToConsole):
        * WebProcess/WebCoreSupport/WebChromeClient.h:

2013-04-25  Brady Eidson  <beidson@apple.com>

        Thread safety issues in WKCustomProtocol.
        <rdar://problem/13247304> and https://bugs.webkit.org/show_bug.cgi?id=115185

        Reviewed by Alexey Proskuryakov.

        * Shared/Network/CustomProtocols/CustomProtocolManager.h:

        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (WebKit::CustomProtocolManager::addCustomProtocol): Protect m_customProtocolMap with its mutex.
        (WebKit::CustomProtocolManager::removeCustomProtocol): Ditto.
        (WebKit::CustomProtocolManager::didFailWithError):
        (WebKit::CustomProtocolManager::didLoadData):
        (WebKit::CustomProtocolManager::didReceiveResponse):
        (WebKit::CustomProtocolManager::didFinishLoading):
        (WebKit::CustomProtocolManager::protocolForID): Protect m_customProtocolMap with its mutex, and return
          a RetainPtr instead of a raw pointer.

2013-04-25  Jer Noble  <jer.noble@apple.com>

        Further build fixes: correct two more misnames of WebProcessShim.dyld.

        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        (WebKit::WebContentProcessMainDelegate::doPreInitializationWork):
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:

2013-04-25  Martin Robinson  <mrobinson@igalia.com>

        Make gobject-introspection warnings non-fatal
        https://bugs.webkit.org/show_bug.cgi?id=115184

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Make it so that gobject-introspection errors do not fail the buld
        until we get to a point where gobject-introspection gives consistent warnings.

2013-04-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitWebViewGroup to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=111265

        Reviewed by Anders Carlsson.

        In the current API the settings are always shared by all web
        views, because they are always created on the default page
        group. This makes impossible to have different settings on
        different web views. Expose the page group in the API,
        so that users can create web views on a group different than the
        default one to have their own settings.

        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkitSettingsGetPreferences): Helper private method to get the
        WebPreferences wrapped by a WebKitSettings object.
        * UIProcess/API/gtk/WebKitSettingsPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate): Add a default WebKitWebViewGroup.
        (webkitWebContextCreatePageForWebView): Create the WebPageProxy
        with the WebPageGroup of the given WebKitWebViewGroup.
        (webkitWebContextGetDefaultWebViewGroup): Helper private method to
        get the default WebKitWebViewGroup.
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate): Add a WebKitWebViewGroup in case the view
        is created with a group.
        (webkitWebViewUpdateSettings): Keep a reference of the group
        settings to be able to disconnect the signals when the settings
        object is replaced in the view group and connect to the signals
        for the custom settings.
        (webkitWebViewSettingsChanged): Disconnect the signals for the
        previous settings and set the new settings.
        (webkitWebViewDisconnectSettingsChangedSignalHandler): Disconnect
        notify::settings signal of WebKitWebViewGroup.
        (webkitWebViewConstructed): Pass the current WebKitWebViewGroup to
        webkitWebContextCreatePageForWebView().
        (webkitWebViewSetProperty): Add setter for group property.
        (webkitWebViewGetProperty): Add getter for group property.
        (webkitWebViewDispose): Call
        webkitWebViewDisconnectSettingsChangedSignalHandler().
        (webkit_web_view_class_init): Add WebKitWebView:group property.
        (webkitWebViewHandleAuthenticationChallenge): Use
        webkit_web_view_get_settings().
        (webkit_web_view_new_with_group): Create a new web view with the
        given WebKitWebViewGroup.
        (webkit_web_view_get_group): Return the current WebKitWebViewGroup
        or the default one if the view was not created with
        webkit_web_view_new_with_group().
        (webkit_web_view_set_settings): Set the settings of the current
        WebKitWebViewGroup.
        (webkit_web_view_get_settings): Get the settings of the current
        WebKitWebViewGroup.
        (webkit_web_view_set_zoom_level): Use
        webkit_web_view_get_settings().
        (webkit_web_view_get_zoom_level): Ditto.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewGroup.cpp: Added.
        (_WebKitWebViewGroupPrivate):
        (webkitWebViewGroupSetProperty):
        (webkitWebViewGroupGetProperty):
        (webkitWebViewGroupConstructed):
        (webkit_web_view_group_class_init):
        (webkitWebViewGroupAttachSettingsToPageGroup): Set the
        WebPreferences of the current WebKitSettings to the WebPageGroup.
        (webkitWebViewGroupCreate): Create a new WebKitWebViewGroup for
        the given WebPageGroup.
        (webkitWebViewGroupGetPageGroup): Helper private method to get the
        WebPageGroup wrapped by the WebKitWebViewGroup.
        (webkit_web_view_group_new): Create a new WebKitWebViewGroup.
        (webkit_web_view_group_get_name): Return the name of a
        WebKitWebViewGroup.
        (webkit_web_view_group_get_settings): Get the settings of a
        WebKitWebViewGroup.
        (webkit_web_view_group_set_settings): Set new settings of a
        WebKitWebViewGroup.
        * UIProcess/API/gtk/WebKitWebViewGroup.h: Added.
        (_WebKitWebViewGroup):
        (_WebKitWebViewGroupClass):
        * UIProcess/API/gtk/WebKitWebViewGroupPrivate.h: Added.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add
        WebKitWebViewGroup section.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add
        webkit_web_view_group_get_type.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Add new files to
        compilation.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewSettings): We can't watch settings in the default view
        group anymore, because they are not released with the web view but
        with the web context that is freed after the Test destructor.
        * UIProcess/API/gtk/tests/TestWebKitWebViewGroup.cpp: Added.
        (testWebViewGroupDefault):
        (testWebViewGroupNewGroup):
        (testWebViewNewWithGroup):
        (testWebViewGroupSettings):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/webkit2.h: Include WebKitWebViewGroup.h.

2013-04-25  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix: Fix the name of DyldInterpose.h in
        SecItemShimLibrary.mm, fix the name of WebProcessShim.dyld in
        WebContentServiceEntryPoint.mm, and stop linking against libWTF.a
        directly (which means removing ASSERTs from
        CookieStorageShimLibrary.cpp).

        * Shared/mac/CookieStorageShimLibrary.cpp:
        (WebKit::shimCFHTTPCookieStorageCopyRequestHeaderFieldsForURL):
        (WebKit::WebKitCookieStorageShimInitialize):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):
        * WebProcess/mac/SecItemShimLibrary.mm:

2013-04-24  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Cursor should become an i-beam when over selectable text
        https://bugs.webkit.org/show_bug.cgi?id=115018
        <rdar://problem/12645012>

        Reviewed by Alexey Proskuryakov.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        Add updateCursor(), the UpdateCursorMode and HitTestResult enums, and
        storage for the last PDF hit test result.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::updateCursor):
        Hit test the PDF. If there is a word under the cursor, use the I-beam cursor,
        otherwise, use the default pointer cursor. This approximates PDFKit's behavior,
        though does not match it precisely in the case of annotations.
        Only send the cursor update to the UIProcess if it is a change, or if
        we're explicitly asked to update.
        (WebKit::PDFPlugin::handleMouseEvent):
        If we're processing a mouse moved event, update the cursor if needed.
        (WebKit::PDFPlugin::handleMouseEnterEvent):
        If the cursor just moved over the PDFPlugin, force-update the cursor,
        even if it matches the previously-set cursor (because something else
        likely updated the cursor while it was not over the PDFPlugin).

2013-04-24  Tim Horton  <timothy_horton@apple.com>

        Page Overlays shouldn't waste time flushing layers if we're not going to use it
        https://bugs.webkit.org/show_bug.cgi?id=115145

        Reviewed by Simon Fraser.

        Don't flush the page overlay layer when it's installed - it starts out
        with paintContents=false, so we don't really need a CALayer yet. We'll
        flush later if need be.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):

2013-04-24  Jer Noble  <jer.noble@apple.com>

        Further unreviewed build fix; CFNetwork.framework is the one which Lion
        refuses to link against.

        * WebKit2.xcodeproj/project.pbxproj:

2013-04-24  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; link against CoreServices.framework instead of against
        CoreFoundation.framework directly, to make the linker happy on Lion.

        * WebKit2.xcodeproj/project.pbxproj:

2013-04-22  Jer Noble  <jer.noble@apple.com>

        WWDC session videos don’t play at developer.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=114858

        Reviewed by Eric Carlson. Rubber stamped by Brady Eidson.

        AVFoundation uses CFNetwork to store and retrieve cookies from the global store.
        However, in the case where network access happens in the NetworkProcess, session
        cookies are stored in-memory, and are not accessable in the WebProcess. Until such
        a time as AVFoundation can provide an API which would allow us to provide cookies
        for a specific request, we will interpose the CFNetwork method which they use to
        retrieve the cookie string from the cookie store for their pending request.

        Duplicate the previous SecItemShim target to a new, WebProcessShim target. This
        target includes the SecItemShim functionality, but will add a new shim for cookie
        retrieval:
        * Shared/mac/CookieStorageShimLibrary.h: Added
        (CookieStorageShimCallbacks):
        * Shared/mac/CookieStorageShimLibrary.cpp: Added.
        (WebKit::ShimProtector::ShimProtector): A simple stack-based counter class.
        (WebKit::ShimProtector::~ShimProtector):
        (WebKit::ShimProtector::count):
        (WebKit::shimCFHTTPCookieStorageCopyRequestHeaderFieldsForURL): Interpose
            the CFNetwork call, and pass to the registered callback.
        (WebKit::WebKitCookieStorageShimInitialize): Register the callbacks.

        Add a helper singleton class which will talk to the shim through the 
        registered callbacks:
        * Shared/mac/CookieStorageShim.h: Added
        (WebKit::CookieStorageShim::CookieStorageShim):
        * Shared/mac/CookieStorageShim.cpp: Added.
        (WebKit::webKitCookieStorageCopyRequestHeaderFieldsForURL): Pass the request
            over to the NetworkProcess.
        (WebKit::CookieStorageShim::shared): Simple singleton.
        (WebKit::CookieStorageShim::initialize): Call the library initializer.

        Initialize the shim only when the WebProcess is delegating network loading
        to the NetworkProcess:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

        Rename the WebProcess's shim from SecItemShim -> WebProcessShim:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::addDYLDEnvironmentAdditions):
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        (WebKit::WebContentProcessMainDelegate::doPreInitializationWork):
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):

        As the DYLD_INTERPOSE macro is used in multiple files now, put it in its
        own header:
        * Shared/mac/DyldInterpose.h: Added.
        * PluginProcess/mac/PluginProcessShim.mm:
        * WebProcess/mac/SecItemShimLibrary.mm:

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

2013-04-24  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Fix build error after r148963.
        https://bugs.webkit.org/show_bug.cgi?id=115126

        Reviewed by Laszlo Gombos.

        Generate forwarding headers for 'CoordinatedGraphics' to generate WKView.h

        * PlatformEfl.cmake:

2013-04-24  Anders Carlsson  <andersca@apple.com>

        Crash when trying to determine the length of an invalid message
        https://bugs.webkit.org/show_bug.cgi?id=115127
        <rdar://problem/13700736>

        Reviewed by Beth Dakin.

        Use message instead of incomingMessage since incomingMessage will always be null.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::processIncomingMessage):

2013-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use stamp files for generate-forwarding-headers makefile rules
        https://bugs.webkit.org/show_bug.cgi?id=115118

        Reviewed by Martin Robinson.

        Use a stamp file for the WebKit2 forwarding generator rule. Also
        fix the rule dependencies that pointed to a non existent variable.

        * GNUmakefile.am:

2013-04-24  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Implement LayerTreeHostGtk::pageBackgroundTransparencyChanged
        https://bugs.webkit.org/show_bug.cgi?id=115094

        Reviewed by Tim Horton.

        The method was introduced in r149004 (and a stub implementation for the GTK port added in r149017).
        Implement the method for the GTK port in the same manner it is implemented under the Mac port,
        calling setContentsOpaque on the non-composited content layer.

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

2013-04-24  Simon Cooper  <scooper@apple.com>

        <rdar://problem/13614117> Refine the Flash Player profile
        https://bugs.webkit.org/show_bug.cgi?id=115016

        Reviewed by Alexey Proskuryakov.

        Add some refinements to the Flash Player profile. Make a non-/ home
        directory work. Fixes that allow file uploading via user selected files.

        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:

2013-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WebKit2] Add CoordinatedGraphics to the list of platforms in generate-forwarding-headers.pl
        https://bugs.webkit.org/show_bug.cgi?id=115098

        Reviewed by Martin Robinson.

        r148963 introduced a new WKView.h header in a directory not listed
        as a platform prefix in generate-forwarding-headers.pl.

        * Scripts/generate-forwarding-headers.pl: Replace unused chromium
        plaform prefix with CoordinatedGraphics that is used now.

2013-04-24  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Add number to list from remote web inspector.
        https://bugs.webkit.org/show_bug.cgi?id=115014

        Reviewed by Benjamin Poulain.

        * UIProcess/InspectorServer/front-end/inspectorPageIndex.html:

2013-04-24  Vlad Vasilyeu  <vasvlad@gmail.com>

        --minimal build fails with error: Source/WebKit2/Platform/CoreIPC/ArgumentCoder.h:44:36: error: decode is not a member of WebCore::TextCheckingResult
        https://bugs.webkit.org/show_bug.cgi?id=114367

        Reviewed by Benjamin Poulain.

        Include WebCoreArgumentCoders.h to WebEditorClientEfl.cpp from
        WebKit2/Shared/ for successfully building with option --minimal

        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:

== Rolled over to ChangeLog-2013-04-24 ==
